首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在所有者描述的MFC CMenu派生菜单中显示复选框?

在MFC CMenu派生菜单中显示复选框,可以通过以下步骤实现:

  1. 创建一个派生自CMenu的自定义菜单类,例如CMyMenu。
  2. 在CMyMenu类中重写PreCreateWindow函数,设置菜单的样式为MNS_CHECKORBMP。
  3. 在CMyMenu类中重写MeasureItem函数,设置菜单项的高度和宽度。
  4. 在CMyMenu类中重写DrawItem函数,绘制菜单项的复选框和文本。
  5. 在需要显示复选框的菜单项中,使用CheckMenuItem函数设置菜单项的选中状态。

下面是一个示例代码:

代码语言:txt
复制
class CMyMenu : public CMenu
{
public:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs)
    {
        cs.style |= MNS_CHECKORBMP;
        return CMenu::PreCreateWindow(cs);
    }

    virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
    {
        lpMeasureItemStruct->itemHeight = 20; // 设置菜单项的高度
        lpMeasureItemStruct->itemWidth = 200; // 设置菜单项的宽度
    }

    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
        CDC dc;
        dc.Attach(lpDrawItemStruct->hDC);

        // 绘制复选框
        CRect rect = lpDrawItemStruct->rcItem;
        rect.left += 20; // 调整复选框的位置
        rect.right = rect.left + 13; // 设置复选框的大小
        dc.DrawFrameControl(rect, DFC_BUTTON, DFCS_BUTTONCHECK | (lpDrawItemStruct->itemState & ODS_CHECKED ? DFCS_CHECKED : 0));

        // 绘制文本
        CString strText;
        GetMenuString(lpDrawItemStruct->hwndItem, lpDrawItemStruct->itemID, strText, MF_BYCOMMAND);
        rect.left += 20; // 调整文本的位置
        dc.DrawText(strText, rect, DT_SINGLELINE | DT_VCENTER);

        dc.Detach();
    }
};

使用CMyMenu类替代原有的CMenu类,即可在菜单中显示复选框。在需要显示复选框的菜单项中,调用CheckMenuItem函数设置菜单项的选中状态。

这是一个基本的实现方法,具体的应用场景和推荐的腾讯云相关产品和产品介绍链接地址需要根据具体需求和情况进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

QTMFC面试题

(2) 描述MFC视图窗口中, 单击鼠标右键如何弹出一个右键菜单?...视图窗口中添加鼠标右键消息处理函数 2. 创建并实例化一个菜单对象 3. 调用CMenuTrackPopupMenu函数显示右键菜单 4....给菜单项添加事件处理函数 3、多线程情况下, Qt信号槽分别在什么线程执行, 如何控制? 可以通过connect函数第五个参数来控制, 信号槽执行时所在线程 1>..... 8、MFC窗口中制作一个逃跑按钮(鼠标永远捕捉不到), 该如何实现 创建一个类MyButton, 让该类从CButton类派生 该子类处理鼠标移动事件, 鼠标移动到该按钮上, 计算随机位置...添加消息处理函数声明和定义 11、描述MFC如何使用ODBC访问Mysql数据库? 1. 安装Mysqlodbc驱动 2. 使用向导添加数据源 3.

