home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winui / input / ime / imeapps / status.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-11  |  5.8 KB  |  202 lines

  1. /**********************************************************************/
  2. /*                                                                    */
  3. /*      STATUS.C                                                      */
  4. /*                                                                    */
  5. /*      Copyright (c) 1995-1997  Microsoft Corporation                */
  6. /*                                                                    */
  7. /**********************************************************************/
  8.  
  9. #include "windows.h"
  10. #include "commctrl.h"
  11. #include "imm.h"
  12. #include "resource.h"
  13. #include "imeapps.h"
  14.  
  15. const char szImeNull[]     = "";
  16. const char szImeOpen[]     = "On";
  17. const char szImeClose[]    = "Off";
  18. const char szImeAlpha[]    = "Alpha";
  19. const char szImeNative[]   = "Native";
  20. const char szImeKatakana[] = "Kata";
  21. const char szImeHalf[]     = "Half";
  22. const char szImeFull[]     = "Full";
  23. const char szImeRoman[]    = "Roman";
  24. const char szImeCode[]     = "Code";
  25. const char szImeHanja[]    = "Hanja";
  26. const char szImeSoftKbd[]  = "SoftKbd";
  27. const char szImeNoConv[]   = "NoConv";
  28. const char szImeEUDC[]     = "EUDC";
  29. const char szImeSymbol[]   = "Symbol";
  30.  
  31. #define SBITEM_OPENSTATUS    0
  32. #define SBITEM_NATIVEMODE    1
  33. #define SBITEM_FULLSHAPE     2
  34. #define SBITEM_ROMAN         3
  35. #define SBITEM_CHARCODE      4
  36. #define SBITEM_HANJA         5
  37. #define SBITEM_SOFTKBD       6
  38. #define SBITEM_NOCONVERSION  7
  39. #define SBITEM_EUDC          8
  40. #define SBITEM_SYMBOL        9
  41.  
  42. #define SBITEM_CMODEFIRST    1
  43. #define SBITEM_CMODELAST     9
  44.  
  45. #define NUM_PARTS 10
  46. int nPartsWidthTbl[NUM_PARTS] = {30,50,30,30,30,30,30,30,30,30};
  47.  
  48. BOOL CreateStatus(HWND hWnd)
  49. {
  50.     int *pPartsWidth;
  51.     int i;
  52.     int nWidth = 0;
  53.  
  54.     hWndStatus = CreateStatusWindow(WS_CHILD | WS_VISIBLE, NULL ,
  55.                                                    hWnd,  STATUS_ID);
  56.  
  57.  
  58.     if (!hWndStatus)
  59.         return FALSE; 
  60.  
  61.     pPartsWidth = (int *)LocalAlloc(LPTR,sizeof(int) * NUM_PARTS);
  62.  
  63.     for (i = 0; i < NUM_PARTS; i++)
  64.     {
  65.         nWidth += nPartsWidthTbl[i];
  66.         pPartsWidth[i] = nWidth;
  67.     }
  68.  
  69.     SendMessage(hWndStatus, SB_SETPARTS,
  70.                     (WPARAM)NUM_PARTS,(LPARAM)pPartsWidth);
  71.  
  72.     LocalFree((HANDLE)pPartsWidth);
  73.  
  74.     return TRUE;
  75. }
  76.  
  77. void SetStatusItems(HWND hWnd)
  78. {
  79.     HIMC hIMC;
  80.     BOOL fOpen;
  81.     DWORD dwConvMode,dwSentMode;
  82.  
  83.     hIMC = ImmGetContext(hWnd);
  84.  
  85.     fOpen = ImmGetOpenStatus(hIMC);
  86.  
  87.  
  88.     SetOpenStatusParts(fOpen);
  89.  
  90.     ImmGetConversionStatus(hIMC,&dwConvMode,&dwSentMode);
  91.  
  92.     if (fOpen)
  93.         SetConvModeParts(dwConvMode);
  94.     else
  95.         ClearConvModeParts();
  96.     
  97.     ImmReleaseContext(hWnd,hIMC);
  98.  
  99. }
  100.  
  101.  
  102. void SetOpenStatusParts(BOOL fOpen)
  103. {
  104.     if (fOpen)
  105.         SendMessage(hWndStatus,SB_SETTEXT,
  106.                 SBITEM_OPENSTATUS,(LPARAM)&szImeOpen);
  107.     else
  108.         SendMessage(hWndStatus,SB_SETTEXT,
  109.                 SBITEM_OPENSTATUS,(LPARAM)&szImeClose);
  110. }
  111.  
  112. void SetConvModeParts(DWORD dwConvMode)
  113. {
  114.     switch (dwConvMode & IME_CMODE_LANGUAGE)
  115.     {
  116.         case IME_CMODE_ALPHANUMERIC:
  117.             SendMessage(hWndStatus,SB_SETTEXT,
  118.                     SBITEM_NATIVEMODE,(LPARAM)&szImeAlpha);
  119.             break;
  120.  
  121.         case IME_CMODE_NATIVE:
  122.             SendMessage(hWndStatus,SB_SETTEXT,
  123.                     SBITEM_NATIVEMODE,(LPARAM)&szImeNative);
  124.  
  125.             break;
  126.  
  127.         case (IME_CMODE_NATIVE | IME_CMODE_KATAKANA):
  128.             SendMessage(hWndStatus,SB_SETTEXT,
  129.                     SBITEM_NATIVEMODE,(LPARAM)&szImeKatakana);
  130.  
  131.             break;
  132.  
  133.         default:
  134.             SendMessage(hWndStatus,SB_SETTEXT,
  135.                     SBITEM_NATIVEMODE,(LPARAM)&szImeNull);
  136.             break;
  137.     }
  138.  
  139.  
  140.     if (dwConvMode & IME_CMODE_ROMAN)
  141.         SendMessage(hWndStatus,SB_SETTEXT,
  142.                 SBITEM_ROMAN,(LPARAM)&szImeRoman);
  143.     else
  144.         SendMessage(hWndStatus,SB_SETTEXT,
  145.                 SBITEM_ROMAN,(LPARAM)&szImeNull);
  146.  
  147.     if (dwConvMode & IME_CMODE_CHARCODE)
  148.         SendMessage(hWndStatus,SB_SETTEXT,
  149.                 SBITEM_CHARCODE,(LPARAM)&szImeCode);
  150.     else
  151.         SendMessage(hWndStatus,SB_SETTEXT,
  152.                 SBITEM_CHARCODE,(LPARAM)&szImeNull);
  153.  
  154.     if (dwConvMode & IME_CMODE_FULLSHAPE)
  155.         SendMessage(hWndStatus,SB_SETTEXT,
  156.                 SBITEM_FULLSHAPE,(LPARAM)&szImeFull);
  157.     else
  158.         SendMessage(hWndStatus,SB_SETTEXT,
  159.                 SBITEM_FULLSHAPE,(LPARAM)&szImeHalf);
  160.  
  161.     if (dwConvMode & IME_CMODE_HANJACONVERT)
  162.         SendMessage(hWndStatus,SB_SETTEXT,
  163.                 SBITEM_HANJA,(LPARAM)&szImeHanja);
  164.     else
  165.         SendMessage(hWndStatus,SB_SETTEXT,
  166.                 SBITEM_HANJA,(LPARAM)&szImeNull);
  167.  
  168.     if (dwConvMode & IME_CMODE_SOFTKBD)
  169.         SendMessage(hWndStatus,SB_SETTEXT,
  170.                 SBITEM_SOFTKBD,(LPARAM)&szImeSoftKbd);
  171.     else
  172.         SendMessage(hWndStatus,SB_SETTEXT,
  173.                 SBITEM_SOFTKBD,(LPARAM)&szImeNull);
  174.  
  175.     if (dwConvMode & IME_CMODE_NOCONVERSION)
  176.         SendMessage(hWndStatus,SB_SETTEXT,
  177.                 SBITEM_NOCONVERSION,(LPARAM)&szImeNoConv);
  178.     else
  179.         SendMessage(hWndStatus,SB_SETTEXT,
  180.                 SBITEM_NOCONVERSION,(LPARAM)&szImeNull);
  181.  
  182.     if (dwConvMode & IME_CMODE_EUDC)
  183.         SendMessage(hWndStatus,SB_SETTEXT,SBITEM_EUDC,(LPARAM)&szImeEUDC);
  184.     else
  185.         SendMessage(hWndStatus,SB_SETTEXT,SBITEM_EUDC,(LPARAM)&szImeNull);
  186.  
  187.     if (dwConvMode & IME_CMODE_SYMBOL)
  188.         SendMessage(hWndStatus,SB_SETTEXT,SBITEM_SYMBOL,(LPARAM)&szImeSymbol);
  189.     else
  190.         SendMessage(hWndStatus,SB_SETTEXT,SBITEM_SYMBOL,(LPARAM)&szImeNull);
  191. }
  192.  
  193. void ClearConvModeParts()
  194. {
  195.     int i;
  196.  
  197.     for (i = SBITEM_CMODEFIRST; i <= SBITEM_CMODELAST; i++)
  198.         SendMessage(hWndStatus,SB_SETTEXT, i,(LPARAM)&szImeNull);
  199.  
  200. }
  201.  
  202.