home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2002 January / VPR0201B.ISO / APUPDATE / VC / TXC0601A / TXC0601A.LZH / STDLIB.C < prev    next >
C/C++ Source or Header  |  2001-05-13  |  2KB  |  90 lines

  1. /*
  2.     TX-C プログラム用のサービスプログラム
  3.         WZEDITOR.EXE本体では使わないが、TX-Cプログラムでよく使う機能を提供
  4.     (c)1998 TY
  5. */
  6.  
  7. #include <_wz.h>
  8. #include <windows.h>
  9. #include <windowsx.h>
  10. extern "commctrl.dll" {
  11.     #pragma multidef+
  12.     #include <commctrl.h>
  13.     #pragma multidef-
  14. }
  15.  
  16. #if WINDOWSCE
  17. static void MenuCopy(HMENU hmenuSrc,HMENU hmenuDst)
  18. {
  19.     for (int i = 0;;i++) {
  20.         wchar wsz[CCHWORD];
  21.         MENUITEMINFO info;
  22.         structClear(info);
  23.         info.cbSize = sizeof(info);
  24.         info.fMask = MIIM_TYPE|MIIM_ID|MIIM_SUBMENU;
  25.         info.dwTypeData = wsz;
  26.         info.cch = CCHWORD;
  27.         if (!GetMenuItemInfo(hmenuSrc,i,TRUE,&info)) break;
  28.         // del already seted item
  29.         if (i == 0) DeleteMenu(hmenuDst,0,MF_BYPOSITION);
  30.         //
  31.         if (info.hSubMenu) {
  32. #if 1
  33.             // サブメニューは使えない。うまく動作しないので。
  34. #else
  35.             HMENU hmenuSub = CreateMenu();
  36.             menuSepa(hmenuSub);
  37.             MenuCopy(info.hSubMenu,hmenuSub);
  38.             wmenuPopup(hmenuDst,info.dwTypeData,hmenuSub);
  39. #endif
  40.         } else if (info.fType & MFT_SEPARATOR) {
  41.             menuSepa(hmenuDst);
  42.         } else {
  43.             wmenuStr(hmenuDst,info.dwTypeData,info.wID);
  44.         }
  45.     }
  46. }
  47.  
  48. BOOL CommandBar_mySetMenu(HWND hwndCB,WORD iButton,HMENU hmenuAdd)
  49. {
  50. // コマンドバーにhmenuAddのメニューバーを追加します。
  51. // メニューバーのトップ項目は8個までです。
  52. // 各トップ項目の中のメニューコマンド数に制限はありませんが、サブメニューは使えません。
  53.     HMENU hmenuRoot = CommandBar_GetMenu(hwndCB,iButton);
  54.     //
  55.     wchar wsz[CCHWORD];
  56.     MENUITEMINFO info;
  57.     structClear(info);
  58.     info.cbSize = sizeof(info);
  59.     info.fMask = MIIM_TYPE;
  60.     info.dwTypeData = wsz;
  61.     //
  62.     for (int i = 0;;i++) {
  63.         info.cch = CCHWORD;    // これはここでセットする必要がある。
  64.         if (!GetMenuItemInfo(hmenuAdd,i,TRUE,&info)) break;
  65. //winformation(info.dwTypeData);
  66.         // 名前を設定する
  67.         {
  68.             MENUITEMINFO info1;
  69.             structClear(info1);
  70.             info1.cbSize = sizeof(info1);
  71.             info1.fMask = MIIM_TYPE;
  72.             info1.fType = MFT_STRING;
  73.             info1.dwTypeData = info.dwTypeData;
  74.             if (!SetMenuItemInfo(hmenuRoot,i,TRUE,&info1)) break;    // MAXに達した
  75.         }
  76.         // 内容をコピーする
  77.         MenuCopy(GetSubMenu(hmenuAdd,i),GetSubMenu(hmenuRoot,i));
  78.     }
  79.     // 余分な項目を削除する
  80.     for (;;) {
  81.         HMENU hmenuDest = GetSubMenu(hmenuRoot,i);
  82.         if (!hmenuDest) break;
  83.         DeleteMenu(hmenuRoot,i,MF_BYPOSITION);
  84.     }
  85.     // hmenuAddを解放する。
  86.     DestroyMenu(hmenuAdd);
  87. }
  88. #endif
  89.  
  90.