ReactOS 0.4.16-dev-1470-gfbd70c8
imemenu.h File Reference
#include <immdev.h>
Include dependency graph for imemenu.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  tagIMEMENUITEM
 
struct  tagIMEMENUNODE
 

Macros

#define ID_STARTIMEMENU   1000
 

Typedefs

typedef struct tagIMEMENUITEM IMEMENUITEM
 
typedef struct tagIMEMENUITEMPIMEMENUITEM
 
typedef struct tagIMEMENUNODE IMEMENUNODE
 
typedef struct tagIMEMENUNODEPIMEMENUNODE
 

Functions

PIMEMENUNODE CreateImeMenu (_In_ HIMC hIMC, _Inout_opt_ PIMEMENUITEMINFO lpImeParentMenu, _In_ BOOL bRightMenu)
 
HMENU MenuFromImeMenu (_In_ const IMEMENUNODE *pMenu)
 
INT GetRealImeMenuID (_In_ const IMEMENUNODE *pMenu, _In_ INT nFakeID)
 
VOID CleanupImeMenus (VOID)
 

Macro Definition Documentation

◆ ID_STARTIMEMENU

#define ID_STARTIMEMENU   1000

Definition at line 12 of file imemenu.h.

Typedef Documentation

◆ IMEMENUITEM

◆ IMEMENUNODE

◆ PIMEMENUITEM

◆ PIMEMENUNODE

Function Documentation

◆ CleanupImeMenus()

VOID CleanupImeMenus ( VOID  )

Definition at line 246 of file imemenu.c.

247{
248 if (!g_pMenuList)
249 return;
250
251 PIMEMENUNODE pNext;
252 for (PIMEMENUNODE pNode = g_pMenuList; pNode; pNode = pNext)
253 {
254 pNext = pNode->m_pNext;
255 FreeMenuNode(pNode);
256 }
257
259 g_nNextMenuID = 0;
260}
PIMEMENUNODE g_pMenuList
Definition: imemenu.c:14
static BOOL FreeMenuNode(_In_ PIMEMENUNODE pMenuNode)
Definition: imemenu.c:225
INT g_nNextMenuID
Definition: imemenu.c:15
#define NULL
Definition: types.h:112
struct tagIMEMENUNODE * m_pNext
Definition: imemenu.h:25

Referenced by KbSwitch_OnPenIconMsg().

◆ CreateImeMenu()

PIMEMENUNODE CreateImeMenu ( _In_ HIMC  hIMC,
_Inout_opt_ PIMEMENUITEMINFO  lpImeParentMenu,
_In_ BOOL  bRightMenu 
)

Definition at line 62 of file imemenu.c.

66{
67 const DWORD dwFlags = (bRightMenu ? IGIMIF_RIGHTMENU : 0);
68 const DWORD dwTypes = IGIMII_CMODE |
69 IGIMII_SMODE |
70 IGIMII_CONFIGURE |
71 IGIMII_TOOLS |
72 IGIMII_HELP |
73 IGIMII_OTHER;
74 DWORD itemCount = ImmGetImeMenuItems(hIMC, dwFlags, dwTypes, lpImeParentMenu, NULL, 0);
75 if (!itemCount)
76 return NULL;
77
78 PIMEMENUNODE pMenu = AllocateImeMenu(itemCount);
79 if (!pMenu)
80 return NULL;
81
82 DWORD cbItems = sizeof(IMEMENUITEMINFO) * itemCount;
83 PIMEMENUITEMINFO pImeMenuItems = LocalAlloc(LPTR, cbItems);
84 if (!pImeMenuItems)
85 {
86 LocalFree(pMenu);
87 return NULL;
88 }
89
90 itemCount = ImmGetImeMenuItems(hIMC, dwFlags, dwTypes, lpImeParentMenu, pImeMenuItems, cbItems);
91 if (!itemCount)
92 {
93 LocalFree(pImeMenuItems);
94 LocalFree(pMenu);
95 return NULL;
96 }
97
99 for (DWORD iItem = 0; iItem < itemCount; ++iItem)
100 {
101 GetImeMenuItem(hIMC, &pImeMenuItems[iItem], bRightMenu, &pItems[iItem]);
102 }
103
104 LocalFree(pImeMenuItems);
105 return pMenu;
106}
static VOID GetImeMenuItem(_In_ HIMC hIMC, _Out_ PIMEMENUITEMINFO lpImeParentMenu, _In_ BOOL bRightMenu, _Out_ PIMEMENUITEM pItem)
Definition: imemenu.c:45
static PIMEMENUNODE AllocateImeMenu(_In_ DWORD itemCount)
Definition: imemenu.c:33
unsigned long DWORD
Definition: ntddk_ex.h:95
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM * pItems
Definition: usp10.c:62
IMEMENUITEM m_Items[ANYSIZE_ARRAY]
Definition: imemenu.h:27
#define LPTR
Definition: winbase.h:414
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

Referenced by GetImeMenuItem(), and KbSwitch_OnPenIconMsg().

◆ GetRealImeMenuID()

INT GetRealImeMenuID ( _In_ const IMEMENUNODE pMenu,
_In_ INT  nFakeID 
)

Definition at line 202 of file imemenu.c.

203{
204 if (!pMenu || !pMenu->m_nItems || nFakeID < ID_STARTIMEMENU)
205 return 0;
206
207 for (INT iItem = 0; iItem < pMenu->m_nItems; ++iItem)
208 {
209 const IMEMENUITEM *pItem = &pMenu->m_Items[iItem];
210 if (pItem->m_Info.wID == nFakeID)
211 return pItem->m_nRealID;
212
213 if (pItem->m_pSubMenu)
214 {
215 INT nRealID = GetRealImeMenuID(pItem->m_pSubMenu, nFakeID);
216 if (nRealID)
217 return nRealID;
218 }
219 }
220
221 return 0;
222}
INT GetRealImeMenuID(_In_ const IMEMENUNODE *pMenu, _In_ INT nFakeID)
Definition: imemenu.c:202
#define ID_STARTIMEMENU
Definition: imemenu.h:12
UINT m_nRealID
Definition: imemenu.h:19
IMEMENUITEMINFO m_Info
Definition: imemenu.h:18
struct tagIMEMENUNODE * m_pSubMenu
Definition: imemenu.h:20
int32_t INT
Definition: typedefs.h:58

Referenced by GetRealImeMenuID(), and KbSwitch_OnPenIconMsg().

◆ MenuFromImeMenu()

HMENU MenuFromImeMenu ( _In_ const IMEMENUNODE pMenu)

Definition at line 188 of file imemenu.c.

189{
190 HMENU hMenu = CreatePopupMenu();
191 if (!pMenu)
192 return hMenu;
193 if (!MakeImeMenu(hMenu, pMenu))
194 {
195 DestroyMenu(hMenu);
196 return NULL;
197 }
198 return hMenu;
199}
static BOOL MakeImeMenu(_In_ HMENU hMenu, _In_ const IMEMENUNODE *pMenu)
Definition: imemenu.c:165
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
BOOL WINAPI DestroyMenu(_In_ HMENU)

Referenced by KbSwitch_OnPenIconMsg().