VC++对话框添加状态栏

合集下载

VC中对话框使用技巧集合

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++基础教程课件:菜单、工具栏和状态栏

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菜单 工具栏 应用

vc菜单 工具栏 应用
nCheck的取值决定了 的取值决定了nIDCheckItem的取值 的取值决定了 的取值 若nCheck 为MF_BYCOMMAND,则为对应菜单项的 号 ,则为对应菜单项的ID号 若nCheck 为MF_BYPOSITION,则为对应菜单项的索引号 ,
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++中添加工具栏和状态栏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对话框中添加状态栏的方法

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++控件使用——状态栏

VC++控件使用——状态栏

VC++控件使用——状态栏一、创建状态栏/1.创建一个基于对话框的应用程序2.在对话框头文件中声明一个CStatusBar类变量m_StatusBar3.2程序3.1在对话框的OnInitDialog函数中创建工具栏UINT array[4];for(int i=0;i<4;i++){array[i]=1001+i;}m_StatusBar.Create(this);m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT));for(int n=0;n<4;n++){4.成功运行m_StatusBar.SetPaneInfo(n,array[n],0,100);}CTime time=CTime::GetCurrentTime();m_StatusBar.SetPaneText(0,"当前用户");m_StatusBar.SetPaneText(1,"TM");m_StatusBar.SetPaneText(2,"当前日期:");m_StatusBar.SetPaneText(3,time.Format("%Y-%m-%d"));RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);二、在状态栏中显示控件1.创建一个基于对话框的应用程序2.在对话框头文件中声明一个CStatusBar 类变量m_StatusBar3.控件菜单调出来;在工具栏空白处右击,选择控件4.利用控件工具栏创建进度条,并右击点击属性查看ID5.在菜单栏-》查看中点击建立类向导,在Member Variables 关联变量m_Progress 6.2程序UINT array[4];for(int i=0;i<4;i++){array[i]=1001+i;}m_StatusBar.Create(this);m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT));for(int n=0;n<4;n++){m_StatusBar.SetPaneInfo(n,array[n],0,90); } 6.1在对话框的OnInitDialog 函数中创建工具栏CTime time=CTime::GetCurrentTime();m_StatusBar.SetPaneText(0,"当前用户");m_StatusBar.SetPaneText(1,"TM");m_StatusBar.SetPaneText(2,"当前状态:");RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);RECT m_rect;m_StatusBar.GetItemRect(3,&m_rect);m_Progress.SetParent(&m_StatusBar);m_Progress.MoveWindow(&m_rect);m_Progress.ShowWindow(SW_SHOW);m_Progress.SetRange(0,100);m_Progress.SetPos(80);7.程序运行成功。

VC对话框程序添加目录菜单、工具条和状态栏

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

VC内部培训资料——第6章 菜单、工具栏和状态栏

VC内部培训资料——第6章 菜单、工具栏和状态栏

第六章菜单、工具栏和状态栏菜单、工具栏和状态栏是组成Windows图形界面的三个主要元素。

其中菜单、工具栏提供了用户操作应用程序的命令界面;状态栏提供了一个输出区域,用来显示当前程序运行的状态和数据变化等等。

本章将详细的介绍菜单、工具栏和状态栏的使用方法。

6.1 菜单大多数的Windows应用程序都提供菜单作为用户与应用程序之间传递命令的一个特殊的途径。

利用菜单可以不用将大量的命令按钮摆放在窗口上。

既节省空间又使用方便。

本节将主要讲述菜单的种类,菜单的设计与创建,及菜单的消息处理等等。

6.1.1 菜单介绍在众多的应用程序当中,我们最常见到的菜单有下拉式菜单、级联菜单和快捷方式菜单。

下拉式菜单一般出现在应用程序窗口的顶部,分类的类别排成一行,和某个类别相关的所有功能排在那个类别的下面,如果选中某个类别时,其下就会拉出菜单,该菜单中有一系列具有相关功能的菜单项可供选择。

级联菜单是下拉菜单的一个扩展。

