GetMenu hwnd:
HMENU GetMenu(HWND hwnd);
, NULL. GetSubMenu , nPos hmenu:
HMENU GetSubMenu(HMENU hmenu, int nPos);
hmenu nPos. GetSubMenu NULL, hmenu nPos .
IsMenu , hmenu , :
BOOL IsMenu(HMENU hmenu);
GetMenuItemCount hmenu:
int GetMenuItemCount(HMENU hmenu);
-1.
. "" 4.3, . 0 ("").
4.4.
#include <windows.h>
#include <tchar.h>
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE hInstance;
TCHAR szClass[] = TEXT("GetMenuInfo");
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg;
HWND hwnd;
hInstance = hInst;
if (!RegClass(WndProc, szClass, COLOR_WINDOW)) return FALSE;
hwnd = CreateWindow(szClass, TEXT(" "),
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, NULL);
if (!hwnd) return FALSE;
while(GetMessage(&msg, 0, 0, 0))
{ TranslateMessage(&msg); DispatchMessage(&msg); }
return msg.wParam;
}
BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{
WNDCLASS wc;
wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;
wc.lpfnWndProc = Proc;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(brBackground +1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szName;
return (RegisterClass(&wc)!= 0);
}
UINT GetMenuItem(HMENU hMenu, UINT uIns)
{
MENUITEMINFO mii;
mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_ID;
GetMenuItemInfo(hMenu, uIns, 1, &mii);
return mii.wID;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HMENU hMainMenu, hFiles;
static HWND hOther;
switch (msg)
{
case WM_CREATE:
{
hOther = FindWindow(TEXT("SetMenuInfo"), TEXT(" "));
if (!hOther)
{ MessageBox(hwnd, TEXT(" "), TEXT(""), MB_OK); return 0; }
|
|
hMainMenu = GetMenu(hOther);
if (!hMainMenu)
{ MessageBox(hwnd, TEXT("OKHo "), TEXT(""), MB_OK); return 0; }
hFiles = GetSubMenu(hMainMenu, 0);
if (!hFiles)
{ MessageBox(hwnd, TEXT("HeT "), TEXT(""), MB_OK); return 0; }
int items = GetMenuItemCount(hFiles);
TCHAR str[50]={0};
_itow(items, str, 10);
_tcscat(str, TEXT(" '' "));
MessageBox(hwnd, str, TEXT(""), MB_OK);
return 0;
}
case WM_LBUTTONDOWN:
{
UINT uCom = GetMenuItem(hFiles, 0);
if (!uCom)
MessageBox(hwnd, TEXT(" "), TEXT(""), MB_OK);
SendMessage(hOther, WM_COMMAND, uCom, 0L);
return 0;
}
case WM_DESTROY: { PostQuitMessage(0); return 0; }
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
4.3.
, .
WM_CREATE.
:
1. , " SetMenuInfo " " ":
hOther=FindWindow("SetMenuInfo", " ");
2. :
hMainMenu = GetMenu(hOther);
3. 0:
hFiles = GetSubMenu(hMainMenu, 0);
4. hFiles:
int items = GetMenuItemCount(hFiles);
5. :
char str[50];
itoa(items, str, 10);
strcat(str, " '' ");
MessageBox(hwnd, str, "", _);
:
1. hFiles:
UINT uCom=GetMenuItem(hFiles, 0);
, GetMenuItem :
UINT GetMenuItem(HMENU hMenu, UINT uIns)
{
MENUITEMINFO mii;
mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_ID;
GetMenuItemInfo(hMenu, uIns, 1, &mii);
return mii.wID;
}
. , GetMenuItem(hFiles, 0) hFiles.
2. WM_COMMAND uCom:
SendMessage(hOther, WM_COMMAND, uCom, 0L);
, 4.3 WM_COMMAND wParam, CM_FILE_OPEN.
4.3 . ; " " ( ).
WM_COMMAND uCom . " " " ". , , . , .
|
|
, SetMenu.
WM_INITMENU
WM_INITMENU . wParam . WM_INITMENU , 0. .