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

如何往基于Dialog的程序添加工具栏,第1张

下列函数为添加工具栏的代码:

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_FirstToolBar

5,.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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11379726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存