如果某个菜单项的右边有一个向右的黑三角符号,那么这个菜单项其实就是一个级联菜单。

级联菜单带有另一个子菜单,子菜单一般显示在所属菜单项的右边。

这个子菜单和下拉式菜单相似,有一系列菜单项可供选择。

需要注意的是,请读者一定要区别弹出式菜单和菜单项。

一般来说,把单击后会出现下拉子菜单的菜单称为弹出式菜单,而把其他菜单叫菜单项。

级联菜单也是弹出式菜单,它右边出现的子菜单中的各个小菜单也叫菜单项。

第三种菜单风格是可以通过在应用程序区域中单击鼠标右键调出的一种很方便的菜单,叫快捷菜单或弹出式菜单。

由于该菜单的菜单项内容依赖于被选中的对象或光标、鼠标在工作区域内所指的位置,因此该种菜单也称为上下文菜单。

一般情况下,当我们新建好一个MFC应用程序时,AppWizard都会为我们生成一个常用的菜单。

单文档应用程序会自动生成标识符为IDR_MAINFRAME的菜单资源,而多文档应用程序自动生成标识符为IDR_MAINFRAME和IDR_xxxTYPE的菜单资源,其中xxx为你的工程名。

Visual C++向对话框类中添加工具栏

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所示。

如何实现C++对话框加入状态栏呢?

如何实现C++对话框加入状态栏呢?

m_bar.Create(this); //创建状态栏 m_bar.SetIndicators(indicators,1); //设置状态栏中窗格个数 CRect rect; GetClientRect(&amp;rect); m_bar.SetPaneInfo(0,ID_INDICATOR_NISH, SBPS_NORMAL,rect.Width());//大小设置 m_bar.GetStatusBarCtrl().SetBkColor(RGB(255,180,180));//设置状态栏颜色 二、实例---制作一个显示鼠标在对话框中坐标的状态栏。 按照上述 4 个步骤生成状态栏,然后用类向导生成 OnMouseMove 函数。 在函数中添加以下代码: CString s; s.Format(\”X=%d Y=%d\”,point.x,point.y); m_bar.SetPaneText(0,s);
如何实现 C++对话框加入状态栏呢?
C++对话框加入状态栏的实现方法相信很多新手还不错,自学编程网针 对的是大部分自学编程的爱好者,实现起来很简单,大家看下面的步骤。 一、加载方法 步骤 1.在 resourses 中把 ID_INDICATOR_NISH 加到 symbol 里去,同样的 加到 string table 里去 步骤 2.在你的 Dialog 类里面加个 CStatusBar m_bar; 步骤 3.在 CPP 文件开头加上 static UINT BASED_CODE indicators[] = { ID_INDICATOR_NISH, }; 步骤 4.OnInitDialog 里面加上
OK!显示鼠标坐标状态栏的对话框就实现了:) 以上就是我们给大家介绍的 C++对话框加入状态栏的方法了

在VC对话框应用程序窗口添加状态栏的方法

在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], 闵玉瑾;张法全
因版权原因,仅展示原文概要,查看原文内容请购买。

将已有的VC++设计好的对话框类(不是对话框工程)加入BCGP工程的浮动停靠工具栏的方法

将已有的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++之对话框中添加工具栏

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随笔工具栏和状态栏

