VC++对话框添加工具栏
VC实现工具栏
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);}。
VC对话框的工具栏添加图标
m_toolbar.SetSizes(CSize(105,60),CSize(28,40));//设置按钮大小
m_toolbar.EnableToolTips(TRUE);//激活提示信息
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE;
}
return FALSE;
}
5.在字串表中创建相应ID的字串;
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);
//控件条定位
// if there is a top level routing frame then let it handle the message
VC++实现对话框工程中添加菜单
stLogFont.lfFaceName, dwFontColor, stCF.iPointSize); MessageBox(szBuffer, "执行结果", MB_OK); } -----------------------------------------------------------------------------(5)颜色 -----------------------------------------------------------------------------源代码 CHOOSECOLOR stCC; COLORREF dwBackColor = RGB(0, 0, 0); COLORREF dwCustColors[16];
1.1 获取文件路径名: char szFileName[MAX_PATH] = "";//必须初始化
stOF.lpstrFile = szFileName; stOF.nMaxFile = MAX_PATH;// 必须和上面一起
1.2 标志: OFN_ALLOWMULTISELECT –允许选择多个文件名
wsprintf(szBuffer, "您选择的打印机:%s", GlobalLock(stPS.hDevMode)); MessageBox(szBuffer,"执行结果", MB_OK); }
-----------------------------------------------------------------------------(4)字体 -----------------------------------------------------------------------------源代码
VC中对话框使用技巧集合
注:以下代码以一个名为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等。
Visual C++基础教程课件:菜单、工具栏和状态栏
菜单、工具栏和状态栏
switch(m_nShape) { case 0:
菜单、工具栏和状态栏
添加菜单命令处理函数可以利用类向导ClassWizard。下 面给例11.1的MyDraw添加必要的代码和菜单命令处理函数, 完成应用程序的功能。
在视图类CMyDrawView的定义中添加如下的数据成员:
protected:
int m_nShape;
COLORREF m_crColor; 在视图类CMyDrawView的构造函数中对数据成员进行初 始化:
下面以实例来说明如何利用菜单编辑器创建菜单。
菜单、工具栏和状态栏
【例11.1】 编写一个单文档界面应用程序,通过菜单 选择在视图窗口中画不同的图形和设置图形的颜色。
程序的创建过程如下: (1) 利用MFC AppWizard[exe]创建SDI应用程序,项目名 设置为MyDraw。 (2) 单击项目工作区窗口下的“ResourceView”标签,打 开资源列表。展开“Menu”,双击Menu下的 IDR_MAINFRAME即可打开菜单编辑器,如图11-2所示。
void CMyDrawView::OnDrawEllipse()
{
m_nShape=0; Invalidate(); //产生WM_PAINT消息更新视图
}
菜单、工具栏和状态栏
同样为其它菜单项添加WM_COMMAND消息处理函 数如下:
void CMyDrawView::OnDrawTriangle() {
在基于MFC框架的应用程序中,可以在任何地方处理命 令消息WM_COMMAND。实际上,框架窗口是大多数命令 消息的接收者,但命令消息可以在视图类、文档类甚至在应 用程序类中被处理,只要在该类的消息映射表中添加要处理 的消息的映射项即可。从CCmdTaret派生出来的所有类都可 以处理命令消息。
vc菜单 工具栏 应用
4.1 菜单
创建标记菜单的步骤
创建单文档应用程序CheckMenu 创建单文档应用程序 双击CMainFrame类的 类的OnCreate()函数,添加代码: 函数, 双击 类的 函数 添加代码: GetMenu()->GetSubMenu() ->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED) 或者: 或者: GetMenu()->GetSubMenu() ->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED)
在项目工作区窗口的ResourceView(资源视图)页面 在项目工作区窗口的 (资源视图) 展开中Accelerator(加速键)的资源项,双击 中,展开中 (加速键)的资源项, IDR_MAINFRAME.
4.1 菜单
建立一个新的加速键时,只要双击加速键列表的最下端的空行,弹出如图 所示的 建立一个新的加速键时,只要双击加速键列表的最下端的空行,弹出如图4.8所示的 属性” “Accel 属性”(Accel Properties)对话框,其中可设置的属性如表 所示 )对话框,其中可设置的属性如表4.2所示
第4章 菜单、工具栏 章 菜单、 和状态栏
Contents
1 2 3 4
菜单 工具栏 状态栏 综合应用
4.1 菜单
菜单的创建
创建单文档应用程序Test 创建单文档应用程序 资源页面下,添加菜单Test,IDM_TEST(去掉 资源页面下,添加菜单 , (去掉pop_up) ) View->class Wizard下,为IDM_TEST添加 添加COMMAND 下 添加 的消息映射函数OnTest(),代码如下: 的消息映射函数 代码如下: 代码如下
VC++中添加工具栏和状态栏
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对话框程序添加目录菜单、工具条和状态栏
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++向对话框类中添加工具栏
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对话框的工具栏添加图标-推荐下载
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{ // idFrom is actually the HWND of the tool nID = ::GetDlgCtrlID((HWND)nID);
VC 对话框的工具栏添加图标,文字,提示信息
(2: MFC 编程学习
杂谈
OnInitDialog()中
//先导入图标文件,假设有 5 个工具栏按钮 m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);//创建按图像列表 m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_Find));//将图像与列表一一关联 m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON_Look)); ......
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
vc_5菜单和工具条
if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|C BRS_GRIPPER|CBRS_FLYBY|CBRS_SIZE_DY NAMIC) ||!m_wndToolBar.LoadToolBar(IDR_TOOLBAR1)) {TRACE0("Failed to create toolbar\n"); return -1; } RepositionBars(AFX_IDW_CONTROLBAR_FIR ST,AFX_IDW_CONTROLBAR_LAST,0);
工具条执行的功能往往已由相应的菜单实现 了。因此,一般情况下,没有必要为工具栏 设置消息响应函数,而只需为工具条上的按 钮指定正确的ID(按钮要响应函数的菜单调用 者的ID)来保证响应函数的正确调用。
1.创建工具条。 Resource View->右击顶层文件夹->Insert>Toolbar->new 2. 编辑工具栏按钮
void CMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu menu; menu.LoadMenu(IDR_QUICKMENU); CMenu *pquickmenu= menu.GetSubMenu(0); pquickmenu->TrackPopupMenu (TPM_LEFTALIGN|TPM_RIGHTBUTTON,poi nt.x,point.y,pWnd); }
1.在工程中插入新的菜单
在Workspace的“Resource View”中右击顶层文件夹, 在激活的快捷菜单中选择 “Insert”选项,在弹出对 话框中选“Menu”,单击New 按钮。
将已有的VC++设计好的对话框类(不是对话框工程)加入BCGP工程的浮动停靠工具栏的方法
在BCGP工程中添加一个对话框,并已创建对应的对话框类和成员变量、成员函数。
此步完成后,还要修改资源中的对话框的如下属性:Style为Child;Border为None;勾选Clip siblings和Clip children。
再进入如下步骤,可将它加入BCGP工程的浮动停靠工具栏,并且容易控制和使用。
1、打开CXXDlg.h头文件,定位到对话框类定义部分:class CMyDlg : public CDialog将CDialog修改为CBCGPDialogBar。
如果有OnInitDialog()函数,需要修改其定义为afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM);如果有DestroyWindow()等对话框销毁函数,需要整合修改为析构函数,如:// Implementationpublic:virtual ~CMyDlg();2、打开CXXDlg.cpp头文件,定位到构造函数的开头,如:CMyDlg:: CMyDlg (CWnd* pParent /*=NULL*/): CDialog(CYttypeDlg::IDD, pParent)需要修改为:CMyDlg:: CMyDlg (CWnd* pParent /*=NULL*/): CBCGPDialogBar()并在其中加入:EnableVisualManagerStyle();EnableLayout();然后把该文件中所有的CDialog全部查找替换CBCGPDialogBar。
3、如果原来有OnInitDialog()函数,需要修改消息的映射部分。
在BEGIN_MESSAGE_MAP(CMyDlg, CBCGPDialogBar)与END_MESSAGE_MAP()之间,增加HandleInitDialog ()消息的映射为:ON_MESSAGE(WM_INITDIALOG, HandleInitDialog)然后修改OnInitDialog()函数为:LRESULT CMyDlgBar::HandleInitDialog(WPARAM wParam, LPARAM lParam)在函数开头处将CBCGPDialogBar::OnInitDialog();修改为:CBCGPDialogBar::HandleInitDialog(wParam, lParam);4、如果原来有DestroyWindow()等对话框销毁函数,需要先整合到一个函数,如DestroyWindow()中,然后修改该函数为:CMyDlg::~ CMyDlg ()然后删除函数中的CBCGPDialogBar::OnDestroy(); 一行。
VC++对话框的应用程序的菜单操作
VC++对话框的应用程序的菜单操作对话框的应用程序的菜单操作一、课程设计的功能:在一个基于对话框的应用程序中增加一个菜单资源,并把它连接到对话框窗口中,运行时显示出来。
完成以后的程序其运行界面如图1所示。
应用程序的标题为Application of Dialog based。
其主窗口中有三个按钮,它们分别为“时间”、“显示”和“退出”,以及两个“文件”和“帮助”的菜单栏。
单击“文件”菜单,出现一个下拉菜单,选择“时间”菜单,可以看到显示当前系统时间的消息框;单击菜单中的“显示”选项,则弹出一个显示基本信息的消息框;选择“退出”菜单,退出本应用程序。
单击相应的按钮完成同样的效果。
若单击“帮助”菜单,出现一个“关于应用程序”菜单项。
图1 Ex4_2程序主窗口二、课程的设计步骤1使用AppWizard创建一个对话框MFC应用程序(2)在Visual C++主菜单栏中选择File菜单中的New选项,打开New对话框。
(3)选择Project标签页,并在该标签页中选择MFC AppWizard应用程序向导,在Project name编辑框中输入工程文件名为Ex4_2,单击“OK”按钮。
(4)在MFC AppWizard-Step1对话框中,选择Dialog based选项,在MFCAppWizard-Step 2 of 4对话框中,在Please enter a title for your dialog 编辑框中给应用程序主窗口标题命名为“Application of Dialog based”。
单击“Finish”完成应用程序框架文件的创建。
2编辑对话框(1)选择项目工作区的ResourceView面板,(2) 切换到资源视图。
展开Dialog对话框资源类型。
双击IDD_EX4_2_DIALOG菜单资(3) 将弹出对话框编辑窗口和一个控件工具栏面板如下图所示。
图2 初始对话框编辑窗口控件工具栏面板列出了VC中所可以建立的控件类型,用户只要把鼠标停在某个控件标识上,可显示该控件的类型提示。
vc的菜单,工具栏
vc的菜单,⼯具栏⾸先,MFC会⾃动⽣成⼀些菜单,我们也可以在resource view中添加菜单。
点击菜单栏属性--〉左上⾓校园最图形,可以将属性页显⽰。
不会随着菜单项变动丢失。
ID号变灰的栏是不可以编辑的。
是弹出的POPUP菜单。
它不能被⽤来做响应。
⼤写字母标⽰资源。
IDI IDC IDM分别表⽰不同的类型资源。
⼀个菜单项可以由CMAINFRAM CXXXVIEW CXXApp CXXDOC view类先对其响应,接着doc类对其进⾏响应,MAINFRAM第三个对其进⾏响应,第四个响应的APP类对其进⾏响应。
Afxmessagebox框架函数,可以响应⾮WND派⽣类的弹出的提⽰,⽽wnd派⽣的可以直接⽤MessageBox函数。
消息包括三类:WM_XXX标准消息,从cwnd派⽣的类可以接收也可以接受命令消息,WM_COMMANed命令消息(通过ID号标识识别,由cmdtarget派⽣的类可以接受,⽐如说⽂档类,CEIDTview类),第三类通知消息,有cmdtarget派⽣的类可以接收。
APP和Doc类从CMDTARGET派⽣,所以不能接收标准消息。
命令消息,头⽂件消息影射中添加原形,原⽂件中添加ON_COMMND宏完成影射,还有命令函数实现。
命令函数由ONCOMMAND来处理,通知消息由ONNOTIFY来实现。
命令消息到来时⾸先到达CMAINFRAM然后到送达CVIEW 来处理,根据命令消息影射来处理,如果没有处理函数,交给DOC类,如果还没有处理函数,交还给VIEW类,------〉交还CMAINFRAM 类,如果他也没有处理函数,交给APP类来处理。
标记菜单(打对购得):在CMAINFRAM中ONCREATE中创建。
菜单属于框架窗⼝,获取菜单栏指针的⽅法为GetMenu,它返回⼀个返回CMenu的指针。
但是其指向的对象是不⼀样的,⼀个为菜单,⼀个为⼦菜单。
CMenu中的checkmenuitem⽅法可以设置标记。
VC++之对话框中添加工具栏
VC++之对话框中添加工具栏1、添加工具栏资源ID为IDR_TOOLBAR2、在对话框的类定义中加:CToolBar m_ToolBar;3、在OnInitDialog中或其它合适的消息响应中加如下代码:(函数可查看MSDN)01 m_ToolBar.Create(this); //创建工具栏02 m_ToolBar.LoadToolBar(IDR_TOOLBAR);//加载工具栏0304 //得出控件条大小.05 CRect rect;06 CRect rectNow;7GetClientRect(rect);0 8 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rectNow);0910 //放置控件条位置11 CPoint ptOffset(rectNow.left-rect.left,rectNow.top-rect.top);1213 CRect rcChild;14 CWnd* pwndChild=GetWindow(GW_CHILD);15 while (pwndChild)16 {17 pwndChild->GetWindowRect(rcChild);18 ScreenToClient(rcChild);19 rcChild.OffsetRect(ptOffset);20 pwndChild->MoveWindow(rcChild,FALSE);21 pwndChild=pwndChild->GetNextWindow();22 }2324 //调整对话框尺寸25 CRect rcWindow;26 GetWindowRect(rcWindow);27 rcWindow.right+=rect.Width()-rectNow.Width();28 rcWindow.bottom+=rect.Height()-rectNow.Height();29 MoveWindow(rcWindow, FALSE);3031//控件条定位3 2RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, 0);3334 //对框居中35 CenterWindow();4、手工添加处理函数1 afx_msg void OnBtnXXX();//消息响应函数声明2 ON_COMMAND(ID_BTN_XXX/*工具按钮ID*/,OnBtnXXX/*函数名*/)//消息映射3 void CXXXDlg::OnBtnXXX(){}//消息处理函数。
VC对话框中添加状态栏的方法
VC++对话框中添加状态栏的方法方法一:1.添加成员变量CStatusBarCtrl m_StatusBar;2.在OnInitDialog()中加入:m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW, CRect(0,0,0,0), this, 0); int strPartDim[3]= {100, 200, -1}; //分割数量/////这里要说明一下,分割的大小是这样决定的,如上面分的3个窗口,第一大小为100,第二个也为100(即200-100),第三个是状态栏的整个大小减去200.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[] ={ID_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.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create status barn");return -1; // fail to create}UINT nID; //控制状态栏里面的分栏m_wndStatusBar.SetPaneInfo(0,nID,SBPS_STRETCH|SBPS_NOBORDERS,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 this style.// SBPS_NORMAL No stretch, borders, or pop-out.//----------------让这个状态栏最终显示在对话框中-------------RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);。
VC++的菜单与工具栏使用方法解析
{ CClientDC dc(this); CPen newpen, *oldpen; newpen.CreatePen(PS_SOLID,2,RGB(255,255,0)); oldpen=dc.SelectObject(&newpen);
CBrush* pNewBrush, * pOldBrush; pNewBrush=new CBrush; pNewBrush->CreateSolidBrush(m_crbk); pOldBrush=dc.SelectObject(pNewBrush); dc.Rectangle(40,20,200,50); m_rectangle =FALSE; m_ellipse =TRUE; dc.SelectObject(pOldBrush); dc.SelectObject(oldpen); delete pNewBrush; }
用户选中了菜单项会产生WM_COMMAND消息 MFC的框架窗口类要确保每一个菜单项都有 WM_COMMAND消息的处理函数,对缺少处理函数 的菜单项,MFC使其变灰。
消息映射ON_COMMAND项采用以下形式: ON_COMMAND(MenuID,ClassMethod) MenuID是菜单项的标识符,ClassMethod是处
尽管任何由CCmdTarget派生的类对象都能接受菜单消息, 但并不是所有这类对象都可以同时接收到菜单消息,菜单消 息是按照一定的路径传送的,下表列出了当MFC发送命令消 息给非文档/视窗结构的应用,单文档应用以及多文档应用时, 查找消息映射表的次序。
在VC对话框应用程序窗口添加状态栏的方法
在VC对话框应用程序窗口添加状态栏的方法
车光宏
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2009(000)023
【摘要】VC的应用程序向导不在对话框类型的应用程序主窗口中自动添加状态栏,但程序员可以通过编码来为对话框类型的应用程序主窗口添加状态栏.在此介绍两种具体的实现方法:即使用MFC类库中提供的CStatusBar类实现的方法和使用Win32 ApI函数实现的方法.
【总页数】3页(P28-30)
【作者】车光宏
【作者单位】(Missing)
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于VC++的对话框编程中UpdateData函数的应用 [J], 陈致远;骆刚
2.VC++6.0对话框资源复用的方法 [J], 陈斌
3.在VC 6.0对话框应用程序中实现打印和打印预览 [J], 谌章义;李华贵;颜廷秦
4.VC++6.0在对话框最小化与提示条设计中的应用分析 [J], 汪旭冉
5.VC++语言中增强对话框功能的方法 [J], 闵玉瑾;张法全
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)。