.


:




:

































 

 

 

 





hMenu:

 

BOOL SetMenuItemInfo(MENU hMenu, UINT uItem,

BOOL fByPosition, LPMENUITEMINFO lpmii);

 

fByPosition = FALSE uItem , . lpmii MENUITEMINFO, . .

SetMenuItemInfo. 3 , . . , fMask.

. .

:

 

BOOL SetMenuItem(HMENU hMenu, UINT uIns, UINT fState, BOOL flag)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE | MIIM_ID;

mii.fState = fState;

mii.wID = uIns;

return SetMenuItemInfo(hMenu, uIns, flag, &mii);

}

 

:

1. hMenu , .

2. uIns flag uItem fByPosition, SetMenuItemInfo.

3. fState .

4. fMask , fState. wID mii .

hMenu:

 

BOOL GetMenuItemInfo (HMENU hMenu, UINT uItem,

BOOL fByPosition, LPMENUITEMINFO lpmii);

 

fByPosition = FALSE uItem , . lpmii MENUITEMINFO, fMask . . .

. .

:

 

UINT GetMenuItem(HMENU hMenu, UINT uIns, BOOL flag)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE;

GetMenuItemInfo(hMenu, uIns, flag, &mii);

return mii.fState;

}

 

:

1. hMenu , .

2. uIns flag uItem fByPosition GetMenuItemInfo.

. fMask , fState .

. "" "", "" "". "" . "" , "" "" "" .

"" "" "". .

"" "" "". .

"" . "" "" "".

4.3.

#include <windows.h>

 

#define CM_FILE_OPEN 1001

#define CM_FILE_SAVE 1002

#define CM_FILE_QUIT 1003

#define CM_EDIT_FIND 2001

#define CM_EDIT_REPLC 2002

#define CM_VIEW_NORM 3001

#define CM_VIEW_STRC 3002

 

BOOL RegClass(WNDPROC, LPCTSTR, UINT);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

 

HINSTANCE hInstance;

TCHAR szClass[] = TEXT("SetMenuInfo");

 

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);

}

 

BOOL SetMenuItem(HMENU hMenu, UINT uIns, UINT fState, BOOL flag)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE | MIIM_ID;

mii.fState = fState;

mii.wID = uIns;

return SetMenuItemInfo(hMenu, uIns, flag, &mii);

}

 

UINT GetMenuItem(HMENU hMenu, UINT uIns, BOOL flag)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE;

GetMenuItemInfo(hMenu, uIns, flag, &mii);

return mii.fState;

}

 

BOOL CreateMenuItem(HMENU hMenu, TCHAR *str, UINT uIns, UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)

{

MENUITEMINFO mii;

mii.cbSize = sizeof(MENUITEMINFO);

mii.fMask = MIIM_STATE | MIIM_TYPE | MIIM_SUBMENU | MIIM_ID;

mii.fType = fType;

mii.fState= MFS_ENABLED;

mii.dwTypeData = str;

mii.cch = sizeof(str);

mii.wID = uCom;

mii.hSubMenu = hSubMenu;

return InsertMenuItem(hMenu, uIns, flag, &mii);

}

 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

static HMENU hMainMenu, hFileMenu, hEditMenu, hViewMenu;

switch (msg)

