home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************************/
- /* */
- /* IMEMENU.C */
- /* */
- /* Copyright (c) 1995-1997 Microsoft Corporation */
- /* */
- /**********************************************************************/
-
- #include "windows.h"
- #include "commdlg.h"
- #include "commctrl.h"
- #include "imm.h"
- #include "resource.h"
- #include "imeapps.h"
-
- LPDWORD lpdwIDTable = NULL;
- int nIDTable = 0;
-
- /**********************************************************************/
- /* */
- /* EndMenuItemIDTable() */
- /* */
- /**********************************************************************/
- void EndMenuItemIDTable()
- {
- if (lpdwIDTable)
- GlobalFree((HANDLE)lpdwIDTable);
-
- nIDTable = 0;
- }
-
- /**********************************************************************/
- /* */
- /* InitMenuItemIDTable() */
- /* */
- /**********************************************************************/
- void InitMenuItemIDTable()
- {
- EndMenuItemIDTable();
- lpdwIDTable = GlobalAlloc(GPTR, 100 * 2 * sizeof(DWORD));
- }
-
- /**********************************************************************/
- /* */
- /* AddIDTableEntry() */
- /* */
- /**********************************************************************/
- void AddIDTableEntry(UINT wID, DWORD dwItemData)
- {
- *(lpdwIDTable+(nIDTable*2)) = wID;
- *(lpdwIDTable+(nIDTable*2)+1) = dwItemData;
- nIDTable++;
- }
-
- /**********************************************************************/
- /* */
- /* FindItemData() */
- /* */
- /**********************************************************************/
- DWORD FindItemData(UINT wID)
- {
- int i;
- for (i = 0; i < nIDTable ; i++)
- {
- if (*(lpdwIDTable+(i*2)) == wID)
- return *(lpdwIDTable+(i*2)+1);
- }
- }
-
-
- /**********************************************************************/
- /* */
- /* FillMenuItemInfo() */
- /* */
- /**********************************************************************/
- void FillMenuItemInfo(HWND hWnd, HIMC hIMC, LPMENUITEMINFO lpmii, LPMYIMEMENUITEMINFO lpIme, BOOL fRight)
- {
- FillMemory((PVOID)lpmii, sizeof(MENUITEMINFO), 0);
- lpmii->cbSize = sizeof(MENUITEMINFO);
- lpmii->fMask = 0;
-
- // Set fType;
- if (lpIme->fType)
- {
- lpmii->fMask |= MIIM_TYPE;
- lpmii->fType = 0;
-
- if (lpIme->fType & IMFT_RADIOCHECK)
- lpmii->fType |= MFT_RADIOCHECK;
-
- if (lpIme->fType & IMFT_SEPARATOR)
- lpmii->fType |= MFT_SEPARATOR;
-
- }
-
- lpmii->fMask |= MIIM_ID;
- lpmii->wID = lpIme->wID + IDM_STARTIMEMENU;
-
- if (lpIme->fType & IMFT_SUBMENU)
- {
- lpmii->fMask |= MIIM_SUBMENU;
- lpmii->hSubMenu = CreateImeMenu(hWnd, hIMC, lpIme, fRight);
- }
-
- lpmii->fMask |= MIIM_STATE;
- lpmii->fState = lpIme->fState;
-
- if (lpIme->hbmpChecked && lpIme->hbmpUnchecked)
- {
- lpmii->fMask |= MIIM_CHECKMARKS;
- lpmii->hbmpChecked = lpIme->hbmpChecked;
- lpmii->hbmpUnchecked = lpIme->hbmpUnchecked;
- }
-
-
- lpmii->fMask |= MIIM_DATA;
- lpmii->dwItemData = lpIme->dwItemData;
-
- if (lpIme->hbmpItem)
- {
- lpmii->fMask |= MIIM_BITMAP;
- lpmii->hbmpItem = lpIme->hbmpItem;
- }
-
-
- #ifdef USEWAPI
- {
- BOOL bUDC;
- int i;
- char szTemp[IMEMENUITEM_STRING_SIZE];
-
- i = WideCharToMultiByte(CP_ACP,
- 0,
- lpIme->szString,
- wcslen(lpIme->szString),
- szTemp,
- IMEMENUITEM_STRING_SIZE,
- (LPSTR)NULL,
- &bUDC);
- szTemp[i] = '\0';
-
- if (lstrlen(szTemp))
- {
- lpmii->fMask |= MIIM_STRING;
- lstrcpy((LPSTR)lpIme->szString, szTemp);
- lpmii->dwTypeData = (LPSTR)lpIme->szString;
- lpmii->cch = lstrlen((LPSTR)lpIme->szString);
- }
- }
- #else
- if (lstrlen(lpIme->szString))
- {
- lpmii->fMask |= MIIM_STRING;
- lpmii->dwTypeData = lpIme->szString;
- lpmii->cch = lstrlen(lpIme->szString);
- }
- #endif
-
- }
-
- /**********************************************************************/
- /* */
- /* CreateImeMenu() */
- /* */
- /**********************************************************************/
- HMENU CreateImeMenu(HWND hWnd, HIMC hIMC, LPMYIMEMENUITEMINFO lpImeParentMenu, BOOL fRight)
- {
- HMENU hMenu;
- DWORD dwSize, dwNum, dwI;
- MENUITEMINFO mii;
- LPMYIMEMENUITEMINFO lpImeMenu;
-
-
- dwNum = MyImmGetImeMenuItems(hIMC, fRight ? IGIMIF_RIGHTMENU : 0,
- IGIMII_CMODE |
- IGIMII_SMODE |
- IGIMII_CONFIGURE |
- IGIMII_TOOLS |
- IGIMII_HELP |
- IGIMII_OTHER,
- lpImeParentMenu, NULL, 0);
-
- if (!dwNum)
- return 0;
-
-
-
- dwSize = dwNum * sizeof(MYIMEMENUITEMINFO);
-
- lpImeMenu = (LPMYIMEMENUITEMINFO)GlobalAlloc(GPTR, dwSize);
-
- dwNum = MyImmGetImeMenuItems(hIMC, fRight ? IGIMIF_RIGHTMENU : 0,
- IGIMII_CMODE |
- IGIMII_SMODE |
- IGIMII_CONFIGURE |
- IGIMII_TOOLS |
- IGIMII_HELP |
- IGIMII_OTHER,
- lpImeParentMenu, lpImeMenu, dwSize);
-
-
- hMenu = CreatePopupMenu();
-
- for (dwI = 0 ; dwI < dwNum; dwI++)
- {
- AddIDTableEntry(lpImeMenu->wID, lpImeMenu->dwItemData);
- FillMenuItemInfo(hWnd, hIMC, &mii, lpImeMenu + dwI, fRight);
- InsertMenuItem(hMenu, dwI, TRUE, &mii);
- }
-
- GlobalFree((HANDLE)lpImeMenu);
-
-
- return hMenu;
- }
-
-
-
-
-