home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2002 January
/
VPR0201B.ISO
/
APUPDATE
/
VC
/
TXC0601S
/
TXC0601S.LZH
/
STDLIB.C
< prev
next >
Wrap
C/C++ Source or Header
|
2001-05-13
|
2KB
|
90 lines
/*
TX-C プログラム用のサービスプログラム
WZEDITOR.EXE本体では使わないが、TX-Cプログラムでよく使う機能を提供
(c)1998 TY
*/
#include <_wz.h>
#include <windows.h>
#include <windowsx.h>
extern "commctrl.dll" {
#pragma multidef+
#include <commctrl.h>
#pragma multidef-
}
#if WINDOWSCE
static void MenuCopy(HMENU hmenuSrc,HMENU hmenuDst)
{
for (int i = 0;;i++) {
wchar wsz[CCHWORD];
MENUITEMINFO info;
structClear(info);
info.cbSize = sizeof(info);
info.fMask = MIIM_TYPE|MIIM_ID|MIIM_SUBMENU;
info.dwTypeData = wsz;
info.cch = CCHWORD;
if (!GetMenuItemInfo(hmenuSrc,i,TRUE,&info)) break;
// del already seted item
if (i == 0) DeleteMenu(hmenuDst,0,MF_BYPOSITION);
//
if (info.hSubMenu) {
#if 1
// サブメニューは使えない。うまく動作しないので。
#else
HMENU hmenuSub = CreateMenu();
menuSepa(hmenuSub);
MenuCopy(info.hSubMenu,hmenuSub);
wmenuPopup(hmenuDst,info.dwTypeData,hmenuSub);
#endif
} else if (info.fType & MFT_SEPARATOR) {
menuSepa(hmenuDst);
} else {
wmenuStr(hmenuDst,info.dwTypeData,info.wID);
}
}
}
BOOL CommandBar_mySetMenu(HWND hwndCB,WORD iButton,HMENU hmenuAdd)
{
// コマンドバーにhmenuAddのメニューバーを追加します。
// メニューバーのトップ項目は8個までです。
// 各トップ項目の中のメニューコマンド数に制限はありませんが、サブメニューは使えません。
HMENU hmenuRoot = CommandBar_GetMenu(hwndCB,iButton);
//
wchar wsz[CCHWORD];
MENUITEMINFO info;
structClear(info);
info.cbSize = sizeof(info);
info.fMask = MIIM_TYPE;
info.dwTypeData = wsz;
//
for (int i = 0;;i++) {
info.cch = CCHWORD; // これはここでセットする必要がある。
if (!GetMenuItemInfo(hmenuAdd,i,TRUE,&info)) break;
//winformation(info.dwTypeData);
// 名前を設定する
{
MENUITEMINFO info1;
structClear(info1);
info1.cbSize = sizeof(info1);
info1.fMask = MIIM_TYPE;
info1.fType = MFT_STRING;
info1.dwTypeData = info.dwTypeData;
if (!SetMenuItemInfo(hmenuRoot,i,TRUE,&info1)) break; // MAXに達した
}
// 内容をコピーする
MenuCopy(GetSubMenu(hmenuAdd,i),GetSubMenu(hmenuRoot,i));
}
// 余分な項目を削除する
for (;;) {
HMENU hmenuDest = GetSubMenu(hmenuRoot,i);
if (!hmenuDest) break;
DeleteMenu(hmenuRoot,i,MF_BYPOSITION);
}
// hmenuAddを解放する。
DestroyMenu(hmenuAdd);
}
#endif