Windows Mobile下使用Native C++(WTL, MFC, Win32)开发,如何为对话框加入菜单

简介:

背景

不像.NET Compact Framework, 使用Native C++开发开发对话框程序默认是没有菜单的,需要手工增加。本文讲述如何为对话框程序加入菜单。

 

.NET Compact Framework

使用.NET Compact Framework的程序,默认增加菜单项(mainMenu1),只要编辑菜单显示,增加处理事件就能操控菜单了,非常方便。

wtl_menu1

 

Native C++

使用Native C++进行开发,情况就大相径庭了。新增的对话框默认是没有菜单的,需要手工增加菜单支持,下面以一个WTL对话框程序作为例子讲述如何加入菜单支持。步骤如下:

1.在资源文件增加菜单。

wtl_menu3

 

2.根据需求编辑菜单。

wtl_menu4

 

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

完成了,如下图。

 wtl_menu2

下面点击OK。

wtl_menu5


    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/11/05/Window_Mobile_WTL_Menu.html,如需转载请自行联系原作者




相关文章
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
79 1
|
2月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
91 7
WK
|
1月前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
59 0
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
92 0
|
2月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
82 0
|
2月前
|
NoSQL API Redis
如何使用 C++ 开发 Redis 模块
如何使用 C++ 开发 Redis 模块
|
2月前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
190 0
|
3月前
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
27天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
48 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
94 5