VC随笔工具栏和状态栏工具栏:创建一个工具栏的步骤:1、插入新的工具栏资源2、在框架主窗口类中声明一个工具栏类的对象3、在主框架窗口类的OnCreate函数中产生工具栏窗口,并将工具栏资源装入4、停靠工具栏在主框架窗口上下面就根据以上步骤来为2DCAD程序添加一个新的工具栏,如下:1、在ResourceView中添加一个ID为IDR_GRAPHTOOL的工具栏2、打开MainFrm.h文件,在主框架窗口类CMainFrame中声明一个新的CToolBar类的对象,简单的方法是仿制AppWizard在程序中自动加入的m_wndToolBar对象代码//产生图形工具栏CToolBar m_newToolBar;3、在主框架窗口类CMainFrame的OnCreate成员函数中,(1)调用CToolBar的成员函数CreateEx产生工具栏窗口,(2)然后调用CToolBar的成员函数LoadToolBar将工具栏资源IDR_GRAPHTOOL加载到新声明的工具栏对象m_newToolBar中//创建新的工具栏资源窗口if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FL YBY | CBRS_SIZE_DYNAMIC) ||!m_newToolBar.LoadToolBar(IDR_GRAPHTOOL))//加载工具栏资源IDR_GRAPHTOOL{TRACE0("Failed to create toolbar\n");return -1; //如果创建失败,返回-1}4、在主框架窗口类的OnCreate函数中,(1)调用CToolBar的成员函数EnableDocking使工具栏窗口可以停靠,(2)调用CMainFrame类的成员函数DockControlBar把工具栏停靠在主框架窗口中m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);//使工具栏可停靠DockControlBar(&m_newToolBar);//停靠新工具栏在主框架窗口上注意:使用“复制—修改”的方式,仿制AppWizard在程序中自动加入的m_wndToolBar对象代码,稍微修改一下就容易创建出新的工具栏设置工具栏标题:在框架窗口CMainFrame类的OnCreate成员函数中设置工具栏的标题m_newToolBar.SetWindowText("Graph Tools");//设置绘图工具栏标题m_wndToolBar.SetWindowText("标准");//设置默认工具栏标题为绘图工具栏添加显示/隐藏功能的步骤:1、添加新的菜单项在【查看】菜单下新增加一个菜单项【绘图工具栏】,ID为ID_VIEW_GRAPHTOOL2、添加菜单项的命令处理消息使用ClassWizard为新增加的ID_VIEW_GRAPHTOOL菜单项添加命令消息处理函数,注意一定要添加到框架窗口类CMainFrame中,修改代码如下:void CMainFrame::OnViewGraphtool(){// TODO: Add your command handler code hereShowControlBar(&m_newToolBar, !m_newToolBar.IsWindowVisible(), FALSE);}3、添加更新用户界面消息处理使用ClassWizard在框架窗口类CMainFrame中添加菜单项的更新用户界面消息处理函数,修改代码如下:void CMainFrame::OnUpdateViewGraphtool(CCmdUI* pCmdUI){// TODO: Add your command update UI handler code here//根据工具栏的显示状态设置菜单项是否有选中标志pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());}状态栏:状态栏的编程工作主要集中在设置状态栏窗格上修改状态栏窗格的方法:打开MainFrm.cpp文件,在文件的开始部分可以发现这样的代码:static UINT indicators[] ={ID_SEPARATOR, // status line indicatorID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};指示器数组indicators说明了状态栏窗格的数量以及意义,第一项一般为ID_SEPARATOR(显示一个提示行窗格),后面三项都是字符串ID,用户可以在String Table字符串资源中找到这三个字符串。

dialog添加菜单状态栏

dialog添加菜单状态栏

