Dialog中使用Toolbar

123 篇文章 1 订阅
 

MFC中没有提供供对话框使用的工具条类,而我们时常需要开发以对话框为框架的程序。下面我使用简单的代码说明这种方法。

step1:
在资源编辑器中插入工具条资源,并为每个按钮创建ID。将它命名为IDC_TOOLBAR1

step2:
在对话框变量中添加一个工具条变量。
CToolBar m_wndToolBar;

step3:
在CDialog::OnInitDialog中添加如下代码:

 
// 创建工具条并调入资源
if(!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
{
	TRACE0("Failed to Create Dialog Toolbar\n");
	EndDialog(IDCANCEL);
}

CRect	rcClientOld; // 久客户区RECT
CRect	rcClientNew; // 加入TOOLBAR后的CLIENT RECT
GetClientRect(rcClientOld); // 
// Called to reposition and resize control bars in the client area of a window
// The reposQuery FLAG does not really traw the Toolbar.  It only does the calculations.
// And puts the new ClientRect values in rcClientNew so we can do the rest of the Math.
//重新计算RECT大小
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);

// All of the Child Windows (Controls) now need to be moved so the Tollbar does not cover them up.
//所有的子窗口将被移动,以免被TOOLBAR覆盖
// Offest to move all child controls after adding Tollbar
//计算移动的距离
CPoint ptOffset(rcClientNew.left-rcClientOld.left,
		rcClientNew.top-rcClientOld.top);

CRect	rcChild;
CWnd*	pwndChild = GetWindow(GW_CHILD);  //得到子窗口
while(pwndChild) // 处理所有子窗口
{//移动所有子窗口
	pwndChild->GetWindowRect(rcChild);
	ScreenToClient(rcChild); 
	rcChild.OffsetRect(ptOffset); 
	pwndChild->MoveWindow(rcChild,FALSE); 
	pwndChild = pwndChild->GetNextWindow();
}

CRect	rcWindow;
GetWindowRect(rcWindow); // 得到对话框RECT
rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // 修改对话框尺寸
rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height(); 
MoveWindow(rcWindow,FALSE); // Redraw Window

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值