vc树形控件中点击右键建立一个弹出式菜单
2007-07-07 15:39
260 查看
vc树形控件中点击右键建立一个弹出式菜单:
一、在资源编辑器中建立一个菜单资源
新建一个菜单资源,比如把菜单的ID号为IDC_POPMENU。此菜单有一项两层,即有一个可弹出的菜单项,而此菜单项的弹出内容即为将要建立的弹出式菜单的内容。至于每一个菜单项的消息映射,与一般的菜单相同。
二、使用CMenu类对象
CMenu类的成员函数较多,但建立弹出式菜单只需用到其中几个成员函数。
1、LoadMenu函数
功能:从应用程序的可执行文件中加载菜单资源
原型:BOOL LoadMenu( UINT nIDResource );
其中nIDResource是菜单资源的ID号,这里用的是刚建立的IDC_POPMENU。
2、GetSubMenu函数
功能:此函数用于得到子菜单的指针。
原型:CMenu* GetSubMenu( int nPos ) const;
nPos为层数,0为第一层子菜单……以此类推。
由于我们需要的是“可弹出项”的第一层子菜单,因此用GetSubMenu(0)来得到第一层子菜单的类指针。
3、TrackPopupMenu函数
功能:在指定位置显示弹出菜单,并跟踪所选择的项
原型:BOOL TrackPopupMenu( UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = NULL );
其中:
nFlags为屏幕坐标属性和鼠标坐标属性
屏幕坐标属性:
TPM_CENTERALIGN 横向将菜单以x居中
TPM_LEFTALIGN 横向将菜单以x左对齐
void CMyView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
...{
CListCtrl &CList = GetListCtrl();//获取当前列表控件的指针
CMenu menu ,* pSubMenu;//定义下面要用到的cmenu对象
menu.LoadMenu(IDR_POPMENU);//装载自定义的右键菜单
pSubMenu = menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint oPoint;//定义一个用于确定光标位置的位置
GetCursorPos( &oPoint);//获取当前光标的位置,以便使得菜单可以跟随光标
int istat=CList.GetSelectionMark();//用istat存放当前选定的是第几项
CString pString =CList.GetItemText(istat,0);//获取当前项中的数据,0代表是第0列
pString="您选择的路径是:"+pString ;//显示当前选择项
MessageBox(pString);//显示当前选中的路径
pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); //在指定位置显示弹出菜单
}
一、在资源编辑器中建立一个菜单资源
新建一个菜单资源,比如把菜单的ID号为IDC_POPMENU。此菜单有一项两层,即有一个可弹出的菜单项,而此菜单项的弹出内容即为将要建立的弹出式菜单的内容。至于每一个菜单项的消息映射,与一般的菜单相同。
二、使用CMenu类对象
CMenu类的成员函数较多,但建立弹出式菜单只需用到其中几个成员函数。
1、LoadMenu函数
功能:从应用程序的可执行文件中加载菜单资源
原型:BOOL LoadMenu( UINT nIDResource );
其中nIDResource是菜单资源的ID号,这里用的是刚建立的IDC_POPMENU。
2、GetSubMenu函数
功能:此函数用于得到子菜单的指针。
原型:CMenu* GetSubMenu( int nPos ) const;
nPos为层数,0为第一层子菜单……以此类推。
由于我们需要的是“可弹出项”的第一层子菜单,因此用GetSubMenu(0)来得到第一层子菜单的类指针。
3、TrackPopupMenu函数
功能:在指定位置显示弹出菜单,并跟踪所选择的项
原型:BOOL TrackPopupMenu( UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = NULL );
其中:
nFlags为屏幕坐标属性和鼠标坐标属性
屏幕坐标属性:
TPM_CENTERALIGN 横向将菜单以x居中
TPM_LEFTALIGN 横向将菜单以x左对齐
void CMyView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
...{
CListCtrl &CList = GetListCtrl();//获取当前列表控件的指针
CMenu menu ,* pSubMenu;//定义下面要用到的cmenu对象
menu.LoadMenu(IDR_POPMENU);//装载自定义的右键菜单
pSubMenu = menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint oPoint;//定义一个用于确定光标位置的位置
GetCursorPos( &oPoint);//获取当前光标的位置,以便使得菜单可以跟随光标
int istat=CList.GetSelectionMark();//用istat存放当前选定的是第几项
CString pString =CList.GetItemText(istat,0);//获取当前项中的数据,0代表是第0列
pString="您选择的路径是:"+pString ;//显示当前选择项
MessageBox(pString);//显示当前选中的路径
pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); //在指定位置显示弹出菜单
}
相关文章推荐
- VC 对话框中树形控件添加右键菜单
- MFC TreeCtrl树形控件中限定右键点击节点弹出菜单
- 我写的一个Qt 显示二维码( QR Code)的控件(可以去掉对 libpthread 的依赖,而且编译出的库文件可以在 vc2010 的release 模式下使用)
- 捕获外部程序中TListView控件的鼠标右键点击事件
- VC中的树形控件
- VC++中树形控件CTreeCtrl的使用
- 在VC程序中实现点击某一文档全路径(如一个Word文档)自动在相关浏览器(MS WORD)中观看
- 一个vc ListCtrl控件中插入进度条类CProcessList
- c#+Winform实现自定义的“复制、粘贴”右键快捷菜单,多个控件共享使用一个右键菜单。
- qt建立一个按钮控件
- .NET树形控件展开一个节点则关闭同级节点
- CTreeCtrl::InsertItem给树形视图控件添加一个项目
- listview控件当点击进入一个item后返回,仍然返回到点击item时listview所定位到的位置
- MFC之右键点击listctrl控件弹出菜单
- iOS Date Picker控件的简单使用(点击一个input框,弹出)
- 如果写一个点击view带动画的下滑展开显示隐藏内容的控件
- 使用c#制作的一个树形下拉控件
- 如何写一个点击view带动画的下滑展开显示隐藏内容的控件
- 带右键菜单的树形控件(1)
- 为树形控件添加弹出式菜单,并跟踪所选择的项