2.1K10
  • VC6.0基础知识使用小结

    1、VC获取一个菜单状态,并打钩 做记事本时候,遇到这么个问题,就是:如何获取菜单项当前是否被选中(打勾),如果选中,点击菜单后取消选中,如果未选中,点击菜单后选中,具体实现代码如下: void...转至对话框资源,需要添加菜单对话框资源IDD_MYMEDIAPLAYER_DIALOG,选中该对话框资源,右键选择【Properties】属性,再在【General】选项卡Menu中选择需要添加菜单...,比如IDR_MAINFRAME_MENU,这样的话就可以该对话框类对象创建时使用时就可以显示菜单了。...//加载菜单  CMenu menu;  menu.LoadMenu(IDR_MENU1);  SetMenu(&menu); 4、MFC各种指针获取   VC编程对于刚刚开始学习同学...获得菜单指针    CMenu   *pMenu=m_pMainWnd->GetMenu(); 9) 在任何类获得应用程序类        用MFC全局函数AfxGetApp()获得。

    1.3K20

    MFC子窗口任务栏显示图标和主窗口最小化系统托盘显示图标

    MFC子窗口任务栏显示图标很简单, 只需要在子窗口初期化函数OnInitDialog()添加ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW); 主窗口系统托盘显示图标以及恢复窗口是参考某位大神代码...(一)  原理     1、最小化原理:首先要将窗口隐藏,然后右下角绘制图标。     ...2、恢复原理:将窗口显示,再将托盘图片删除。...(二)程序实现     1、自定义消息WM_SHOWTASK:  #define WM_SHOWTASK (WM_USER +1)     2、MFC::OnSysCommand(UINT nID,...       ShowWindow(SW_HIDE);    //隐藏主窗口     }     2、恢复界面函数,头文件定义消息响应函数     afx_msg LRESULT OnShowTask

    3.1K80

    CListCtrl详细使用方法

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头一些宏。...: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观理解:windows资源管理器,“查看”标签下“大图标,小图标,列表,详细资料” 设置listctrl 风格及扩展风格...上"); } *pResult = 0; } 右键点击listctrlitem弹出菜单 添加listctrl控件NM_RCLICK消息相应函数 void CTest6Dlg...://msdn.microsoft.com/msdnmag/issues/03/06/CQA/ 如何隐藏clistctrl列 把需隐藏宽度设为0,然后检测当该列为隐藏列时,用上面第27点锁定...可编辑,subitem图标,subitem改变颜色类 http://www.codeproject.com/listctrl/ReportControl.asp (3) subitem显示超链接

    1.1K20

    VC++ MFC 常用技巧 (一)

    MFC痛苦还记忆犹新。...VC,恐怕这两个是经常要进行转换吧 char str[10] = ”str”; CString sstr = “sstr”; sstr.Format(“%s”,str); strcpy(str,(...如何修改窗体标题: 1.)修改主窗口标题:m_pMainWnd->SetWindowText("你标题"); 2.)如果在你document类中进行改,则直接调用SetTitle(".....在装进自定义光标后,移动过程,鼠标的形状总是自定义和默认光标之间晃动,可以这样解决,PreCreateWindow()中加入如下几句: BOOL CXXXXView::PreCreateWindow...怎样禁止改变窗口大小和不能移动窗口: 再 CMainFrameOnCreate函数中加入:               CMenu *pTopMenu=GetSystemMenu(false);

    1.4K10

    VC动态生成菜单菜单响应及加速键使用

    VC动态生成菜单菜单响应及加速键使用 一、使用环境     本文讲解使用环境为MFC Visual Studio项目的单文档应用程序类型,字符集使用多字节字符集,对话框和多文档应用程序类型稍有不同这里不再讲解说明...(1)CMainFrame类头文件MainFrm.h添加树形结构菜单存储结构 public: //可点击菜单ID 名称 命令 是否使用加速键 typedef struct _CMDINFO { UINT...  (1)CMainFrame类LoadFrame函数最后添加菜单创建代码: ///动态生成菜单// CMenu *pMenu = CMenu::FromHandle(m_wndMenuBar.GetDefaultMenu...函数,请在CmainFrame类头文件声明,并在CmainFrame类源文件定义: private: bool CreateMenuChildrenNode(CMenu *pMenu, TS_PMENUNODE...GetCodeByName实现:     1、CmainFrame类头文件声明,并在CmainFrame类源文件定义: int SplitCString(CString strSource,

    31010

    锁定屏幕相关知识「建议收藏」

    值得注意是线程钩子和系统钩子钩子函数位置有很大差别。线程钩子一般在当前线程或者当前线程派生线程内,而系统钩子必须放在独立动态链接库,实现起来要麻烦一些。... VC6 中有三种形式 MFC DLL (该 DLL 可以使用和继承已有的 MFC 类 ) 可供选择,即 Regular statically linked to MFC DLL (标准静态链接...第一种 DLL 特点是,在编译时把使用 MFC 代码加入到 DLL ,因此,使用该程序时不需要其他 MFC 动态链接类库存在,但占用磁盘空间比较大;第二种 DLL 特点是,在运行时,动态链接到...(3) 编辑对话框,删除其中原有的两个按钮,加入静态文本框和编辑框,用鼠标右键点击静态文本框,弹出菜单中选择“属性”,设置其标题为“鼠标所在窗口标题”; (4) Mouse.h.../mouse/debug 目录; (10) 先运行几个可执行程序,然后运行 Mouse.exe 程序,把鼠标不同窗口中移动, Mouse.exe 程序窗口中编辑框内将显示出鼠标所在应用程序主窗口标题

    1.2K11

    MFC常用类详细介绍

    常用MFC类 CRuntimeClass结构 CRuntimeClass结构定义了类名、对象所占存储空间大小、类版本号等成员变量及动态创建对象、派生关系判断等成员函数。...(1) 对象诊断:利用成员函数AssertValid进行对象有效性检查;利用成员函数Dump输出对象数据成员值,诊断信息以文本形式放入一个数据流,用于调试器输出窗口信息显示。...要创建一个支持序列化派生类,必须将DECLARE_SERIAL宏添加到类定义,将IMPLEMENT_SERIAL添加到类实现文件。...CCmdTarget类 由CObject类直接派生,所有能实行消息映射MFC基类。...MFC应用程序中有且仅有一个CWinApp派生对象,代表程序运行主线程,代表应用程序本身。 CWnd类 由CCmdTarget类直接派生,是MFC中最基本GUI对象。

    1.2K50

    PyQT5菜单和工具栏

    #无特殊注明,所有案例只修改第一个案例对应部分 主窗口: QMainWindow提供了主窗口功能,使用它能创建一些简单状态栏、工具栏和菜单栏。...方法创建一个GUI self.initUI() # 初始化组件 def initUI(self): # 创建状态栏,showMessage()方法状态栏上显示一条信息...是菜单栏、工具栏或者快捷键动作组合 # 添加图标,文字描述 exitAct = QAction(QIcon('cat.jpg'), '&Exit', self) # 添加快捷键...("Open") quitAct = cmenu.addAction("Quit") # 使用exec_()方法显示菜单,从鼠标右键事件对象获得当前坐标 # mapToGlobal...()方法把当前组件相对坐标转换为窗口(window)绝对坐标 action = cmenu.exec_(self.mapToGlobal(event.pos())) # 绑定关闭事件

    28120

    WINDOWS核心编程--Windows程序内部运行机制

    要在 VC++ 开发环境向应用程序传递参数,可以单击菜单 【 Project 】→【 Settings 】,选择“ Debug ” 选项卡,“ Program arguments ”编辑框输入你想传递给应用程序参数...第四个参数 nCmdShow 指定程序窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数值由该程序调用者所指定,调用ShowWindow()时可以使用到该值。...该特性对于菜单类型窗口比较合适,因为它通常是简短显示一下之后便消失。设置该特性将增加显示该窗口时间,因为它通常要先分配保存位图内存。...第六个 hIcon 图标句柄 VC++开发,自定义菜单图标被命名为.rc----------资源脚本 VC++,资源是通过标识符ID来识别的 ID是resource.h宏 他lpIconname...所提供函数 Windows.h中新命名规范: 类型&定义描述 WINAPI 使用在API声明FAR PASCAL位置,如果正在编写一个具有导出API人口点DLL,则可以自己API中使用该类型

    1.5K50

    MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框   分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框   英文: Raido...属性设置. 设置为True   2.如果有两个单选框那么TAB 顺序必须紧邻 VS设置单选框TAB顺序 1,首先设置分组状态 ? 因为设置分组.所以需要指定TAB 按键顺序.也就是必须连着....我们对话框初始化函数 (OninitDlg ) 使用API 进行设置....因为单选框是继承CButton 派生出来子类.所以可以使用父类函数. 父类中有一个函数叫做 GetCheck 用来判断是否选中 ?...其余更多方法.查询MSDN 或者被人发 MFC中文帮助文档.也可以. 输入CButton 即可看到所有方法. 当然也可以自己程序 F12进入定义查看API. 一般都有注释.

    1.8K20

    visual C++ 项目和解决方案区别

    某个项目的所有文件都存储相应项目文件夹,关于项目的详细信息存储一个扩展名为.vcprojxml文件,该文件同样存储相应项目文件夹。...项目文件夹也有一个Debug目录,它包含在构建过程中生成很多文件,从Windows ExplorerType描述可以看到它们包含何种信息。....vcxproj文件是MFC生成工程文件,它包含当前工程设置和工程所包含文件等信息。.vcxproj.filters文件存放工程虚拟目录信息,也就是解决方案浏览器目录结构信息。...HelloWorldView.h和HelloWorldView.cpp:它们从CView类派生出名为CHelloWorldView视图类,用来显示和打印文档数据,包含了一些绘图和用于调试成员函数。...4.资源文件 一般我们使用MFC生成窗口程序都会有对话框、图标、菜单等资源,应用程序向导会生成资源相关文件:res目录、HelloWorld.rc文件和Resource.h文件。

    1.4K30

    【专业技术】C++ RTTI及“反射”技术

    本文将简略介绍 RTTI 一些背景知识、描述 RTTI 概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要 RTTI 运算符使用方法,它们是 typeid...其实,RTTI C++并不是什么新东西,它早在十多年以前就已经出现了。但是大多数开发人员,包括许多高层次C++程序员对它并不怎么熟悉,更不用说使用 RTTI 来设计和编写应用程序了。   ...一些面向对象专家传播自己设计理念时,大多都主张在设计和开发明智地使用虚拟成员函数,而不用 RTTI 机制。但是,很多情况下,虚拟函数无法克服本身局限。...每每涉及到处理异类容器和根基类层次(如 MFC)时,不可避免要对对象类型进行动态判断,也就是动态类型侦测。如何确定对象动态类型呢?...但 LocalizeMedia 本质上还是个 MediaFile 类型文件。因此,当用户该类文件图标上单击右键时,文件管理器必须提供一个“播放”菜单

    2.2K50
    领券