在 DIALOG里定义工具栏消息
- 小弟也只是初学MFC, 参考别人源码看不懂所记下
- 记录一下自己被困扰许久的问题
- 这也是自己第一篇博客,写得不好请多包含
0x00 被困扰的消息
在下载了一个开源MFC代码,发现工具栏消息自己定义的,找了老半天没找着是怎么定义,过程心酸。。此处不多详细说,下面详细介绍如何定义工具栏消息。
0x01 解决消息
在 DIALOG类里面创建一个 CToolBar 成员变量,我将他命名为 : CToolBar m_Toolbar;
有了这个成员变量之后就可以创建一个创建工具栏了。
找到 OnInitDialog() 初始化函数, 下面代码为 OnInitDialog() 函数实现
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
//定义消息
UINT Msg = 103;
m_ToolBar.Create(this);
m_ToolBar.SetButtons(&Msg, 1);
m_ToolBar.SetButtonText(0, "测试");
0x02 初始化完成以后开始定义消息
- 找到 Resouce.h 这个头文件
- 把刚才定义消息的 103 做个宏定义;
- 把这段代码添加进去 #define IDB_TEST 103
- 保存关闭头文件
0x03 在 DIALOG 头文件中添加消息处理函数
protected:
HICON m_hIcon;
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnBUTTONTest();
DECLARE_MESSAGE_MAP()
0x04 在 DIALOG 源文件中添加代码
BEGIN_MESSAGE_MAP(CtestDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(IDB_TEST , OnBUTTONTest)
END_MESSAGE_MAP()
void CtestDlg::OnBUTTONTest()
{
//在这里添加自己需要处理的消息代码
}
0x05至此添加工具栏消息映射完毕