首页 > 代码库 > 精通 VC++ 实效编程280例 - 03 控制栏 [转]
精通 VC++ 实效编程280例 - 03 控制栏 [转]
33 创建工具栏
创建工具栏,首先创建一个工具栏资源,然后构造一个 CToolBar 类对象,接下来调用 CToolBar::CreateEx 函数创建工具栏窗口,最后调用 CToolBar::LoadToolBar 函数加载工具栏资源。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //创建1个多文档的应用程序,添加1个工具栏资源,ID为IDR_TOOLBAR,在CMainFrame类中添加成员变量 public : CToolBar m_wndDemoToolBar; //在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //... //创建工具栏窗口 if (!m_wndDemoToolBar.CreateEx( this ,TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) { return -1; } //加载工具栏资源 if (!m_wndDemoToolBar.LoadToolBar(IDR_TOOLBAR)) { return -1; } return 0; } |
34 设置工具栏标题
设置工具栏的标题可以调用CWnd::SetWindowText函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx( this , TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0( "Failed to create toolbar\n" ); return -1; // fail to create } //设置工具栏标题 CString strText = _T( "" ); strText.LoadString(AFX_IDS_APP_TITLE); m_wndToolBar.SetWindowText(strText); //... return 0; } |
35 停靠工具栏
停靠工具栏,首先调用CControlBar::EnableDocking函数和CFrameWnd::EnableDocking函数,然后调用CFrameWnd::DockControlBar函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | //创建1个多文档的应用程序,添加1个工具栏资源,ID为IDR_TOOLBAR,在CMainFrame类中添加成员变量 public : CToolBar m_wndDemoToolBar; //在CMainFrame类中添加DockBar成员函数 void CMainFrame::DockBar(CControlBar* pDestBar, CControlBar* pSrcBar) { RecalcLayout(TRUE); //获得工具栏窗口坐标 CRect rect; pDestBar->GetWindowRect(&rect); rect.OffsetRect(1, 0); //获得工具栏风格 DWORD dwStyle = pDestBar->GetBarStyle(); UINT nDockBarID = 0; if (dwStyle & CBRS_ALIGN_TOP) { nDockBarID = AFX_IDW_DOCKBAR_TOP; } else if (dwStyle & CBRS_ALIGN_BOTTOM) { nDockBarID = AFX_IDW_DOCKBAR_BOTTOM; } else if (dwStyle & CBRS_ALIGN_LEFT) { nDockBarID = AFX_IDW_DOCKBAR_LEFT; } else if (dwStyle & CBRS_ALIGN_RIGHT) { nDockBarID = AFX_IDW_DOCKBAR_RIGHT; } //停靠工具栏 DockControlBar(pSrcBar, nDockBarID, &rect); } //在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //... //创建工具栏窗口 if (!m_wndDemoToolBar.CreateEx( this ,TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) { return -1; } //加载工具栏资源 if (!m_wndDemoToolBar.LoadToolBar(IDR_TOOLBAR)) { return -1; } return 0; } |
36 设置工具栏位图
设置工具栏的位图可以调用CToolBar::SetBitmap函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | //创建1个多文档的应用程序,添加1个工具栏资源,ID为IDR_TOOLBAR,添加1个位图资源,ID为IDB_BITMAP1,在CMainFrame类中添加成员变量 public : CToolBar m_wndDemoToolBar; CBitmap m_Bitmap; //在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //... //创建工具栏窗口 if (!m_wndDemoToolBar.CreateEx( this ,TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) { return -1; } //加载工具栏资源 if (!m_wndDemoToolBar.LoadToolBar(IDR_TOOLBAR)) { return -1; } //停靠工具栏 m_wndDemoToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockBar(&m_wndToolBar,&m_wndDemoToolBar); //设置位图 m_Bitmap.LoadBitmap(IDB_BITMAP1); m_wndDemoToolBar.SetBitmap(( HBITMAP )m_Bitmap); return 0; } |
37 为工具栏按钮添加文本标签
为工具栏按钮添加文本标签可以调用CToolBar::SetButtonText函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | //创建1个多文档的应用程序,在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx( this , TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0( "Failed to create toolbar\n" ); return -1; // fail to create } for ( int n = 0;n < m_wndToolBar.GetCount();n++) { //获得工具栏按钮ID UINT nID = m_wndToolBar.GetItemID(n); CString strText = _T( "" ); if (!strText.LoadString(nID)) { continue ; } int nIndex = strText.Find(_T( ‘\n‘ )); if (nIndex < 0) { continue ; } strText = strText.Right(strText.GetLength() - nIndex - 1); //设置工具栏按钮文本 m_wndToolBar.SetButtonText(n,strText); } CRect rect; m_wndToolBar.GetItemRect(0,&rect); //设置工具栏按钮尺寸 m_wndToolBar.SetSizes(rect.Size(),CSize(16,15)); //... return 0; } |
38 为工具栏按钮添加下拉箭头
为工具栏按钮添加下拉箭头,首先调用CToolBarCtrl::SetExtendedStyle函数,设置工具栏的TBSTYLE_EX_DRAWDDARROWS风格;然后调用CToolBar::SetButtonStyle函数,在每一个添加下拉箭头的按钮上设置TBSTYLE_DROPDOWN风格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | //创建1个多文档的应用程序,在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx( this , TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0( "Failed to create toolbar\n" ); return -1; // fail to create } //设置工具栏扩展风格 m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); //设置工具栏按钮风格 int nIndex = m_wndToolBar.CommandToIndex(ID_FILE_NEW); UINT nStyle = m_wndToolBar.GetButtonStyle(nIndex); nStyle |= TBSTYLE_DROPDOWN; m_wndToolBar.SetButtonStyle(nIndex, nStyle); //... return 0; } //在CMainFrame类中为工具栏添加TBN_DROPDOWN消息处理函数 //在MainFrame.h头文件中加入消息处理函数的声明: afx_msg void OnDropDownToolBar(NMHDR* pNMHDR, LRESULT * pResult); //在MainFrame.cpp中加入下拉箭头的TBN_DROPDOWN消息映射: BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDownToolBar) //}}AFX_MSG_MAP END_MESSAGE_MAP() //TBN_DROPDOWN消息的实现: void CMainFrame::OnDropDownToolBar(NMHDR* pNMHDR, LRESULT * pResult) { NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNMHDR; switch (pNMToolBar->iItem) { case ID_FILE_NEW: ::AfxMessageBox(_T( "新建" )); break ; default : break ; } } |
39 为工具栏按钮设置热点图像
默认情况下,AppWizard使用工具栏资源来设置按钮的图像。工具栏资源包含一个复合的位图,该位图在调用CToolbar::LoadToolBar函数时将被转换成一个图像列表。
为工具栏按钮设置热点图像,应该首先调用CImageList::Create函数创建一个新的图像列表;然后调用CToolBarCtrl::SetHotImageList函数,将该图像列表设置为工具栏的热点图像列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //创建1个多文档的应用程序,在CMainFrame类中添加成员变量和WM_CREATE消息处理函数 private : CImageList m_ImageList; int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx( this , TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0( "Failed to create toolbar\n" ); return -1; // fail to create } //创建图像列表 if (!m_ImageList.Create(IDB_BITMAP1,16,0,RGB(128,128,128))) { return -1; } //设置工具栏图像列表 m_wndToolBar.GetToolBarCtrl().SetHotImageList(&m_ImageList); //... return 0; } |
40 启用或禁用工具栏的工具提示
启用和禁用工具栏的工具提示,可以通过调用CControlBar::SetBarStyle函数,添加或删除CBRS_TOOLTIPS风格实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | //创建1个多文档的应用程序,分别在IDR_MAINFRAME和IDR_DEMOTYPE菜单资源中添加1个子菜单,在子菜单中添加1个菜单项(ID:ID_ENABLE_TOOLTIPS) //在CMainFrame类中为菜单项添加命令处理函数 void CMainFrame::OnEnableTooltips() { //获得工具栏风格 DWORD dwStyle = m_wndToolBar.GetBarStyle(); //启用或禁用工具提示 if (dwStyle & CBRS_TOOLTIPS) { dwStyle &= ~CBRS_TOOLTIPS; } else { dwStyle |= CBRS_TOOLTIPS; } //设置工具栏风格 m_wndToolBar.SetBarStyle(dwStyle); } void CMainFrame::OnUpdateEnableTooltips(CCmdUI* pCmdUI) { //获得工具栏风格 DWORD dwStyle = m_wndToolBar.GetBarStyle(); if (dwStyle & CBRS_TOOLTIPS) { pCmdUI->SetCheck(TRUE); } else { pCmdUI->SetCheck(FALSE); } } |
41 在工具栏中添加组合框
在工具栏中添加组合框,应该首先调用CToolBar::SetButtonInfo函数,为组合框创建一个空白区域(TBBS_SEPARATOR), 然后调用CToolBar::GetItemRect函数,获得空白区域的大小和位置,最后调用CComboBox::Create函数,在空白区域创建组合框。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | //创建1个多文档的应用程序,在CMainFrame类中添加成员变量 CComboBox m_ComboBox; //在CMainFrame类中添加CreateComboBox成员函数 BOOL CMainFrame::CreateComboBox( UINT nID) { int nIndex = 0; CRect rect; //查找按钮 while (m_wndToolBar.GetItemID(nIndex) != nID) { nIndex++; } //为组合框创建一个空白区域 m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_SEPARATOR, 80); //获得空白区域大小和位置 m_wndToolBar.GetItemRect(nIndex, &rect); //组合框大小和位置 rect.top += 0; rect.bottom += 200; //在空白区域创建组合框 if (!m_ComboBox.Create(WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS, rect, &m_wndToolBar, nID)) { TRACE0( "Failed to create combo-box\n" ); return FALSE; } //显示组合框 m_ComboBox.ShowWindow(SW_SHOW); //在组合框中添加字符串 m_ComboBox.AddString( "500%" ); m_ComboBox.AddString( "200%" ); m_ComboBox.AddString( "150%" ); m_ComboBox.AddString( "100%" ); m_ComboBox.AddString( "75%" ); m_ComboBox.AddString( "50%" ); m_ComboBox.AddString( "25%" ); m_ComboBox.AddString( "10%" ); m_ComboBox.SetCurSel(3); return TRUE; } //在CMainFrame类中添加WM_CREATE消息才处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx( this , TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0( "Failed to create toolbar\n" ); return -1; // fail to create } //创建组合框 if (!CreateComboBox(ID_COMBOBOX)) { TRACE0( "Failed to create combo box\n" ); return -1; } //... return 0; } //在CMainFrame类中为组合框添加CBN_SELCHANGE消息处理函数 void CMainFrame::OnSelchangeCombobox() { CString strText = _T( "" ); m_ComboBox.GetWindowText(strText); AfxMessageBox(strText); } |
42 创建状态栏
创建状态栏,首先构造一个CStatusBar类对象,然后调用CStatusBar::Create函数创建状态栏窗口,最后调用CStatusBar::SetIndicators函数设置状态栏指示器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //创建1个多文档的应用程序,在CMainFrame类中添加成员变量 protected : CStatusBar m_wndDemoStatusBar; //在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //... //创建状态栏窗口 if (!m_wndDemoStatusBar.Create( this )) { return -1; } //ID数组 UINT IDArray[2]; for ( int n = 0; n < 2; n++) { IDArray[n] = 10000 + n; } //设置状态栏指示器 m_wndDemoStatusBar.SetIndicators(IDArray, sizeof (IDArray) / sizeof ( UINT )); //设置窗格宽度 m_wndDemoStatusBar.SetPaneInfo(0, IDArray[0], SBPS_NORMAL, 100); m_wndDemoStatusBar.SetPaneInfo(1, IDArray[1], SBPS_STRETCH, 0); //设置窗格文本 m_wndDemoStatusBar.SetPaneText(0, _T( "状态栏:" )); m_wndDemoStatusBar.SetPaneText(1, _T( "" )); return 0; } |
43 在状态栏中添加进度条
在状态栏中添加进度条,应该首先调用CProgressCtrl::Create函数,创建进度条,然后调用CStatusBar::GetItemRect函数,获得指示器大小和位置,最后调用CWnd::MoveWindow函数移动进度条窗口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | //创建1个多文档的应用程序,添加1个基类为CStatusBar的类CProgressStatusBar //在CProgressStatusBar类中添加成员变量 public : CProgressCtrl m_Progress; //在CProgressStatusBar类中添加WM_CREATE和WM_SIZE消息处理函数 int CProgressStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CStatusBar::OnCreate(lpCreateStruct) == -1) return -1; //创建进度条 m_Progress.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this , 1); return 0; } void CProgressStatusBar::OnSize( UINT nType, int cx, int cy) { CStatusBar::OnSize(nType, cx, cy); //获得指示器大小和位置 CRect rect; GetItemRect(0, &rect); //移动进度条窗口 m_Progress.MoveWindow(rect.left + 1, rect.top, rect.Width() - 2, rect.Height()); } //在CMainFrame类中添加成员变量 protected : CProgressStatusBar m_wndProgressStatusBar; //在CMainframe类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //... //创建状态栏窗口 if (!m_wndProgressStatusBar.Create( this )) { return -1; } //ID数组 UINT IDArray[2]; for ( int n = 0; n < 2; n++) { IDArray[n] = 10000 + n; } //设置状态栏指示器 m_wndProgressStatusBar.SetIndicators(IDArray, sizeof (IDArray) / sizeof ( UINT )); //设置窗格宽度 m_wndProgressStatusBar.SetPaneInfo(0, IDArray[0], SBPS_NORMAL, 200); m_wndProgressStatusBar.SetPaneInfo(1, IDArray[1], SBPS_STRETCH, 0); //设置窗格文本 m_wndProgressStatusBar.SetPaneText(0, _T( "" )); m_wndProgressStatusBar.SetPaneText(1, _T( "" )); //设置进度条 m_wndProgressStatusBar.m_Progress.SetRange(0, 100); m_wndProgressStatusBar.m_Progress.SetStep(10); m_wndProgressStatusBar.m_Progress.SetPos(50); return 0; } |
44 显示或隐藏工具栏和状态栏
显示或隐藏工具栏和状态栏,可以调用CFrameWnd::ShowControlBar函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | //创建1个多文档的应用程序,分别在IDR_MAINFRAME和IDR_DEMOTYPE菜单资源中添加1个子菜单,在子菜单中添加2个菜单项(显示工具栏:ID_SHOW_TOOLBAR,显示状态栏:ID_SHOW_STATUSBAR) void CMainFrame::OnShowToolbar() { if (m_wndToolBar.GetStyle() & WS_VISIBLE) { //隐藏工具栏 ShowControlBar(&m_wndToolBar, FALSE, FALSE); } else { //显示工具栏 ShowControlBar(&m_wndToolBar, TRUE, FALSE); } } void CMainFrame::OnUpdateShowToolbar(CCmdUI* pCmdUI) { if (m_wndToolBar.GetStyle() & WS_VISIBLE) { pCmdUI->SetCheck(TRUE); } else { pCmdUI->SetCheck(FALSE); } } void CMainFrame::OnShowStatusbar() { if (m_wndStatusBar.GetStyle() & WS_VISIBLE) { //隐藏状态栏 ShowControlBar(&m_wndStatusBar, FALSE, FALSE); } else { //显示状态栏 ShowControlBar(&m_wndStatusBar, TRUE, FALSE); } } void CMainFrame::OnUpdateShowStatusbar(CCmdUI* pCmdUI) { if (m_wndStatusBar.GetStyle() & WS_VISIBLE) { pCmdUI->SetCheck(TRUE); } else { pCmdUI->SetCheck(FALSE); } } |
45 使用组合栏
首先调用 CReBar::Create 函数创建组合栏,然后调用 CReBar::AddBar 函数在组合栏中添加带区。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | //在resource.h头文件中添加宏定义 #define IDC_COMBOBOX 1000 #define IDC_TEST 1001 //在CMainFrame类中添加成员变量 protected : CReBar m_wndReBar; CComboBox m_ComboBox; CButton m_Button; //在CMainFrame类中添加WM_CREATE消息处理函数 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; //... //创建组合框 if (!m_ComboBox.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWN, CRect(0, 0, 100, 200), this , IDC_COMBOBOX)) { return FALSE; } //创建按钮 m_Button.Create(_T( "确定" ), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(0, 0, 50, 20), this , IDC_TEST); //创建Rebar if (!m_wndReBar.Create( this )) { return -1; } //添加工具栏、组合框、按钮添加到Rebar中 m_wndReBar.AddBar(&m_wndToolBar); m_wndReBar.AddBar(&m_ComboBox, NULL, NULL, RBBS_NOGRIPPER | RBBS_BREAK); m_wndReBar.AddBar(&m_Button, NULL, NULL, RBBS_NOGRIPPER); return 0; } //在CMainFrame类中为Button控件添加BN_CLICKED消息处理函数 void CMainFrame::OnTest() { CString strText = _T( "" ); m_ComboBox.GetWindowText(strText); if ((!strText.IsEmpty()) && (CB_ERR == m_ComboBox.FindString(-1, strText))) { m_ComboBox.AddString(strText); } AfxMessageBox(strText); } |
精通 VC++ 实效编程280例 - 03 控制栏 [转]