在Dialog中使用Menu和Toolbar
来源:互联网 发布:淘宝开放平台api 申请 编辑:程序博客网 时间:2024/06/06 12:27
本文适合初学者
前言
在用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() 中添加如下代码:
1.
//加载菜单
2.
m_menu.LoadMenu(IDR_MENU1);
3.
//设置当前菜单
4.
SetMenu(&m_menu);
5.
//当你不需要菜单时可以用 SetMenu(NULL);来取消当前菜单
二、如何往基于Dialog的程序添加工具栏
[2.1] 先添加工具栏(IDR_TOOLBAR1)资源,并画好各个按钮。
[2.2] 在CDlgMenuToolbarDlg类声名中添加成员变量 CToolBar m_wndtoolbar;
[2.3] 在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码
01.
//添加一个平面工具条
02.
if
(!m_wndtoolbar.CreateEx(
this
,TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
03.
CRect(4,4,0,0)) || !m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) )
04.
{
05.
TRACE0(
"failed to create toolbar\n"
);
06.
return
FALSE;
07.
}
08.
m_wndtoolbar.ShowWindow(SW_SHOW);
09.
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
三、为工具栏添加工具提示
[3.1] 在CDlgMenuToolbarDlg类定义中手工添加消息映射函数的定义,如下黑体部分
1.
//{{AFX_MSG(CDlgMenuToolbarDlg)
2.
virtual
BOOL
OnInitDialog();
3.
afx_msg
void
OnPaint(); <b>afx_msg
BOOL
OnToolTipText(
UINT
, NMHDR* pNMHDR,
LRESULT
* pResult);</b>
//}}AFX_MSG
4.
DECLARE_MESSAGE_MAP()
[3.2] 在CDlgMenuToolbarDlg.cpp添加函数的实现代码
01.
//工具栏提示
02.
BOOL
CDlgMenuToolbarDlg::OnToolTipText(
UINT
, NMHDR* pNMHDR,
LRESULT
* pResult)
03.
{
04.
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
05.
06.
// UNICODE消息
07.
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
08.
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
09.
//TCHAR szFullText[512];
10.
CString strTipText;
11.
UINT
nID = pNMHDR->idFrom;
12.
13.
if
(pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
14.
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
15.
{
16.
// idFrom为工具条的HWND
17.
nID = ::GetDlgCtrlID((
HWND
)nID);
18.
}
19.
20.
if
(nID != 0)
//不为分隔符
21.
{
22.
strTipText.LoadString(nID);
23.
strTipText = strTipText.Mid(strTipText.Find(
''
\n
''
,0)+1);
24.
25.
#ifndef _UNICODE
26.
if
(pNMHDR->code == TTN_NEEDTEXTA)
27.
{
28.
lstrcpyn(pTTTA->szText, strTipText,
sizeof
(pTTTA->szText));
29.
}
30.
else
31.
{
32.
_mbstowcsz(pTTTW->szText, strTipText,
sizeof
(pTTTW->szText));
33.
}
34.
#else
35.
if
(pNMHDR->code == TTN_NEEDTEXTA)
36.
{
37.
_wcstombsz(pTTTA->szText, strTipText,
sizeof
(pTTTA->szText));
38.
}
39.
else
40.
{
41.
lstrcpyn(pTTTW->szText, strTipText,
sizeof
(pTTTW->szText));
42.
}
43.
#endif
44.
45.
*pResult = 0;
46.
47.
// 使工具条提示窗口在最上面
48.
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
49.
SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
50.
return
TRUE;
51.
}
52.
return
TRUE;
53.
}
[3.3] 在CDlgMenuToolbarDlg.cpp中添加消息映射,请看如下代码中的黑体部分
1.
BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)
2.
//{{AFX_MSG_MAP(CDlgMenuToolbarDlg)
3.
ON_WM_PAINT() <b>ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )</b>
//}}AFX_MSG_MAP
4.
END_MESSAGE_MAP()
四、其它
为了使你的程序看起来更酷,还可以在CDlgMenuToolbarDlg::OnPaint()中修改代码实现Dialog 填充颜色。
1.
CPaintDC dc(
this
);
2.
CRect rect;
3.
GetClientRect(rect);
4.
dc.FillSolidRect(rect, RGB(60,110,170));
好了,编译运行看看效果吧!希望本文能够给您一些提示!
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar
- 在Dialog中使用Menu和Toolbar(作者:xujian)
- 在Dialog中使用Menu和Toolbar(作者:xujian)
- 在Dialog中使用Menu和Toolbar 作者 xujian(www.vchelp.com)
- 在Dialog中使用Toolbar
- Toolbar和menu使用
- Dialog中使用Toolbar
- dialog中使用toolbar
- Dialog中使用Toolbar
- 关于java中 UnsupportedOperationException
- Android开发重要参考资料
- Android原始资源的使用
- JavaScript 单例模式
- java_集合
- 在Dialog中使用Menu和Toolbar
- 数组元素的平移
- Android中Webview使用经验总结
- java_网络编程
- 如何制作科技论文中的Figures
- 直接写IO端口0x64完成计算机重启操作
- Spring攻略笔记-3 自动装配
- android广播
- 运维的85条军规