home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 December / VPR0012B.BIN / APUPDATE / VC / TXC0620A / TXC0620A.LZH / STDLIB.C < prev    next >
C/C++ Source or Header  |  1998-06-06  |  2KB  |  88 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.     #include <commctrl.h>
  12. }
  13.  
  14. #if WINDOWSCE
  15. static void MenuCopy(HMENU hmenuSrc,HMENU hmenuDst)
  16. {
  17.     for (int i = 0;;i++) {
  18.         wchar wsz[CCHWORD];
  19.         MENUITEMINFO info;
  20.         structClear(info);
  21.         info.cbSize = sizeof(info);
  22.         info.fMask = MIIM_TYPE|MIIM_ID|MIIM_SUBMENU;
  23.         info.dwTypeData = wsz;
  24.         info.cch = CCHWORD;
  25.         if (!GetMenuItemInfo(hmenuSrc,i,TRUE,&info)) break;
  26.         // del already seted item
  27.         if (i == 0) DeleteMenu(hmenuDst,0,MF_BYPOSITION);
  28.         //
  29.         if (info.hSubMenu) {
  30. #if 1
  31.             // サブメニューは使えない。うまく動作しないので。
  32. #else
  33.             HMENU hmenuSub = CreateMenu();
  34.             menuSepa(hmenuSub);
  35.             MenuCopy(info.hSubMenu,hmenuSub);
  36.             wmenuPopup(hmenuDst,info.dwTypeData,hmenuSub);
  37. #endif
  38.         } else if (info.fType & MFT_SEPARATOR) {
  39.             menuSepa(hmenuDst);
  40.         } else {
  41.             wmenuStr(hmenuDst,info.dwTypeData,info.wID);
  42.         }
  43.     }
  44. }
  45.  
  46. BOOL CommandBar_mySetMenu(HWND hwndCB,WORD iButton,HMENU hmenuAdd)
  47. {
  48. // コマンドバーにhmenuAddのメニューバーを追加します。
  49. // メニューバーのトップ項目は8個までです。
  50. // 各トップ項目の中のメニューコマンド数に制限はありませんが、サブメニューは使えません。
  51.     HMENU hmenuRoot = CommandBar_GetMenu(hwndCB,iButton);
  52.     //
  53.     wchar wsz[CCHWORD];
  54.     MENUITEMINFO info;
  55.     structClear(info);
  56.     info.cbSize = sizeof(info);
  57.     info.fMask = MIIM_TYPE;
  58.     info.dwTypeData = wsz;
  59.     //
  60.     for (int i = 0;;i++) {
  61.         info.cch = CCHWORD;    // これはここでセットする必要がある。
  62.         if (!GetMenuItemInfo(hmenuAdd,i,TRUE,&info)) break;
  63. //winformation(info.dwTypeData);
  64.         // 名前を設定する
  65.         {
  66.             MENUITEMINFO info1;
  67.             structClear(info1);
  68.             info1.cbSize = sizeof(info1);
  69.             info1.fMask = MIIM_TYPE;
  70.             info1.fType = MFT_STRING;
  71.             info1.dwTypeData = info.dwTypeData;
  72.             if (!SetMenuItemInfo(hmenuRoot,i,TRUE,&info1)) break;    // MAXに達した
  73.         }
  74.         // 内容をコピーする
  75.         MenuCopy(GetSubMenu(hmenuAdd,i),GetSubMenu(hmenuRoot,i));
  76.     }
  77.     // 余分な項目を削除する
  78.     for (;;) {
  79.         HMENU hmenuDest = GetSubMenu(hmenuRoot,i);
  80.         if (!hmenuDest) break;
  81.         DeleteMenu(hmenuRoot,i,MF_BYPOSITION);
  82.     }
  83.     // hmenuAddを解放する。
  84.     DestroyMenu(hmenuAdd);
  85. }
  86. #endif
  87.  
  88.