四时宝库

程序员的知识宝库

win32编程 -- 菜单使用(菜单代码c)

不知道少了什么,总觉得没有以前快乐,不后悔遇见谁,只后悔变成现在的模样。。。

---- 网易云热评

一、窗口的顶层菜单

1、创建菜单HMENU CreateMenu(VOID); //创建成功返回菜单句柄

2、增加菜单项

BOOL AppendMenu(

HMENU hMenu, //菜单句柄

UINT uFlags, //菜单项风格

UINT_PTR uIDNewItem, //菜单项ID或下拉菜单的句柄

LPCTSTR lpNewItem //菜单项的名称

);

3、设置到窗口

BOOL SetMenu(

HWND hWnd, //窗口句柄

HMENU hMenu //菜单句柄 );

4、三种常见风格

MF_POPUP:点击菜单弹出下拉菜单,必须填写下拉菜单的句柄

MF_STRING:被点击时发出WM_COMMAND消息,必须填写菜单项ID

MF_SEPARATOR:菜单项的分割线,一般给0

5、相关代码

case WM_CREATE:

创建顶层菜单(hWnd);

break;

void 创建顶层菜单(HWND hWnd) {


//1、创建顶层菜单

HMENU hMenu= CreateMenu();//返回菜单句柄

//2、增加菜单项

AppendMenu(hMenu, MF_STRING, 1001, L"哎呦");

AppendMenu(hMenu, MF_STRING, 1001, L"不错");

//3、设置(显示)菜单

SetMenu(hWnd, hMenu);

}

二、弹出式菜单

1、下拉式菜单

//1.1创建弹出菜单

HMENU hFile = CreatePopupMenu();

//在弹出菜单中添加菜单项

AppendMenu(hFile, MF_STRING, 1003, L"哎");

AppendMenu(hFile, MF_SEPARATOR, 0,L"");//分割线

AppendMenu(hFile, MF_STRING, 1004, L"呦");

AppendMenu(hMenu, MF_POPUP,(UINT)hFile,L"哎呦");

2、菜单命令处理

case WM_COMMAND:

菜单命令处理(hWnd,wParam);

break;

void 菜单命令处理(HWND hWnd,WPARAM wParam)

{

switch (LOWORD(wParam))

{

case 1003:

MessageBox(hWnd, L"哎哎哎哎我哎哎哎哎哎哎",L"呦",MB_OK);

break;

case 1004:

MessageBox(hWnd, L"呦呦呦呦呦呦呦呦呦呦呦",L"哎",MB_OK);

break;

default:

break;

}

}

三、菜单项状态

1、直接在前面加√

AppendMenu(hFile, MF_STRING|MF_CHECKED, 1003, L"哎");


2、菜单另起一列

AppendMenu(hFile, MF_STRING|MF_MENUBARBREAK, 1004, L"呦");


3、默认灰色,不能选择

AppendMenu(hFile1, MF_STRING|MF_GRAYED, 1005, L"不");

4、检查菜单栏

CheckMenuItem:是否被选中

EnableMenuItem:是否可用

case 1006:

if (勾选状态==0)

{

//按菜单id值判断是否勾选

CheckMenuItem(菜单句柄, 1006, MF_BYCOMMAND | MF_UNCHECKED);

}

else

{

//按菜单索引取值

CheckMenuItem(菜单句柄, 1, MF_BYPOSITION | MF_CHECKED);

}

勾选状态 = !勾选状态;

break;

5、WM_INITMENUPOPUP

在菜单被激活但是未显示,窗口会收到这个消息

WPARAM:即将显示的菜单句柄

LPARAM

LOWORD:是被点击的菜单项索引

HIWORD:是窗口菜单标识 0/1

窗口菜单:顶层菜单和系统菜单属于窗口菜单,弹出式菜单不属于窗口菜单

case WM_INITMENUPOPUP:

菜单激活未显示(hWnd,wParam,lParam);

break;

void 菜单激活未显示(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

wchar_t s[256] = { 0 };

swprintf_s(s,L"未显示菜单句柄:%d\n被点击菜单id:%d\n是否是窗口菜单:%d\n",wParam,LOWORD(lParam),HIWORD(lParam));


WriteConsole(输出句柄, s, wcslen(s), NULL, NULL);

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接