当前位置:  编程技术>c/c++/嵌入式

VC动态生成菜单项的实现方法

    来源: 互联网  发布时间:2014-10-26

    本文导语:  本例所述为使用VC编写的一个可以动态生成菜单项的类文件,这里展示的是其核心代码,代码备有比较详细的注释,相对而言理解起来并不复杂。 主要功能代码如下: #include "stdafx.h" #include "Test.h" #include "TestDlg.h" #ifdef _DEB...

本例所述为使用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(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(m_hIcon);
}

void CTestDlg::OnBnClickedBtnaddsystemmenu()
{
 CMenu *pMenu=GetSystemMenu(FALSE);
 pMenu->AppendMenu(0,ID_FILE_OPEN,"显示提示信息");
 MessageBox("增加系统菜单操作成功!","信息提示",MB_OK);
}

    
 
 

您可能感兴趣的文章:

  • 为什么动态生成的图片,JSP不能动态的获得
  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • 高分求jsp中动态生成图片的相关资料、生成svg格式和pdf格式的资料,不够再加分
  • 需要从数据库中动态生成的页面是该在SERVLET输出生成,还是应该在JSP编码实现?
  • 如何生成含所有符号的动态库文件
  • 动态xml生成可行性?
  • 如何根据数字或字幕动态生成图片?
  • 有请各位朋友帮忙讨论--关于动态生成的话题!
  • php动态生成函数示例
  • php动态生成函数的例子
  • 请问在java中如何实现类的动态生成?谢谢
  • 为什么要动态装载类,什么时候用?既然已经知道类名称,为何不直接生成对象?
  • 动态生成的查询条件其参数传递如何实现?
  • 在JSP里面怎样动态生成变量?
  • !!!!!!!!如何用静态库生成动态库?
  • 不改变代码,怎样使每次编译生成的可执行程序或动态库二进制保持一致?
  • 如何把ar生成的A静态库文件加进动态库?
  • 如何用Java动态生成Excel文件
  • 求jsp树的原代码,一定要是jsp+js+xml 执行效率要高。(从数据库中动态生成的)
  • 哪位高手指点一下:使用libxml2是否可以动态生成xml文件?
  • 关于动态菜单项,注意,不是动态菜单(一定给分)
  • gtkmenuitem使用,我想动态改变菜单上面的文字,就像delphi的caption一样,应该怎样做
  • VC实现动态菜单的创建方法
  • 急,急,急!!!高分求购java实现动态树型菜单的源代码
  • 关于在浏览器上动态显示树型菜单的问题
  • Android动态添加menu菜单的简单方法
  • jquery 动态菜单的实现代码分享
  • 动态菜单的问题,急!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • C#实现动态显示及动态移除图片方法
  • LINUX下FTP下载远程动态目录如何实现(十万火急啊)
  • java中如何实现二维(多维)动态数组.谢谢
  • 怎么实现,动态的增加和删除input,删除时用radiobox选中,然后点删除,即可。谢谢
  • 如何实现动态刷新文本框?
  • 关于用java2D如何实现动态的生产计划图?
  • linux中的3D硬件加速支持的动态炫彩桌面功能是如何程序实现的?
  • 大家一般都是怎么实现应用程序中的动态图表的?
  • Linux中动态加载模块的功能是如何实现的?
  • 100分相送,怎么实现,动态的增加和删除input,删除时用radiobox选中,然后点删除,即可
  • 如何实现动态下拉列表
  • jquery动态设置超链接显示内容的实现代码
  • Jquery 动态实现图片缩略的代码
  • C#中事件的动态调用实现方法
  • JSP中如何实现动态select选项框?
  • C#实现动态生成表格的方法
  • 怎样实现动态时间显示,在网页上
  • JQuery实现动态表格点击按钮表格增加一行
  • 我现在做一个动态新闻管理系统,要把编辑好的网页上传到服务器指定的文件夹去,如何有好的实现?
  • Python实现动态添加类的属性或成员函数的解决方法
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 可执行程序加载动态库 和 动态库加载动态库 的动态库初始化的问题
  • 动态库调用动态库
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • linux能否成为动态域名解析客户端的动态域名解析服务器?
  • Linux下,怎么确定动态库的绝对位置(动态库里面确定)?
  • 动态加载动态库问题--在线等
  • 静态库,动态库,静态链接和动态链接
  • 在linux下(c++),如何动态调用 动态库(.so)? 为什么我编译报错:undefined reference to "dlopen"
  • 程序发布的问题(动态连接库的问题)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3