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 / mode.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-11  |  4.7 KB  |  170 lines

  1. /**********************************************************************/
  2. /*                                                                    */
  3. /*      MODE.C                                                        */
  4. /*                                                                    */
  5. /*      Copyright (c) 1995-1997  Microsoft Corporation                */
  6. /*                                                                    */
  7. /**********************************************************************/
  8.  
  9. #include "windows.h"
  10. #include "imm.h"
  11. #include "resource.h"
  12. #include "imeapps.h"
  13.  
  14.  
  15. LRESULT HandleModeCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
  16. {
  17.     HIMC hIMC = ImmGetContext(hWndCompStr);
  18.     DWORD dwConv, dwSent;
  19.     DWORD dwTemp;
  20.  
  21.     ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
  22.  
  23.     switch(LOWORD(wParam))
  24.     {
  25.         case IDM_NATIVEMODE:
  26.             dwTemp = dwConv & ~IME_CMODE_LANGUAGE;
  27.  
  28.             switch (dwConv & IME_CMODE_LANGUAGE)
  29.             {
  30.                 case IME_CMODE_ALPHANUMERIC:
  31.                     dwTemp |= IME_CMODE_NATIVE;
  32.                     break;
  33.  
  34.                 case IME_CMODE_NATIVE:
  35.                     dwTemp |= (IME_CMODE_NATIVE | IME_CMODE_KATAKANA);
  36.                     break;
  37.  
  38.                 case (IME_CMODE_NATIVE | IME_CMODE_KATAKANA):
  39.                 default:
  40.                     break;
  41.             }
  42.             dwConv = dwTemp;
  43.             break;
  44.  
  45.         case IDM_FULLHALF:
  46.             if (dwConv & IME_CMODE_FULLSHAPE)
  47.                 dwConv &= ~IME_CMODE_FULLSHAPE;
  48.             else
  49.                 dwConv |= IME_CMODE_FULLSHAPE;
  50.             break;
  51.  
  52.         case IDM_ROMAN:
  53.             if (dwConv & IME_CMODE_ROMAN)
  54.                 dwConv &= ~IME_CMODE_ROMAN;
  55.             else
  56.                 dwConv |= IME_CMODE_ROMAN;
  57.             break;
  58.  
  59.         case IDM_CHARCODE:
  60.             if (dwConv & IME_CMODE_CHARCODE)
  61.                 dwConv &= ~IME_CMODE_CHARCODE;
  62.             else
  63.                 dwConv |= IME_CMODE_CHARCODE;
  64.             break;
  65.  
  66.         case IDM_HANJA:
  67.             if (dwConv & IME_CMODE_HANJACONVERT)
  68.                 dwConv &= ~IME_CMODE_HANJACONVERT;
  69.             else
  70.                 dwConv |= IME_CMODE_HANJACONVERT;
  71.             break;
  72.  
  73.         case IDM_SOFTKBD:
  74.             if (dwConv & IME_CMODE_SOFTKBD)
  75.                 dwConv &= ~IME_CMODE_SOFTKBD;
  76.             else
  77.                 dwConv |= IME_CMODE_SOFTKBD;
  78.             break;
  79.  
  80.         case IDM_EUDC:
  81.             if (dwConv & IME_CMODE_EUDC)
  82.                 dwConv &= ~IME_CMODE_EUDC;
  83.             else
  84.                 dwConv |= IME_CMODE_EUDC;
  85.             break;
  86.  
  87.         case IDM_SYMBOL:
  88.             if (dwConv & IME_CMODE_SYMBOL)
  89.                 dwConv &= ~IME_CMODE_SYMBOL;
  90.             else
  91.                 dwConv |= IME_CMODE_SYMBOL;
  92.             break;
  93.     }
  94.  
  95.     ImmSetConversionStatus(hIMC,dwConv,dwSent);
  96.  
  97.     ImmReleaseContext(hWndCompStr,hIMC);
  98.  
  99.     return 1L;
  100. }
  101.  
  102. LRESULT HandleConvertCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)
  103. {
  104.     HIMC hIMC = ImmGetContext(hWndCompStr);
  105.     DWORD dwSel;
  106.     DWORD dwSize;
  107.     LPCANDIDATELIST lpCL;
  108.  
  109.     switch(wParam)
  110.     {
  111.         case IDM_CONVERT:
  112.             ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_CONVERT,0);
  113.             break;
  114.  
  115.         case IDM_CANCEL:
  116.             ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_CANCEL,0);
  117.             break;
  118.  
  119.         case IDM_REVERT:
  120.             ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_REVERT,0);
  121.             break;
  122.  
  123.         case IDM_COMPLETE:
  124.             ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_COMPLETE,0);
  125.             break;
  126.  
  127.         case IDM_OPENCAND:
  128.             ImmNotifyIME(hIMC,NI_OPENCANDIDATE,0,0);
  129.             break;
  130.  
  131.         case IDM_CLOSECAND:
  132.             ImmNotifyIME(hIMC,NI_CLOSECANDIDATE,0,0);
  133.             break;
  134.  
  135.         case IDM_NEXTCAND:
  136.         case IDM_PREVCAND:
  137.             if (dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
  138.             {
  139.                 lpCL = (LPCANDIDATELIST)GlobalAlloc(GPTR,dwSize);
  140.         
  141.                 ImmGetCandidateList(hIMC,0x0,lpCL,dwSize);
  142.  
  143.                 dwSel = lpCL->dwSelection;
  144.  
  145.                 if (wParam == IDM_NEXTCAND)
  146.                 {
  147.                    if (++dwSel >= lpCL->dwCount)
  148.                       dwSel = 0;
  149.                 }
  150.                 else
  151.                 {
  152.                    if (dwSel)
  153.                       dwSel--;
  154.                    else
  155.                       dwSel = lpCL->dwCount - 1;
  156.                 }
  157.                 GlobalFree((HANDLE)lpCL);
  158.  
  159.                 ImmNotifyIME(hIMC,NI_SELECTCANDIDATESTR,0,dwSel);
  160.             }
  161.             break;
  162.  
  163.     }
  164.  
  165.     ImmReleaseContext(hWndCompStr,hIMC);
  166.  
  167.     return 1;
  168. }
  169.  
  170.