VC++对话框添加工具栏
- 格式:doc
- 大小:28.00 KB
- 文档页数:2
VC实现工具栏(2010-08-02 20:34:33)转载原文标签:转载原文地址:VC实现工具栏作者:天涯霜雪首先,需要具备几个条件,一是工具栏具有CBRS_TOOLTIPS风格,二是工具栏的父窗口需要处理TTN_NEEDTEXT通知消息.在MFC类库中,CFrameWnd默认处理了TTN_NEEDTEXT 通知消息,因此在文档视图结构的应用程序中,只要工具栏拥有CBRS_TOOLTIPS风格,就能显示提示信息.如果在对话框中添加TTN_NEEDTEXT通知消息,需要消息映射部分添加如下代码:ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)函数原型:OnToolTipNotify(UINT id,NMHDR *pNMHDR,LRESULT *pResult)参数说明:id:是发送消息的控件ID,但此处没有用,因为控件ID可以来自于pNMHDR.pNMHDR:是一个NMHDR结构指针(实际应该是NMTTDISPINFO结构指针),NMHDR结构记录了发送消息的控件ID,句柄等信息.pResult:表示结果代码指针,TTN_NEEDTEXT消息可以忽略该参数.实现过程:定义一个CToolBar变量m_wndToolBar,创建一个工具栏资源.在OnInitDialog方法中创建工具栏://创建工具栏if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS |CBRS_SIZE_DYNAMIC|CBRS_BORDER_TOP ) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1)){TRACE0("Failed to create toolbarn");return -1; // fail to create}//设置图象和按钮的大小,为了适当的演示按钮文本m_wndToolBar.GetToolBarCtrl().SetBitmapSize(CSize(16,16));m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(32,32));//设置按钮文本m_wndToolBar.SetButtonText(0,"新建");m_wndToolBar.SetButtonText(1,"打开");m_wndToolBar.SetButtonText(2,"保存");m_wndToolBar.SetButtonText(4,"剪切");m_wndToolBar.SetButtonText(5,"复制");m_wndToolBar.SetButtonText(6,"粘贴");m_wndToolBar.SetButtonText(8,"打印");m_wndToolBar.SetButtonText(10,"帮助");RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); // TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control在消息影射部分添加消息映射:ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)接收函数部分:afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );函数实现:一种BOOL CMainFrame::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult) {TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;UINT nID =pNMHDR->idFrom; //获取工具栏按钮IDint index = m_wndToolBar.GetToolBarCtrl().CommandToIndex(nID);//根据ID获取按钮索引 CString str;switch(index){case 0:pTTT->lpszText = "检测窗口";break;case 1:pTTT->lpszText = "分析窗口";break;case 2:pTTT->lpszText = "网络连接";break;case 3:pTTT->lpszText = "显示图像";break;case 4:pTTT->lpszText = "开始录像";break;case 5:pTTT->lpszText = "存入数据库";break;case 6:pTTT->lpszText = "读取数据库文件";break;case 7:pTTT->lpszText = "阀位分析查询";break;case 8:pTTT->lpszText = "报表打印";break;default:pTTT->lpszText = "什么东西?";break;}pTTT->hinst = AfxGetResourceHandle();return(TRUE);}另一种:BOOL CToolHintDlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult) {TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;UINT nID =pNMHDR->idFrom; //获取工具栏按钮IDint index = m_wndToolBar.GetToolBarCtrl().CommandToIndex(nID);//根据ID获取按钮索引 m_wndToolBar.GetButtonText(index,m_ToolText);//获取按钮文本pTTT->lpszText =m_ToolText.GetBuffer(0);//设置显示的提示信息pTTT->hinst = AfxGetResourceHandle();return(TRUE);}。
注:以下代码以一个名为CTest6Dlg的对话框类为例--------------------------------------------------------------------------------1. 在任务栏隐藏对话框ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);--------------------------------------------------------------------------------2. 使对话框为顶层窗口SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);--------------------------------------------------------------------------------3. 在运行时添加最大化,最小化按钮SetWindowLong(this->m_hWnd, GWL_ST YLE,GetWindowLong(this->m_hWnd, GWL_ST YLE) |WS_MINIM IZEBOX | WS_MAXIMIZEBOX);UpdateWindow();--------------------------------------------------------------------------------4. 使能对话框右上角关闭按钮在OnInitDialog中方法一:CMenu* menu = GetSystemMenu(FALSE);menu->Modify M enu(SC_CLOSE, MF_BYCOMMAND | M F_GRAYED );方法二:CMenu* menu = GetSystemMenu(FALSE);menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);--------------------------------------------------------------------------------5. 当对话框一部分在屏幕外时,显示全部对话框SendMessage(DM_REPOSITION);--------------------------------------------------------------------------------6. 改变鼠标外形添加WM_SETCURSOR 消息映射函数BOOL CTest6Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {SetCursor(AfxGetApp()->LoadStandardCursor(IDC_HELP));return 0;}--------------------------------------------------------------------------------7. 改变对话框背景色和文本颜色在CTest6App的InitInstance中添加SetDialogBkColor(RGB(255,0,0), RGB(0,255,0));--------------------------------------------------------------------------------8. 改变对话框caption上的图标导入自己的图标资源到工程中,把原来ID为IDR_MAINFRAME 的资源删除,把新的图标的ID命名为IDR_MAINFRAME --------------------------------------------------------------------------------9. 在主对话框显示前,显示一个login对话框BOOL CTest6App::InitInstance(){//...int nResponse;CLoginDlg loginDlg;nResponse = loginDlg.DoModal();if (nResponse == IDOK){}if (nResponse == IDCANCEL){return FALSE;}CTest6Dlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK ){}else if (nResponse == IDCANCEL){}return FALSE;}然后重载CLoginDlg对话框的哦OnOK(),在其中判断条件void CLoginDlg::OnOK(){if (条件满足)CDialog::OnOK();elseAfxMessageBox(_T("invalid password!"));}--------------------------------------------------------------------------------10. 在对话框中添加工具栏方法一:添加以下代码到OnInitDialog 中if ( !m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1) ){TRACE0("Failed to Create Dialog Toolbar\n");EndDialog(IDCANCEL);}CRect rcClientOld; // 久客户区RECTCRect rcClientNew; // 加入TOOLBAR后的CLIENT RECTGetClientRect(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 v alues in rcClientNew so we can do the rest of the Math.//重新计算RECT大小RepositionBars(AFX_IDW_CONT ROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);// All of the Child Windows (Controls) now need to be moved so the Tollbar does not cov er 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;GetWindow Rect(rcWindow); // 得到对话框RECTrcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // 修改对话框尺寸rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height();Mov eWindow(rcWindow,FALSE); // Redraw WindowRepositionBars(AFX_IDW_CONT ROLBAR_FIRST,AFX_IDW_CONT ROLBAR_LAST,0);方法二:/dialog/dlgtoolstatusbar.asp--------------------------------------------------------------------------------11.响应对话框的最大化、最小化、关闭、恢复事件方法一:添加WM_SYSCOMMAND 消息映射函数v oid CTest6Dlg::OnSysCommand(UINT nID, LPARAM lParam) {if ( (nID & 0xFFF0) == IDM_ABOUTBOX ){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{if ( nID == SC_MAXIMIZE ){AfxMessageBox(_T("最大化"));}else if ( nID == SC_MINIMIZE ){AfxMessageBox(_T("最小化"));}else if ( nID == SC_CLOSE ){AfxMessageBox(_T("关闭"));}CDialog::OnSysCommand(nID, lParam);}方法二:添加WM_SIZE 消息映射函数v oid CTest6Dlg::OnSize(UINT nT y pe, int cx, int cy){CDialog::OnSize(nT y pe, cx, cy);if ( nT y pe == SIZE_MAXIM IZED ){AfxMessageBox(_T("最大化"));}else if ( nT ype == SIZE_MINIMIZED ){AfxMessageBox(_T("最小化"));}else if ( nT ype == SIZE_RESTORED ){AfxMessageBox(_T("恢复"));}}--------------------------------------------------------------------------------12.代码实现窗口最小化,最大化,关闭PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE);PostMessage(WM_SYSCOMMAND, SC_CLOSE);--------------------------------------------------------------------------------13.按下ESC和ENTER键时禁止关闭对话框方法一:(1) 重载OnCancel和OnOk,屏蔽其中的CDialog::OnCancel()和CDialog::OnOk();(2) 添加以下代码v oid CTest6Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout; //if you have an about dialogdlgAbout.DoModal();}else if ((nID & 0xFFF0) == SC_CLOSE){//用户点击右上角"X"EndDialog(IDOK);}else{CDialog::OnSysCommand(nID, lParam);}}方法二:BOOL CTest6Dlg::PreTranslateMessage(MSG* pM sg){if ( pMsg->message == WM_KEYDOWN ){switch(pMsg->wParam){case VK_ESCAPE:return T RUE; //直接返回TRUEbreak;case VK_RET URN:return T RUE;break;}}return CDialog::PreTranslateMessage(pM sg);}方法三:Q122489:How to Disable Default Pushbutton Handling for MFC Dialog/kb/122489/en-us--------------------------------------------------------------------------------14.在对话框中处理键盘鼠标消息处理PreTranslateMessage消息以下代码示例只演示了键盘WM_KEYDOWN消息,你也可以处理鼠标消息,比如WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDOWN等。
VC++中添加工具栏和状态栏VC++中添加工具栏方法1、使用VC生成的工具栏通过VC资源窗口insert一个工具栏资源IDR_TOOLBAR1,并进行编辑为对话框类添加一个工具栏变量CToolBarm_T oolBar;在OnInitDialog()函数中添加如下代码,添加显示工具栏if(!m_T oolbar.CreateEx( this,TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE |CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS, CRect(4,4,0,0))||!m_Toolbar.LoadToolBar(IDR_TOOLBAR1) ){TRACE0("failedto create toolbar\n");returnFALSE;}m_T oolbar.ShowWindow(SW_SHOW);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST, 0);2、通过图像列表自定义工具栏通过VC资源窗口insert所需的ico文件,并分别命名为对话框类添加工具栏变量和图像列表变量CToolBarm_T oolBar;CImageListm_ImageList;在OnInitDialog()函数中添加如下代码,将图像列表与工具栏关联并进行显示//创建图像列表m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);//向图像列表中添加图标m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSET));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONQUERY));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONRECOR D));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONIMPORT ));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONEXPORT ));UINTarray[8];for(inti=0;i<8;i++) //初始化工具栏ID{if(i==2|| i==5)array[i]= ID_SEPARATOR; //第3、6个按钮为分隔条elsearray[i]= i+1001;}m_T oolBar.Create(this);m_T oolBar.SetButtons(array,8);//关联图像列表m_T oolBar.GetT oolBarCtrl().SetImageList(&m_ImageList);m_T oolBar.SetSizes(CSize(50,60),CSize(32,32));//设置按钮和图标的大小/*The sizeImage parameter must contain thesize, in pixels, of the images in the toolbar's bitmap.The dimensions in sizeButton must besufficient to hold the image plus 7 pixels extra in width and 6 pixels extra inheight.This function also sets the toolbar heightto fit the buttons.*/ //设置工具栏按钮的显示文本m_T oolBar.SetButtonText(0," 用户 ");m_T oolBar.SetButtonText(1," 设置 ");m_T oolBar.SetButtonText(3," 查询 ");m_T oolBar.SetButtonText(4," 记录 ");m_T oolBar.SetButtonText(6," 导入 ");m_T oolBar.SetButtonText(7," 导出 ");RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST,0);3、导入图片生成工具栏,并将工具栏与菜单栏对应项绑定通过VC资源窗口insert所需的ico文件,并分别命名,然后insert一个菜单资源IDR_MAINFRAME_MENU,并进行编辑为对话框类添加菜单栏变量、工具栏变量和图像列表变量CMenum_Menu;CToolBarm_T oolBar;CImageListm_ImageList;在OnInitDialog()函数中添加如下代码,将图像列表与工具栏关联,并将工具栏和对应菜单项ID进行关联,从而与菜单项共用处理函数m_Menu.LoadMenu(IDR_MAINFRAME_MENU);SetMenu(&m_Menu);TBBUTTONtbButton[ICONSUM] = {0};m_ImageList.Create(32,32, ILC_COLOR32 | ILC_MASK, 0, 0);m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON3));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON1));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON4));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON5));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON2));m_T oolBar.Create(WS_CHILD| WS_VISIBLE, CRect(0, 0, 0, 0), this, 0);m_T oolBar.SetImageList(&m_ImageList);for(inti=0; i< ICONSUM; i++){tbButton[i].dwData = NULL;tbButton[i].fsState = TBSTATE_ENABLED;tbButton[i].fsStyle = (BYTE)TBSTYLE_FLAT;tbButton[i].iBitmap = i;}tbButton[0].idCommand= ID_ATTENDANCE_RECORD;tbButton[1].idCommand= IDM_REQUEST_EMPLOYEE;tbButton[2].idCommand= IDM_PAYLIP;tbButton[3].idCommand= IDM_PORTFOLIO;tbButton[4].idCommand= ID_ABOUT;m_T oolBar.AddButtons(ICONSUM,tbButton);m_T oolBar.AutoSize();m_T oolBar.SetStyle(TBSTYLE_FLAT| CCS_TOP);注:若要把工具栏的按钮和菜单项相关联,也可将它们的ID设置为同一个ID来实现VC++中添加状态栏方法转自:/show_it/item/2a12a5dd72ef2517e1f46f20方法一:1.添加成员变量CStatusBarCtrl m_StatusBar;2.在OnInitDialog()中加入:m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRA W,CRect(0,0,0,0), this, 0);intstrPartDim[3]= {100, 200, -1}; //分割数量m_StatusBar.SetParts(3,strPartDim);//设置状态栏文本m_StatusBar.SetText("分栏一", 0, 0);m_StatusBar.SetText("分栏二", 1, 0);m_StatusBar.SetText("分栏三", 2, 0);//下面是在状态栏中加入图标m_StatusBar.SetIcon(1,SetIcon(AfxGetApp()->LoadIcon(IDR_ MAINFRAME),FALSE));//为第二个分栏中加的图标方法二:1.添加成员变量CStatusBar m_wndStatusBar;2.在OnInitDialog()中加入:static UINT indicators[] ={D_SEPARATOR, //status line indicatorID_INDICATOR_CAPS, //CAP lock indicator.ID_INDICATOR_NUM, //NUM lock indicator.ID_INDICATOR_SCRL, //SCRL lock indicator.};if(!m_wndStatusBar.Create(this)||!m_wndStatusBar.SetIndicat ors(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create statusbarn");return -1; // fail to create}UINT nID; //控制状态栏里面的分栏m_wndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NO BORDERS,100); //返回值存nID中m_wndStatusBar.SetPaneText(0,"就绪");m_wndStatusBar.SetPaneInfo(1,nID,SBPS_NORMAL,100);m_wndStatusBar.SetPaneText(1,"大写");m_wndStatusBar.SetPaneInfo(2,nID,SBPS_POPOUT,100);m_wndStatusBar.SetPaneText(2,"数字");// SetPaneInfo()函数的第三个参数的可选项如下:// The following indicator styles are supported:// SBPS_NOBORDERS No 3-D border around the pane.// SBPS_POPOUT Reverse border so that text "pops out."// SBPS_DISABLED Do not draw text.// SBPS_STRETCH Stretch pane to fill unused space. Only one pane per status bar can have thisstyle.// SBPS_NORMAL No stretch, borders, or pop-out.//----------------让这个状态栏最终显示在对话框中------------- RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CO NTROLBAR_LAST,0);。
VC对话框程序添加目录菜单、工具条和状态栏为<对话框>添加工具条和状态栏前,先说说添加目录菜单栏;1,在Insert下拉菜单中选择Resorce,新建一个MENU,2,在CDialog::OnInitDialog();后面添加代码:CMenu menu;menu.LoadMenu(IDR_MENU1); // 红色部分为你新建MENU的ID索引SetMenu(&menu);为对话框程序添加工具条和状态栏摘要:本文介绍了在对话框程序基础上通过程序控制来动态添加工具条和状态条的实现过程和方法。
一、引言对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。
虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。
虽然在Visual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但Visual C++ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。
因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。
二、工具条的实现过程MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC 对其做了过多的封装,以至无法了解内部的一些核心技术。
因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI 应用程序接口来实现的。
在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。
但MFC也为其留有接口:CWnd窗口类提供的GetSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。
Visual C++向对话框类中添加工具栏默认分类2010-07-15 16:26:08 阅读88 评论0 字号:大中小摘要:Visual C++向对话框类中添加工具栏在文档/视图结构中,添加工具栏是非常方便的,但在基于对话框的应用程序中,就稍稍复杂一点了。
通常情况下,向对话框中添加工具栏有两种方法。
向对话框类中添加工具栏在文档/视图结构中,添加工具栏是非常方便的,但在基于对话框的应用程序中,就稍稍复杂一点了。
通常情况下,向对话框中添加工具栏有两种方法。
第一种方法:特点:①使用CToolBar类,可以装载工具栏资源。
②代码编写简单方便。
缺点:只支持16位图标。
步骤:(1)通过AppWizard新建一个基于对话框的项目Main。
(2)在对话框资源中单击鼠标右键,在弹出的快捷菜单上选择“Properties”菜单项,打开“Dialog Properties”对话框。
(3)在“Dialog Properties”对话框中将“Caption”文本框的内容改为“在对话框中添加工具栏(16位图标)”。
(4)通过工具栏设计器创建一个工具栏资源ID_TOOLBAR1,并画好各工具按钮,如图1所示。
图1 工具栏资源设计结果(5)在对话框类CMain中添加一个成员变量CToolBar m_ToolBar。
(6)在对话框的OnInitDialog()成员函数中添入以下代码:BOOL CDMain::OnInitDialog(){CDialog::OnInitDialog();if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FL YBY | CBRS_SIZE_DYNAMIC) ||!m_ToolBar.LoadToolBar(IDR_TOOLBAR)){TRACE0("Failed to create toolbar\n");return -1; // fail to create}RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); m_ToolBar.ShowWindow(SW_SHOW);// return true;}(7)按Ctrl+F5运行程序,结果如图2所示。
VC++对话框添加工具栏
1、添加工具栏资源ID为IDR_TOOLBAR
2、在对话框的类定义中加:
CToolBar m_ToolBar;
3、在OnInitDialog中或其它合适的消息响应中加如下代码:(函数可查看MSDN)
m_ToolBar.Create(this); //创建工具栏
m_ToolBar.LoadToolBar(IDR_TOOLBAR);//加载工具栏
//得出控件条大小.
CRect rect;
CRect rectNow;
GetClientRect(rect);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rect Now);
//放置控件条位置
CPoint ptOffset(rectNow.left-rect.left,rectNow.top-rect.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);
rcWindow.right+=rect.Width()-rectNow.Width();
rcWindow.bottom+=rect.Height()-rectNow.Height();
MoveWindow(rcWindow, FALSE);
//控件条定位
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
//对框居中
CenterWindow();
4、手工添加处理函数
afx_msg void OnBtnXXX();//消息响应函数声明
ON_COMMAND(ID_BTN_XXX/*工具按钮ID*/,OnBtnXXX/*函数名*/)//消息映射
void CXXXDlg::OnBtnXXX(){}//消息处理函数
//方法二
在CDIALOGTOOLBARDL类声明中添加成员变量
CToolBar m_wndtoolbar:
在初始化对话框中添加BOOL CMy4Dlg::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("faled");
return FALSE;
}
m_wndtoolbar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLB AR_LAST,0);
利用CLASSWIZARD添加消息响应函数(每一个图标就是一个按钮,有ID)。