1,添加菜单有多种方法(1:在resource View中选中对话框属性的 menu 属性(2:CMenu m_Menu;m_Menu.LoadMenu(IDR_MAIN_MENU);SetMenu(&m_Menu);取消菜单 SetMenu(NULL);2,添加状态栏在头文件添加 /** 状态栏*/CStatusBar m_wndStatusBar;。

CPP文件中添加/** 状态栏*/if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/s izeof(UINT))){TRACE0("Failed to create status bar\n");return -1; // fail to create}3.WM_MENUSELECT消息这样手动添加的状态栏,无法接收WM_MENUSELECT消息,所以我们要自己添加ON_WM_MENUSELECT()响应的消息函数/*** 菜单栏选择*/void CFilePlayerDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSystemMenu){CString sFileName;if(nItemID == AFX_IDS_IDLEMESSAGE){sFileName = L"就绪";SendMessage(WM_SETMESSAGESTRING, (WPARAM)0,(LPARAM)(LPCTSTR)sFileName);return ;}if(nFlags & MF_SEPARATOR)return ;if(nFlags & (MF_SYSMENU | MF_POPUP))return ;CString strStatusText;strStatusText.LoadString( nItemID);m_wndStatusBar.SetPaneText(0, strStatusText);//// SendMessage(WM_SETMESSAGESTRING, (WPARAM)0,(LPARAM)(LPCTSTR)strStatusText);return ;}这样就获得了菜单的提示内容,m_wndStatusBar.SetPaneText(0, strStatusText); //将菜单提示显示在状态栏第一个窗格。

VC语言程序设计第4次实验_菜单、工具栏和状态栏

VC语言程序设计第4次实验_菜单、工具栏和状态栏
(6)保留默认的ID号IDC_CURSORI,用图形编辑器绘制光标图形,指定光标热点位置为(15,15)设计的光标如图T12.4所示。
5.工具按钮的更新
工具按钮的更新有如下步骤。
(1)为CMainFrame类添加一个BOOL型的成员变量m_bIsTest,在CMainFrame类构造函数中将m_bIsTest的初值设为FALSE
return TRUE;
}
(5)编译运行,看看主框架窗口的大小是否为屏幕的1/4大小,且移动到屏幕的右上角。
3.添加并设计一个工具按钮
添加并设计一个工具按钮的具体步骤如下。
(1)将项目工作区窗口切换到ResourceView页面,双击“Toolbar”项中的IDR_MAINFRAME,打开工具栏资源。
(2)在字符串列表的最后一行的空项上双击鼠标左键,弹出一个对话框,在该对话框中,指定一个字符串标识符ID_TEST_PANE,设置字符串值为“你在(1024,1024)处双击鼠标”,注意该字符串的字符个数将决定添加的状态栏窗口的大小。添加一个字符串资源的结果如图T12.5所示。
(3)关闭字符串属性对话框。
BOOL CmainFrame::onSetCursor(CWnd*pWnd,UINT nHitTest,UINT message)
{
BOOL bRes=CframeWnd::OnSetCursor(pWnd,nHitTest,message);
if(nHitTest==HTCLENT)&&(m_bIsTest))
Str.Format(“你在(%b,%d)处双击鼠标,”point..x,point.y);//格式化文本
else
Str.EmptyO;//为空字符

VC++ 第2章 菜单、工具栏和状态栏的设计

VC++ 第2章 菜单、工具栏和状态栏的设计

第2章菜单、工具栏和状态栏的设计在Windows应用程序中,菜单、工具栏、状态栏等内容都是不可缺少的界面元素。

菜单是一系列可视的命令列表,用户能够选中其中的菜单项(命令)并执行相应任务。

工具栏提供图形按钮,实现快捷操作,用户可以通过工具栏执行最常用的命令,增强方便程度。

在状态栏中,可以显示动态的提示信息,便于用户的一些操作。

2.1 设计菜单菜单为用户控制程序提供了一套分级选项,无论是标准菜单及命令,还是热键或弹出式菜单,以及为菜单或其命令定义加速键和状态条提示,都可用菜单编辑器来完成;除此之外,菜单项作为一个普通的对象也可在编辑时进行移动、复制、删除等操作。

图2.1是一个典型的菜单实例,图中包含了标准菜单命令、快捷键、加速键、子菜单、核对符等。

这些都是编写程序时经常遇到的。

下面我们就介绍如何创建和编辑菜单项。

图2.1 典型菜单实例2.1.1 用编辑器设计菜单当用户使用AppWizard创建SDI或MDI应用程序时,系统将为用户自动生成默认的菜单栏。

用户需要做的工作仅仅是打开菜单编辑器,进行必要的修改,再编写菜单选项相应的消息处理函数即可。

当然也可在菜单编辑器中创建新的菜单或创建新的菜单资源,如快捷菜单等。

无论是编辑已有菜单资源还是创建新的菜单资源,首先应当进入菜单资源编辑器。

