本例所述为使用VC编写的一个可以动态生成菜单项的类文件,这里展示的是其核心代码,代码备有比较详细的注释,相对而言理解起来并不复杂。
主要功能代码如下:
#include "stdafx.h" #include "Test.h" #include "TestDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialog { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CTestDlg 对话框 CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CTestDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BTNADDSYSTEMMENU, OnBnClickedBtnaddsystemmenu) END_MESSAGE_MAP() // CTestDlg 消息处理程序 BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将\“关于...\”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO:在此添加额外的初始化代码 return TRUE; // 除非设置了控件的焦点,否则返回 TRUE } void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if(nID==ID_FILE_OPEN) { MessageBox("测试添加系统菜单功能","信息提示",MB_OK); } else if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标显示。 HCURSOR CTestDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CTestDlg::OnBnClickedBtnaddsystemmenu() { CMenu *pMenu=GetSystemMenu(FALSE); pMenu->AppendMenu(0,ID_FILE_OPEN,"显示提示信息"); MessageBox("增加系统菜单操作成功!","信息提示",MB_OK); }
本文向大家介绍c#菜单动态合并的实现方法,包括了c#菜单动态合并的实现方法的使用技巧和注意事项,需要的朋友参考一下 说明 在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单。开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并。这是如何实现的呢?本例实现了将两个弹出菜单动态的合并成一个弹出菜单的功能。实例效果如图1.2所示。 要点 C# 2.0中已
本文向大家介绍C#实现动态生成表格的方法,包括了C#实现动态生成表格的方法的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式展现了C#实现动态生成表格的方法,分享给大家供大家参考之用。具体方法如下: 希望本文所述对大家的C#程序设计有所帮助
本文向大家介绍Vue 动态添加路由及生成菜单的方法示例,包括了Vue 动态添加路由及生成菜单的方法示例的使用技巧和注意事项,需要的朋友参考一下 写后台管理系统,估计有不少人遇过这样的需求:根据后台数据动态添加路由和菜单。 为什么这么做呢?因为不同的用户有不同的权限,能访问的页面是不一样的。 在网上找了好多资料,终于想到了解决办法。 动态生成路由 利用 vue-router 的 addRoutes
本文向大家介绍Android 动态菜单实现实例代码,包括了Android 动态菜单实现实例代码的使用技巧和注意事项,需要的朋友参考一下 Android 动态菜单 先上效果图 比较简单,主要就是属性动画的使用和坐标角度的小细节。 实现 实现效果: 图标按照路径一路缩放渐变过来即可。 核心代码 item开启动画和关闭动画为一个逆过程,体现在x,y距离变化上。 x,y的距离开启时距离逐渐增长 这里要注意
本文向大家介绍vue中实现动态生成二维码的方法,包括了vue中实现动态生成二维码的方法的使用技巧和注意事项,需要的朋友参考一下 最近项目中有个裂变分享的需求,需要在页面中根据分享人的身份动态生成二维码图片放置在页面中,所以研究了一下这个功能的实现,同时把实现过程记录如下: 1.引入二维码生成模块 注意:此处安装qrcodejs2,安装依赖后可在main方法中进行全局引用设置,也可单独某个页面中进行
本文向大家介绍jQuery实现可用于博客的动态滑动菜单,包括了jQuery实现可用于博客的动态滑动菜单的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现可用于博客的动态滑动菜单的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的jQuery程序设计有所帮助。