{

case WM_CREATE:

{

hMainMenu = CreateMenu();

// ""

hFileMenu = CreatePopupMenu();

int i=0; // hFileMenu

CreateMenuItem(hFileMenu, TEXT("&"), i++, CM_FILE_OPEN, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFileMenu, TEXT("&"), i++, CM_FILE_SAVE, NULL, FALSE, MFT_STRING);

CreateMenuItem(hFileMenu, NULL, i++, 0, NULL, FALSE, MFT_SEPARATOR);

CreateMenuItem(hFileMenu, TEXT("&"), i++, CM_FILE_QUIT, NULL, FALSE, MFT_STRING);

// ""

hEditMenu = CreatePopupMenu();

i=0; // hEditMenu

CreateMenuItem(hEditMenu, TEXT("&"), i++, CM_EDIT_FIND, NULL, FALSE, MFT_STRING);

CreateMenuItem(hEditMenu, TEXT("&3"), i++, CM_EDIT_REPLC, NULL, FALSE, MFT_STRING);

// ""

hViewMenu = CreatePopupMenu();

i=0; // hViewMenu

CreateMenuItem(hViewMenu, TEXT("&"), i++, CM_VIEW_NORM, NULL, FALSE, MFT_RADIOCHECK);

CreateMenuItem(hViewMenu, TEXT("&"), i++, CM_VIEW_STRC, NULL, FALSE, MFT_RADIOCHECK);

//

i=0; // hMainMenu

CreateMenuItem(hMainMenu, TEXT("&"), i++, 0, hFileMenu, FALSE, MFT_STRING);

SetMenu(hwnd, hMainMenu);

SetMenuItem(hFileMenu, CM_FILE_SAVE, MFS_GRAYED, FALSE);

DrawMenuBar(hwnd);

return 0;

}

case WM_COMMAND:

{

switch (LOWORD(wParam))

{

case CM_FILE_OPEN:

{

SetMenuItem(hFileMenu, CM_FILE_OPEN, MFS_GRAYED, FALSE);

SetMenuItem(hFileMenu, CM_FILE_SAVE, MFS_ENABLED, FALSE);

CreateMenuItem(hMainMenu, TEXT("&"), 1, 0, hEditMenu, FALSE, MFT_STRING);

CreateMenuItem(hMainMenu, TEXT("&"), 2, 0, hViewMenu, FALSE, MFT_STRING);

DrawMenuBar(hwnd);

return 0;

}

case CM_FILE_SAVE:

{

SetMenuItem(hFileMenu, CM_FILE_SAVE, MFS_GRAYED, FALSE);

SetMenuItem(hFileMenu, CM_FILE_OPEN, MFS_ENABLED, FALSE);

RemoveMenu(hMainMenu, 1, MF_BYPOSITION);

RemoveMenu(hMainMenu, 1, MF_BYPOSITION);

DrawMenuBar(hwnd);

return 0;

}

case CM_EDIT_FIND:

{

if (GetMenuItem(hEditMenu, CM_EDIT_FIND, FALSE)==MFS_CHECKED)

SetMenuItem(hEditMenu, CM_EDIT_FIND, MFS_UNCHECKED, FALSE);

else SetMenuItem(hEditMenu, CM_EDIT_FIND, MFS_CHECKED, FALSE);

return 0;

}

case CM_EDIT_REPLC:

{

if (GetMenuItem(hEditMenu, CM_EDIT_REPLC, FALSE)==MFS_CHECKED)

SetMenuItem(hEditMenu, CM_EDIT_REPLC, MFS_UNCHECKED, FALSE);

else SetMenuItem(hEditMenu, CM_EDIT_REPLC, MFS_CHECKED, FALSE);

return 0;

}

case CM_VIEW_NORM:

{

SetMenuItem(hViewMenu, CM_VIEW_NORM, MFS_CHECKED, FALSE);

SetMenuItem(hViewMenu, CM_VIEW_STRC, MFS_UNCHECKED, FALSE);

return 0;

}

case CM_VIEW_STRC:

{

SetMenuItem(hViewMenu, CM_VIEW_NORM, MFS_UNCHECKED, FALSE);

SetMenuItem(hViewMenu, CM_VIEW_STRC, MFS_CHECKED, FALSE);

return 0;

}

case CM_FILE_QUIT: { DestroyWindow(hwnd); return 0; }

}

return 0;

}

case WM_DESTROY:

{ DestroyMenu(hEditMenu); DestroyMenu(hViewMenu); PostQuitMessage(0); return 0; }

}

return DefWindowProc(hwnd, msg, wParam, lParam);

}

 

:

1. hEditMenu hViewMenu "". fFileOpened. . , , "":

 

SetMenuItem(hFileMenu, CM_FILE_SAVE, MFS_GRAYED, FALSE);

 

:

 

SetMenuItem(hFileMenu, CM_FILE_SAVE, MFS_ENABLED, FALSE);

 

"":

 

SetMenuItem(hFileMenu, CM_FILE_OPEN, MFS_GRAYED, FALSE);

 

, .

2. hEditMenu hViewMenu "".

3. "" "" "" . , . MFS_CHECKED. :

 

SetMenuItem(hEditMenu, CM_EDIT_FIND, MFS_CHECKED, FALSE);

 

. , . , , , :

 

if(GetMenuItem(hEditMenu, CM_EDIT_FIND, FALSE)==MFS_CHECKED)

SetMenuItem(hEditMenu, CM_EDIT_FIND, MFS_UNCHECKED, FALSE);

else

SetMenuItem(hEditMenu, CM_EDIT_FIND, MFS_CHECKED, FALSE);

 

hViewMenu . MFT_RADIOCHECK:

 

CreateMenuItem(hViewMenu, "&", i++,

CM_VIEW_NORM, NULL, FALSE, WFT_RADIOCHECK);

 

, ( ).

hViewMenu , . , CM_VIEW_NORM :

 

SetMenuItem(hViewMenu, CM_VIEW_NORM, MFS_CHECKED, FALSE);

 

_VIEW_STRC :

 

SetMenuItem(hViewMenu, CM_VIEW_STRC, MFS_UNCHECKED, FALSE);

 





:


: 2016-09-06; !; : 361 |


:

:

, ,
==> ...

1716 - | 1637 -


© 2015-2024 lektsii.org - -

: 0.051 .