您的位置:首页 > 编程语言 > C语言/C++

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

2009-11-05 07:14 609 查看

背景

不像.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。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