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()则可以获取当前应用程序的实例句柄。
- 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)。