MFC创建右键弹出菜单的方法

本文实例讲述了MFC创建右键弹出菜单的方法。分享给大家供大家参考。具体实现方法如下:

①、添加一个菜单资源,ID为IDM_RIGHTMENU。因为在显示右键菜单时顶级菜单是不显示的,所以可以给它设置任意文本。

②、给视类添加WM_RBUTTONDOWN消息,在该消息中处理右键弹出菜单。因为视类窗口始终覆盖在框架窗口之上,框架窗口接收不到鼠标消息,所以由视类捕获WM_RBUTTONDOWN消息。

代码如下:

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值

CMenu menu;
    menu.LoadMenuW(IDM_RIGHTMENU);//加载菜单资源
    CMenu *pPopup=menu.GetSubMenu(0);
    ClientToScreen(&point);//将客户区坐标转换为屏幕坐标

//显示右键菜单,由视类窗口拥有。
    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
    //TrackPopupMenu的最后一个参数,可以为GetParent让父窗口既框架窗口拥有右键菜单,这样
    //框架类窗口获得了对右键菜单中菜单项的命令响应,
    CView::OnRButtonDown(nFlags, point);
}

③、为右键菜单项添加命令消息响应函数(略)。

希望本文所述对大家的基于MFC的VC++程序设计有所帮助。

(0)

相关推荐

  • MFC对话框自定义消息映射的方法

    本文实例讲述了MFC对话框自定义消息映射的方法.分享给大家供大家参考.具体实现方法如下: 1.定义消息: 复制代码 代码如下: #define WM_MYMSG (WM_USER+100) 2.定义消息响应函数: LPESULT CSLYARDlg::OnMymsg(WPARAM wParam, LPARAM lParam) { // TODO return 0; } 3.在窗口类头文件的AFX_MSG中声明消息响应函数: // Generated message map functions /

  • MFC程序设计常用技巧汇总

    本文实例总结了MFC程序设计常用技巧.分享给大家供大家参考.具体如下: 1.属性页的添加: 创建对话框的类,该类要从CpropertyPage继承:然后在要添加该对话框为属性页的类(头文件)里创建CpropertySheet类的一个对象m_tabsheet和新创建的对话框类的对象m_skatch:最后,在.cpp文件里的OnInitDialog()之类的函数里实现如下代码: 复制代码 代码如下: m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0);

  • MFC对话框中添加状态栏的方法

    本文实例讲述了MFC对话框中添加状态栏的方法.分享给大家供大家参考.具体如下: 1.在对话框的dlg实现类里添加成员变量: CXTPStatusBar m_wndStatusBar; //状态栏(或者是CStatusBar) //在OnInitDialog方法中初始化: static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICA

  • MFC实现在文件尾追加数据的方法

    本文实例讲述了MFC实现在文件尾追加数据的方法.分享给大家供大家参考.具体如下: BOOL CDelDlg::WritetoFile(CString sValue) { CString sFile = GetExePath() + "\\1.log"; CStdioFile file; if(file.Open(sFile, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate)) { file.SeekToEnd()

  • MFC程序对文件的处理方法

    对文件的处理是MFC程序设计中非常常见的应用.本文就以实例形式做一简单叙述.具体方法如下: 1.CFileDialog的应用 格式如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter =

  • MFC设置对话框焦点的方法简述

    本文简单讲述了MFC设置对话框焦点的方法,分享给大家供大家参考.具体实现方法如下: 具体的方法有两种: 1. 设置对话框控件的tab order. 按Ctrl+D即可看见.将需要被设置到焦点的空间的tab order设为1. 2. 对话框的OnInitDialog返回FALSE.解释如下:(摘抄至msdn)   If OnInitDialog returns nonzero, Windows sets the input focus to the first control in the dia

  • MFC扩展DLL中导出类和对话框的实现方法

    本文实例讲述了MFC扩展DLL中导出类和对话框的实现方法,分享给大家供大家参考.具体实现方法如下: 一般来说,如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 程序运行结果如下图所示: 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWiz

  • MFC中动态创建控件以及事件响应实现方法

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 静态控件不需要调用Create()

  • C++ 关于MFC多线程编程的注意事项

    在多线程编程中,最简单的方法,无非就是利用 AfxBeginThread  来创建一个工作线程,看一下这个函数的说明: 复制代码 代码如下: CWinThread* AFXAPI AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_AT

  • MFC之ComboBox控件用法实例教程

    本文以实例形式较为详细的讲述了MFC中ComboBox控件的用法.分享给大家供大家参考之用.具体方法如下: 一.ComboBox简介: ComboBox控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本. 从工具栏中拖一个Combo Box控件.右击添加变量,变量名为cbBox. 二.用法: 1.为控件添加选项,指定默认选项 cbBox.AddString(_T("one")); cbBox.AddString(

  • C++ 关于MFC List Control 控件的总结

    1\在开发项目时,使用到了 listcontrol 控件,就一些问题,做一下备注,以备以后使用 (1)  给list项目 删除所有的项目  DeleteAllItems(); (2) 给list项目 添加一个列 .InsertColumn(0, _T("编号")); (3)给list a项目 设置列的宽度 .SetColumnWidth(0, 50); (4) 在添加项目之前 可以使用 .SetRedraw(false); 来禁止 重画,这样可以提高效率.当添加完成后,可以 使用 .S

随机推荐