BOOL CTestDlg::CreatToolBar( void )
{
// 创建工具栏并绑定资源
if (!m_toolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_toolBar.LoadToolBar(IDR_TOOLBAR))
{
TRACE0("Failed to Create Dialog Toolbar")
EndDialog(IDCANCEL)
return FALSE
}
// 2 - 得出控件条大小.
CRect rcClientStart
CRect rcClientNow
GetClientRect(rcClientStart)
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
0, reposQuery, rcClientNow)
// 3 放置控件条位置
CPoint ptOffset(rcClientNow.left - rcClientStart.left,
rcClientNow.top - rcClientStart.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()
}
// 4 - 调整对话框尺寸
CRect rcWindow
GetWindowRect(rcWindow)
rcWindow.right += rcClientStart.Width() - rcClientNow.Width()
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height()
MoveWindow(rcWindow, FALSE)
//m_webRect = rcWindow
// 5 - 控件条定位
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0)
//GetClientRect( &m_webRect )
m_webRect.left = rcWindow.left
m_webRect.bottom = rcWindow.bottom
m_webRect.right = rcWindow.right
m_webRect.top = rcChild.top
// 6 - 对框居中
CenterWindow()
return TRUE
}
头文件中添加:
CToolBar m_toolBar
在资源中自定义工具栏资源:IDR_TOOLBAR(该名字可自定义,主要与程序中的匹配)
在OnInitDialog()
中调用CreatToolBar()即能实现添加工具栏
1,solution explorer 右键添加resource (Add ->Resource),然后选择toolbar并新建
2,然后自己画BUTTON吧
3,记得给每个button一个ID啊。。。
4,对了toolbar的ID是IDR_TOOLBAR1,对话框的.h文件中添加
CToolBar m_FirstToolBar5,.cpp文件中,函数OnInitDialog()中添加
if(!m_FirstToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_FirstToolBar.LoadToolBar(IDR_TOOLBAR1))
{
EndDialog(IDCANCEL)
}
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, \
AFX_IDW_CONTROLBAR_LAST,0)
m_FirstToolBar.MoveWindow(10, 10,100, 25, 1 )
6,如果要每个button有处理动作,那么就响应消息吧,
BEGIN_MESSAGE_MAP(CmfcdialogDlg, CDialogEx)ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT1, &CmfcdialogDlg::OnEnChangeEdit1)
ON_BN_CLICKED(IDC_BUTTON1, &CmfcdialogDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CmfcdialogDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CmfcdialogDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CmfcdialogDlg::OnBnClickedButton4)
END_MESSAGE_MAP()
7,再看消息处理函数
void CmfcdialogDlg::OnBnClickedButton2(){
m_edit1.SetWindowTextW(_T("2 on toolbar"))
// TODO: Add your control notification handler code here
}
8,嗯,基本就这样,附件贴了项目文件(VS2010)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)