王朝网络
分享
 
 
 

在Dialog中使用Menu和Toolbar

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

在Dialog中使用Menu和Toolbar

作者:xujian

本文适合初学者

前言

在用VC编程时,界面制作远不如Delphi、VB容易。我又常常用到基于Dialog编写应用程序。而在直接在Dialog使用Toolbar和Menu的资料很少。而我有机会可以总结一些经验,供大家分享,希望能得到指教。

下载本文示例工程 大小:11.2K

运行效果如下图

我们先建立一个基于Dialog 的程序,我给他起了个名字叫:DlgMenuToolbar。

一、如何往基于Dialog的程序添加菜单

[1.1] 先添加菜单(IDR_MENU1)资源,并加上需要的菜单项。

[1.2] 编辑对话框资源IDD_DLGMENUTOOLBAR_DIALOG的属性,在属性对话框中选择IDR_MENU1即可。

[1.3] 假如您不希望在对话框属性中直接设置菜单,而通过代码在程序中动态生成可以采用如下方法:

[1.3.1]在CDlgMenuToolbarDlg类声名中添加成员变量CMenu

m_menu

再在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码:

//加载菜单

m_menu.LoadMenu(IDR_MENU1);

//设置当前菜单

SetMenu(&m_menu);

//当你不需要菜单时可以用 SetMenu(NULL);来取消当前菜单

二、如何往基于Dialog的程序添加工具栏

[2.1] 先添加工具栏(IDR_TOOLBAR1)资源,并画好各个按钮。

[2.2] 在CDlgMenuToolbarDlg类声名中添加成员变量 CToolBar m_wndtoolbar;

[2.3] 在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码

//添加一个平面工具条

if (!m_wndtoolbar.CreateEx( this,TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,

CRect(4,4,0,0)) ||!m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) )

{

TRACE0("failed to create toolbar\n");

return FALSE;

}

m_wndtoolbar.ShowWindow(SW_SHOW);

RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

三、为工具栏添加工具提示

[3.1] 在CDlgMenuToolbarDlg类定义中手工添加消息映射函数的定义,如下黑体部分

//{{AFX_MSG(CDlgMenuToolbarDlg)

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

[3.2] 在CDlgMenuToolbarDlg.cpp添加函数的实现代码

//工具栏提示

BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)

{

ASSERT(pNMHDR-code == TTN_NEEDTEXTA || pNMHDR-code == TTN_NEEDTEXTW);

// UNICODE消息

TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;

TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;

//TCHAR szFullText[512];

CString strTipText;

UINT nID = pNMHDR-idFrom;

if (pNMHDR-code == TTN_NEEDTEXTA && (pTTTA-uFlags & TTF_IDISHWND) ||

pNMHDR-code == TTN_NEEDTEXTW && (pTTTW-uFlags & TTF_IDISHWND))

{

// idFrom为工具条的HWND

nID = ::GetDlgCtrlID((HWND)nID);

}

if (nID != 0) //不为分隔符

{

strTipText.LoadString(nID);

strTipText = strTipText.Mid(strTipText.Find(''\n'',0)+1);

#ifndef _UNICODE

if (pNMHDR-code == TTN_NEEDTEXTA)

{

lstrcpyn(pTTTA-szText, strTipText, sizeof(pTTTA-szText));

}

else

{

_mbstowcsz(pTTTW-szText, strTipText, sizeof(pTTTW-szText));

}

#else

if (pNMHDR-code == TTN_NEEDTEXTA)

{

_wcstombsz(pTTTA-szText, strTipText,sizeof(pTTTA-szText));

}

else

{

lstrcpyn(pTTTW-szText, strTipText, sizeof(pTTTW-szText));

}

#endif

*pResult = 0;

// 使工具条提示窗口在最上面

::SetWindowPos(pNMHDR-hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|

SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);

return TRUE;

}

return TRUE;

}

[3.3] 在CDlgMenuToolbarDlg.cpp中添加消息映射,请看如下代码中的黑体部分

BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)

//{{AFX_MSG_MAP(CDlgMenuToolbarDlg)

ON_WM_PAINT()

ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

四、其它

为了使你的程序看起来更酷,还可以在CDlgMenuToolbarDlg::OnPaint()中修改代码实现Dialog 填充颜色。

CPaintDC dc(this);

CRect rect;

GetClientRect(rect);

dc.FillSolidRect(rect, RGB(60,110,170));

好了,编译运行看看效果吧!希望本文能够给您一些提示!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有