Windows Mobile下使用Native C++(WTL, MFC, Win32)开发,如何为对话框加入菜单
背景
不像.NET Compact Framework, 使用Native C++开发开发对话框程序默认是没有菜单的,需要手工增加。本文讲述如何为对话框程序加入菜单。
.NET Compact Framework
使用.NET Compact Framework的程序,默认增加菜单项(mainMenu1),只要编辑菜单显示,增加处理事件就能操控菜单了,非常方便。
Native C++
使用Native C++进行开发,情况就大相径庭了。新增的对话框默认是没有菜单的,需要手工增加菜单支持,下面以一个WTL对话框程序作为例子讲述如何加入菜单支持。步骤如下:
1.在资源文件增加菜单。
2.根据需求编辑菜单。
3.在对话框生成菜单。
修改OnInitDialog()函数来生成菜单。
LRESULT CConfigDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
//AtlCreateEmptyMenuBar(m_hWnd);
SHMENUBARINFO mbi;
ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = m_hWnd;
mbi.nToolBarId = IDR_MENU_CONFIG; //Menu resource ID
mbi.hInstRes = ModuleHelper::GetResourceInstance(); //GetModuleInstance(); //similar as ::AfxGetInstanceHandle(); in MFC
mbi.dwFlags |= SHCMBF_HMENU;
if(!SHCreateMenuBar(&mbi))
{
MessageBox(_T("Fail to create menu."));
}
return bHandled = FALSE;
}
4.加入菜单处理事件
在CConfigDialog类的加入事件处理映射。ID_OK和ID_CANCEL分别为菜单项的ID。
BEGIN_MSG_MAP(CConfigDialog)
COMMAND_ID_HANDLER(ID_OK, OnOk)
COMMAND_ID_HANDLER(ID_CANCEL, OnCancel)
END_MSG_MAP()
LRESULT OnOk(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
在cpp加入处理函数。
LRESULT CConfigDialog::OnOk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
MessageBox(_T("OK"));
return 0;
}
LRESULT CConfigDialog::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
MessageBox(_T("Cancel"));
return 0;
}
完成了,如下图。
下面点击OK。
作者:Jake Lin(Jake's Blog on 博客园)
出处:http://procoder.cnblogs.com
本作品由Jake Lin创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请给我留言。
出处:http://procoder.cnblogs.com
本作品由Jake Lin创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请给我留言。
分类:
移动开发系列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架