MFC: 右键弹出菜单-->选取菜单弹出窗口
2013-09-16 12:13
363 查看
首次写MFC界面,献丑了。
一:目标:在一个tree list上添加右键响应菜单
1. 添加菜单资源(ID: IDR_MENU_DEVICE)
![](http://img.blog.csdn.net/20130916121229859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3dlZXRfbGlmZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
菜单项的ID可以编辑,例如IDR_MENU_TREE_ADD_DEVICE
2. 添加tree list响应函数(afx_msg void OnNMRclickTreeDeviceList(NMHDR *pNMHDR, LRESULT *pResult))
![](http://img.blog.csdn.net/20130916121300562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3dlZXRfbGlmZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3. 响应函数load菜单资源
void CXXXDlg::OnNMRclickTreeDeviceList(NMHDR *pNMHDR, LRESULT *pResult)
{
CMenu pMenu;
HTREEITEM hParent = NULL;
CPoint pt(0, 0);
GetCursorPos(&pt);
CRect rect(0, 0, 0, 0);
ScreenToClient(&pt);
GetDlgItem(IDC_TREE_DEVICE_LIST)->GetWindowRect(&rect);
ScreenToClient(&rect);
pt.x = pt.x - rect.left;
pt.y = pt.y - rect.top;
if(!pMenu.LoadMenu(IDR_MENU_TREE_ALL))
{
return;
}
GetCursorPos(&pt);
pMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTALIGN,pt.x ,pt.y,this);
//注意: TPM_RIGHTALIGN, 否则load不成功
*pResult = 0;
}
二:为菜单项添加弹出窗口
1. 添加窗口资源(ID: IDR_DLG_ADD_DEVICE),并添加窗口类(CDlgAddDevice)
![](http://img.blog.csdn.net/20130916121326578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3dlZXRfbGlmZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2. 为菜单项添加命令(例如菜单项: IDR_MENU_TREE_ADD_DEVICE )
在tree list的窗口类中添加命令响应函数:void OnMenuAddFileDevice();
在tree list的窗口类中添加消息映射:ON_COMMAND( IDR_MENU_TREE_ADD_DEVICE , &CXXXDlg::OnMenuAddDevice)
函数实现:
void CXXXDlg::OnMenuAddDevice()
{
CDlgAddDevice dlg;
dlg.DoModal();
}
一:目标:在一个tree list上添加右键响应菜单
1. 添加菜单资源(ID: IDR_MENU_DEVICE)
菜单项的ID可以编辑,例如IDR_MENU_TREE_ADD_DEVICE
2. 添加tree list响应函数(afx_msg void OnNMRclickTreeDeviceList(NMHDR *pNMHDR, LRESULT *pResult))
3. 响应函数load菜单资源
void CXXXDlg::OnNMRclickTreeDeviceList(NMHDR *pNMHDR, LRESULT *pResult)
{
CMenu pMenu;
HTREEITEM hParent = NULL;
CPoint pt(0, 0);
GetCursorPos(&pt);
CRect rect(0, 0, 0, 0);
ScreenToClient(&pt);
GetDlgItem(IDC_TREE_DEVICE_LIST)->GetWindowRect(&rect);
ScreenToClient(&rect);
pt.x = pt.x - rect.left;
pt.y = pt.y - rect.top;
if(!pMenu.LoadMenu(IDR_MENU_TREE_ALL))
{
return;
}
GetCursorPos(&pt);
pMenu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTALIGN,pt.x ,pt.y,this);
//注意: TPM_RIGHTALIGN, 否则load不成功
*pResult = 0;
}
二:为菜单项添加弹出窗口
1. 添加窗口资源(ID: IDR_DLG_ADD_DEVICE),并添加窗口类(CDlgAddDevice)
2. 为菜单项添加命令(例如菜单项: IDR_MENU_TREE_ADD_DEVICE )
在tree list的窗口类中添加命令响应函数:void OnMenuAddFileDevice();
在tree list的窗口类中添加消息映射:ON_COMMAND( IDR_MENU_TREE_ADD_DEVICE , &CXXXDlg::OnMenuAddDevice)
函数实现:
void CXXXDlg::OnMenuAddDevice()
{
CDlgAddDevice dlg;
dlg.DoModal();
}
相关文章推荐
- MFC Windows 程序设计->最顶层窗口
- MFC让对话框窗口始终在最前&MFC弹出非模态对话框
- MFC 右键弹出菜单
- MFC窗口实现最小化到托盘 右键菜单和还原
- 2010年10月29日 MFC 弹出(如右键)菜单,其实很简单
- <MFC>模态对话框和非模态对话框的创建弹出
- MFC-右键弹出菜单
- mfc在窗口中添加右键菜单
- ArcGIS API for Silverlight开发中鼠标左键点击地图上的点弹出窗口及右键点击弹出快捷菜单的实现代码
- <MFC>消息对话框的创建弹出
- MFC操作——右键弹出菜单事件
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
- MFC制作右键弹出菜单
- MFC基于对话框——右键弹出菜单,并响应函数
- MFC创建右键弹出菜单的方法
- MFC之右键点击listctrl控件弹出菜单
- VS2010 MFC 右键弹出菜单及显示图标
- MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
- MFC - 窗口的右键菜单
- MFC右键弹出菜单,并添加响应函数