例2.1 在菜单编辑器的”文件(F)”下拉的某个位置加一个菜单,其作用是单击它后,能在屏幕上显示一行字。

编程步骤如下:(1)建一个SDI单文档应用程序名为:显示一行字(2)用编辑器设计菜单:项目工作区ResourceView→单击打开Menu →双击IDR_MAINFRAME→右面出现菜单编辑器,见图2.1.1→单击“文件(F)”出现下拉菜单,见图2.1.2所示→点中最后的空白菜单,双击它→出现“菜单项属性对话框”→在Caption处写菜单名:显示一行字(&C)→在ID处写ID_FILE_XS→在prompt(注释)栏中写:点击新建菜单项,在窗口显示一行字→关闭该对话框。

VC状态栏编程及状态栏有的栏文字不显示问题

VC状态栏编程及状态栏有的栏文字不显示问题

其实很简单,状态栏编程一般步骤:1、在CString Table中添加所需的字符串string,及所显示的标题(其实是为了后来更好地显示内容预留下空间)。

2、在MainFrame.cpp中添加在1中所添加的字符串。

static UINT indicators[] ={ID_SEPARATOR, // status line indicatorID_INDICATOR_CLOCK, // String Table设置的字符串ID_INDICATOR_COIN,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,};其与m_wndStatusBar的联系通过这个函数来实现:m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) 。

3、调用m_wndStatusBar.SetPaneText(1,s);来显示所需的内容,调用m_wndStatusBar.SetPaneInfo(m_mandToIndex(ID_INDICA TOR_CLOCK),ID_INDICATOR_CLOCK,SBPS_POPOUT,50)设置所显示的格式。

其具体关系如下图所示:可能会遇到的问题即设置状态栏上的文字后不会显示原因分析:(1)、设置字体是在原有的大写与数字栏等上。

这样只有在打开键盘的大写键或数字键时才会显示。

因为大写栏与数字栏的设置是由系统自动完成的,只有在触发其相应的消息时,才会显示。

(2)、自己新加的,确实不显示(有的显示,有的不显示,我遇到的是第二栏不显示)。

原因是如果我们不为状态栏添加UPDATE的处理函数,MFC会自动禁止状态栏的该栏(pane)。

为其相应栏添加UPDATE的处理函数即可。

例如:在MainFrm.h中添加afx_msg void OnUpdate1(CCmdUI *pCmdUI);在MainFrm.cpp中添加ON_UPDATE_COMMAND_UI(ID_INDICATOR_1(要显示字的栏), OnUpdate1) 实现函数:void CMainFrame::OnUpdate1(CCmdUI *pCmdUI){pCmdUI->Enable();}经过这些操作,便可解决状态栏,有的栏不显示的问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1,添加两个ID资源
IDS_INDICATOR_X,
IDS_INDICATOR_Y
2.定义对象和数组、
在对话框头文件中定义对象
CSTARTUSBAR m_bar;
在对话框源文件.CPP中定义数组
static UINT BASED_CODE indicators[]=
{
IDS_INDICATOR_X,
IDS_INDICATOR_Y
};
3创建在状态栏在ONINITDIALOG()
//statusbar
m_bar.Create(this);
m_bar.SetIndicators(indicators,2);
CRect rect;
GetClientRect(&rect);
m_bar.SetPaneInfo(0,IDS_INDICATOR_X,SBPS_NORMAL,rect.Width()-100); m_bar.SetPaneInfo(1,IDS_INDICATOR_Y,SBPS_STRETCH,0);
m_bar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBA R_LAST,AFX_IDW_CONTROLBAR_FIRST);
//
4.响应函数
void CDialogStatusBarDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString s,s1;
s.Format("鼠标光标位置:X=%d",point.x);
s1.Format("Y=%d",point.y);
m_bar.SetPaneText(0,s); //在窗格显示鼠标X 坐标
m_bar.SetPaneText(1,s1); //在窗格显示鼠标Y坐标
CDialog::OnMouseMove(nFlags, point);
}
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 indicator
ID_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);。

相关文档
最新文档