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

  1. /**********************************************************************/
  2. /*                                                                    */
  3. /*      TOOLBAR.C                                                     */
  4. /*                                                                    */
  5. /*      Copyright (c) 1995-1997  Microsoft Corporation                */
  6. /*                                                                    */
  7. /**********************************************************************/
  8.  
  9. #include "windows.h" 
  10. #include "commctrl.h"
  11. #include "resource.h"
  12. #include "imeapps.h"
  13.  
  14. // Global Variables for toolbar control.
  15.  
  16.  
  17. #define NUMIMAGES       33
  18. #define IMAGEWIDTH      16
  19. #define IMAGEHEIGHT     17
  20. #define BUTTONWIDTH     0
  21. #define BUTTONHEIGHT    0
  22.  
  23. #define IDTBB_FONT       0
  24. #define IDTBB_OPEN       1
  25. #define IDTBB_CLOSE      2
  26. #define IDTBB_MODE       3
  27. #define IDTBB_SHOWCAND   4
  28. #define IDTBB_NOSHOWCAND 5
  29. #define IDTBB_CONVERT    6
  30. #define IDTBB_CANCEL     7
  31. #define IDTBB_REVERT     8
  32. #define IDTBB_COMPLETE   9
  33. #define IDTBB_NEXTCAND   10
  34. #define IDTBB_PREVCAND   11
  35. #define IDTBB_NEXTCLAUSE 12
  36. #define IDTBB_PREVCLAUSE 13
  37. #define IDTBB_OPENCAND   14
  38. #define IDTBB_CLOSECAND  15
  39. #define IDTBB_ALPHA      16
  40. #define IDTBB_NATIVE     17
  41. #define IDTBB_KATAKANA   18
  42. #define IDTBB_FULL       19
  43. #define IDTBB_HALF       20
  44. #define IDTBB_ROMAN      21
  45. #define IDTBB_NOROMAN    22
  46. #define IDTBB_CHARCODE   23
  47. #define IDTBB_NOCHARCODE 24
  48. #define IDTBB_HANJA      25
  49. #define IDTBB_NOHANJA    26
  50. #define IDTBB_SOFTKBD    27
  51. #define IDTBB_NOSOFTKBD  28
  52. #define IDTBB_EUDC       29
  53. #define IDTBB_NOEUDC     30
  54. #define IDTBB_SYMBOL     31
  55. #define IDTBB_NOSYMBOL   32
  56.  
  57. TBBUTTON tbButton[] =           // Array defining the toolbar buttons
  58. {
  59.     {IDTBB_FONT, IDM_FONT,          TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  60.  
  61.     {0, 0,                          TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0},
  62.  
  63.     {IDTBB_OPEN, IDM_OPENSTATUS,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  64.  
  65.     {0, 0,                          TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0},
  66.  
  67.     {IDTBB_NATIVE,   IDM_NATIVEMODE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  68.     {IDTBB_FULL,     IDM_FULLHALF,   TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  69.     {IDTBB_ROMAN,    IDM_ROMAN,      TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  70.     {IDTBB_CHARCODE, IDM_CHARCODE,   TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  71.     {IDTBB_HANJA,    IDM_HANJA,      TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  72.     {IDTBB_SOFTKBD,  IDM_SOFTKBD,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  73.     {IDTBB_EUDC,     IDM_EUDC,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  74.     {IDTBB_SYMBOL,   IDM_SYMBOL,     TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  75.  
  76.     {0, 0,                          TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0},
  77.  
  78.     {IDTBB_CONVERT,  IDM_CONVERT,   TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  79.     {IDTBB_CANCEL,   IDM_CANCEL,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  80.     {IDTBB_REVERT,   IDM_REVERT,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  81.     {IDTBB_COMPLETE, IDM_COMPLETE,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  82.  
  83.     {0, 0,                          TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0},
  84.  
  85.     {IDTBB_NEXTCLAUSE, IDM_NEXTCLAUSE,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  86.     {IDTBB_PREVCLAUSE, IDM_PREVCLAUSE,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  87.  
  88.     {0, 0,                          TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0},
  89.  
  90.     {IDTBB_SHOWCAND, IDM_SHOWCAND,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  91.     {IDTBB_OPENCAND, IDM_OPENCAND,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  92.     {IDTBB_CLOSECAND,IDM_CLOSECAND, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  93.     {IDTBB_NEXTCAND, IDM_NEXTCAND,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  94.     {IDTBB_PREVCAND, IDM_PREVCAND,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
  95.  
  96.  
  97. };
  98.  
  99.  
  100. BOOL CreateTBar(HWND hWnd)
  101. {
  102.     HIMC hIMC;
  103.     BOOL fOpen;
  104.  
  105.     hWndToolBar = CreateToolbarEx(hWnd,
  106.                                   WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS,
  107.                                   TOOLBAR_ID,
  108.                                   NUMIMAGES,
  109.                                   hInst,
  110.                                   IDB_BMP,
  111.                                   tbButton,
  112.                                   sizeof(tbButton)/sizeof(TBBUTTON),
  113.                                   BUTTONWIDTH,
  114.                                   BUTTONHEIGHT,
  115.                                   IMAGEWIDTH,
  116.                                   IMAGEHEIGHT,
  117.                                   sizeof(TBBUTTON));
  118.  
  119.     UpdateShowCandButton();
  120.  
  121.     hIMC = ImmGetContext(hWndCompStr);
  122.     fOpen = ImmGetOpenStatus(hIMC);
  123.     UpdateShowOpenStatusButton(fOpen);
  124.     ImmReleaseContext(hWndCompStr,hIMC);
  125.  
  126.     return (hWndToolBar != 0);
  127. }
  128.  
  129.  
  130. LRESULT SetTooltipText(HWND hWnd, LPARAM lParam)
  131. {
  132.     LPTOOLTIPTEXT lpToolTipText;
  133.     static char   szBuffer[64];
  134.  
  135.     lpToolTipText = (LPTOOLTIPTEXT)lParam;
  136.     if (lpToolTipText->hdr.code == TTN_NEEDTEXT)
  137.     {
  138.         LoadString(hInst,
  139.                    lpToolTipText->hdr.idFrom,   // string ID == command ID
  140.                    szBuffer,
  141.                    sizeof(szBuffer));
  142.  
  143.         lpToolTipText->lpszText = szBuffer;
  144.     }
  145.     return 0;
  146. }
  147.  
  148. void UpdateButton(UINT iID, UINT iFlags)
  149. {
  150.     int iCurrentFlags;
  151.  
  152.     iCurrentFlags = (int)SendMessage(hWndToolBar, 
  153.                                      TB_GETSTATE, 
  154.                                      iID, 0L);
  155.  
  156.     if (iCurrentFlags & TBSTATE_PRESSED)
  157.         iFlags |= TBSTATE_PRESSED;
  158.  
  159.     SendMessage(hWndToolBar, 
  160.                 TB_SETSTATE, 
  161.                 iID, 
  162.                 MAKELPARAM(iFlags, 0));
  163.     return;
  164. }
  165.  
  166. void UpdateShowOpenStatusButton(BOOL fOpen)
  167. {
  168.  
  169.     SendMessage(hWndToolBar, 
  170.                 TB_CHANGEBITMAP, 
  171.                 IDM_OPENSTATUS, 
  172.                 MAKELPARAM((fOpen?IDTBB_OPEN:IDTBB_CLOSE), 0));
  173.     return;
  174. }
  175.  
  176. void UpdateShowCandButton()
  177. {
  178.  
  179.     SendMessage(hWndToolBar, 
  180.                 TB_CHANGEBITMAP, 
  181.                 IDM_SHOWCAND, 
  182.                 MAKELPARAM((fShowCand?IDTBB_SHOWCAND:IDTBB_NOSHOWCAND), 0));
  183.     return;
  184. }
  185.  
  186.  
  187. void UpdateModeButton(DWORD dwConv)
  188. {
  189.     int nIDTBB;
  190.  
  191.     switch (dwConv & IME_CMODE_LANGUAGE)
  192.     {
  193.         case IME_CMODE_ALPHANUMERIC:
  194.             nIDTBB = IDTBB_ALPHA;
  195.             break;
  196.  
  197.         case IME_CMODE_NATIVE:
  198.             nIDTBB = IDTBB_NATIVE;
  199.             break;
  200.  
  201.         case (IME_CMODE_NATIVE | IME_CMODE_KATAKANA):
  202.             nIDTBB = IDTBB_KATAKANA;
  203.             break;
  204.  
  205.         default:
  206.             nIDTBB = IDTBB_ALPHA;
  207.             break;
  208.  
  209.     }
  210.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_NATIVEMODE, 
  211.                 MAKELPARAM(nIDTBB, 0));
  212.  
  213.     if (dwConv & IME_CMODE_FULLSHAPE)
  214.         nIDTBB = IDTBB_FULL;
  215.     else
  216.         nIDTBB = IDTBB_HALF;
  217.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_FULLHALF, 
  218.                 MAKELPARAM(nIDTBB, 0));
  219.  
  220.     if (dwConv & IME_CMODE_ROMAN)
  221.         nIDTBB = IDTBB_ROMAN;
  222.     else
  223.         nIDTBB = IDTBB_NOROMAN;
  224.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_ROMAN, 
  225.                 MAKELPARAM(nIDTBB, 0));
  226.  
  227.     if (dwConv & IME_CMODE_CHARCODE)
  228.         nIDTBB = IDTBB_CHARCODE;
  229.     else
  230.         nIDTBB = IDTBB_NOCHARCODE;
  231.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_CHARCODE, 
  232.                 MAKELPARAM(nIDTBB, 0));
  233.  
  234.     if (dwConv & IME_CMODE_HANJACONVERT)
  235.         nIDTBB = IDTBB_HANJA;
  236.     else
  237.         nIDTBB = IDTBB_NOHANJA;
  238.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_HANJA, 
  239.                 MAKELPARAM(nIDTBB, 0));
  240.  
  241.     if (dwConv & IME_CMODE_SOFTKBD)
  242.         nIDTBB = IDTBB_SOFTKBD;
  243.     else
  244.         nIDTBB = IDTBB_NOSOFTKBD;
  245.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_SOFTKBD, 
  246.                 MAKELPARAM(nIDTBB, 0));
  247.  
  248.     if (dwConv & IME_CMODE_EUDC)
  249.         nIDTBB = IDTBB_EUDC;
  250.     else
  251.         nIDTBB = IDTBB_NOEUDC;
  252.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_EUDC, 
  253.                 MAKELPARAM(nIDTBB, 0));
  254.  
  255.     if (dwConv & IME_CMODE_SYMBOL)
  256.         nIDTBB = IDTBB_SYMBOL;
  257.     else
  258.         nIDTBB = IDTBB_NOSYMBOL;
  259.     SendMessage(hWndToolBar, TB_CHANGEBITMAP, IDM_SYMBOL, 
  260.                 MAKELPARAM(nIDTBB, 0));
  261.  
  262.     return;
  263. }
  264.  
  265.