typedef struct tagMENUITEMINFO { UINT cbSize; UINT fMask; UINT fType; UINT fState; UINT wID; HMENU hSubMenu; HBITMAP hbmpChecked; HBITMAP hbmpUnchecked; DWORD dwItemData; LPTSTR dwTypeData; UINT cch; } MENUITEMINFO, FAR *LPMENUITEMINFO;cbSize は、この構造体のサイズをバイト単位で指定します
定数 | 取得、またはセットするメンバ |
---|---|
MIIM_CHECKMARKS | hbmpChecked と hbmpUnchecked |
MIIM_DATA | dwItemData |
MIIM_ID | wID |
MIIM_STATE | fState |
MIIM_SUBMENU | hSubMenu |
MIIM_TYPE | fType と dwTypeData |
定数 | 解説 |
---|---|
MFT_BITMAP | ビットマップのメニューを表示 dwTypeDataメンバーの下位ワードにビットマップのハンドルを指定します cchは無視されます |
MFT_MENUBARBREAK | メニューバーの新しいラインにメニュー項目を配置 |
MFT_MENUBREAK | メニューの新しいラインに項目を配置 |
MFT_OWNERDRAW | オーナー描画メニュー 描画責任がメニューを所持するウィンドウに割り当てられる |
MFT_RADIOCHECK | チェックマークではなく、ラジオボタンマークを使って メニュー項目をチェックする |
MFT_RIGHTJUSTIFY | 右揃えする メニュー項目がメニューバーにある時のみ有効 |
MFT_RIGHTORDER | Windows95 , NT5.0 以降 アラビア語など、右から左に読む言語をサポートする |
MFT_SEPARATOR | セパレータであることを表す |
MFT_STRING | 文字列のメニューであることを表す dwTypeDataメンバーはヌルで終わる文字列へのポインタ cchメンバーは文字列の長さである |
定数 | 解説 |
---|---|
MFS_CHECKED | 項目をチェックする |
MFS_DEFAULT | 項目はデフォルトである |
MFS_DISABLED | 項目を無効状態にする |
MFS_ENABLED | 項目を有効状態にする(デフォルト) |
MFS_GRAYED | 項目をグレー状態にする |
MFS_HILITE | 項目をハイライト状態にする |
MFS_UNCHECKED | 項目のチェックを外す |
MFS_UNHILITE | 項目のハイライトを削除する |
BOOL SetMenuItemInfo( HMENU hMenu , UINT uItem , BOOL fByPosition , LPMENUITEMINFO lpmii );hMenu には、変更するメニューのハンドルを指定します
/*resorce.h*/ #define IDM_RENA 40001
/*リソーススクリプト*/ #include "resource.h" KITTY MENU { POPUP "Kitty on your lap" { MENUITEM "RENA" , IDM_RENA } }
#include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { static HMENU hmenu; static MENUITEMINFO menuInfo; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: hmenu = GetMenu(hwnd); menuInfo.cbSize = sizeof (MENUITEMINFO); menuInfo.fState = MFS_UNCHECKED; return 0; case WM_COMMAND: menuInfo.fMask = MIIM_STATE; if (menuInfo.fState == MFS_CHECKED) menuInfo.fState = MFS_UNCHECKED; else menuInfo.fState = MFS_CHECKED; SetMenuItemInfo(hmenu , IDM_RENA , FALSE , &menuInfo); return 0; } return DefWindowProc(hwnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = TEXT("KITTY"); winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TEXT("Kitty on your lap") , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
BOOL GetMenuItemInfo( HMENU hMenu , UINT uItem , BOOL fByPosition , LPMENUITEMINFO lpmii );hMenu にはメニューのハンドル
/*resorce.h*/ #define IDM_RENA 40001
/*リソーススクリプト*/ #include "resource.h" KITTY MENU { POPUP "Kitty on your lap" { MENUITEM "RENA" , IDM_RENA } }
#include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { static HMENU hmenu; MENUITEMINFO menuInfo; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: hmenu = GetMenu(hwnd); return 0; case WM_INITMENUPOPUP: menuInfo.cbSize = sizeof (MENUITEMINFO); menuInfo.fMask = MIIM_STATE; GetMenuItemInfo(hmenu , IDM_RENA , FALSE , &menuInfo); if (menuInfo.fState & MFS_GRAYED) menuInfo.fState = MFS_ENABLED; else menuInfo.fState = MFS_GRAYED; SetMenuItemInfo(hmenu , IDM_RENA , FALSE , &menuInfo); return 0; } return DefWindowProc(hwnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = TEXT("KITTY"); winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TEXT("Kitty on your lap") , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
/*リソーススクリプト*/ KITTY MENU { POPUP "Kitty on your lap" { MENUITEM "レナ" , 40001 MENUITEM "ユキ" , 40002 MENUITEM "ミミ" , 40003 } POPUP "Magical nyan nyan TARUTO" { MENUITEM "たると" , 40004 MENUITEM "シャルロッテ" , 40005 MENUITEM "ちとせ" , 40006 MENUITEM "柿ピー" , 40007 } }
#include <windows.h> LPCTSTR strSub[] = { TEXT("Kitty on your lap") , TEXT("Magical nyan nyan TARUTO") }; LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { static HMENU hmenu; static HWND list , edit , label; TCHAR strText[1024]; int iID; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: list = CreateWindow( TEXT("LISTBOX") , NULL , WS_CHILD | WS_VISIBLE | LBS_STANDARD , 0 , 0 , 200 , 50 , hwnd , (HMENU)1 , ((LPCREATESTRUCT)(lp))->hInstance , NULL ); SendMessage(list , LB_INSERTSTRING , 0 , (LPARAM)strSub[0]); SendMessage(list , LB_INSERTSTRING , 1 , (LPARAM)strSub[1]); edit = CreateWindow( TEXT("EDIT") , NULL , WS_CHILD | WS_VISIBLE | WS_BORDER , 0 , 50 , 200 , 30 , hwnd , (HMENU)2 , ((LPCREATESTRUCT)(lp))->hInstance , NULL ); label = CreateWindow( TEXT("STATIC") , NULL , WS_CHILD | WS_VISIBLE , 200 , 00 , 200 , 80 , hwnd , (HMENU)3 , ((LPCREATESTRUCT)(lp))->hInstance , NULL ); return 0; case WM_COMMAND: hmenu = GetSubMenu(GetMenu(hwnd) , SendMessage(list , LB_GETCURSEL , 0 , 0) ); GetWindowText(edit , strText , 2); iID = strText[0] & 0x0F; wsprintf(strText , TEXT("メニュー項目 = %d\nID = %d") , GetMenuItemCount(hmenu) , GetMenuItemID(hmenu , iID) ); SetWindowText(label , strText); return 0; } return DefWindowProc(hwnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = TEXT("KITTY"); winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TEXT("Kitty on your lap") , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
BOOL SetMenuItemInfo( HMENU hMenu , UINT uItem , BOOL fByPosition , LPMENUITEMINFO lpmii );メニューの状態を新しく設定します
BOOL GetMenuItemInfo( HMENU hMenu , UINT uItem , BOOL fByPosition , LPMENUITEMINFO lpmii );メニューの状態を取得します