VC MFC中使用工具栏控件详解
- 格式:doc
- 大小:297.50 KB
- 文档页数:9
MFC框体添加菜单栏工具栏状态栏菜单栏CMenu封装了菜单句柄和相关菜单API1.1添加资源1.2在CMainFrame::OnCreate函数中添加菜单;CMenu::Attach——将菜单句柄附加到菜单对象中;CMenu::Detach——将菜单句柄从菜单对象中分离1.3 命令相关ON_COMMAND1.4 菜单项的状态ON_UPDATE_COMMAND_UI CCmdUI类工具栏工具栏相关类CToolBarCtrl——父类是CWnd,封装了Toolbar Control控件的相关信息,API等。
CToolBar——父类CControlBar,封装了ToolBar和CFrameWnd之间的关系。
2.1创建工具栏CToolBar::Create/Ex2.2 加载工具栏2.3工具栏的停靠CToolBar::EnableDocking设置工具栏允许停靠;CFrameWnd::EnableDocking设置窗口允许被停靠;CFrameWnd::DockControlBar设置停靠位置。
2.4命令处理2.5工具栏的显示与隐藏CFrameWnd::ShowControlBar2.6信息提示增加风格CBRS_TOOLTIPS;设置提示信息。
状态栏状态栏相关类CStatusBarCtrl——父类是CWnd,封装了StatusBars的相关信息,API 等。
CStatusBar——父类CControlBar,封装了状态栏和窗口之间的关系。
3.1创建状态栏CStatusBar::Create/Ex3.2设置状态栏指示器CStatusBar::SetIndicators3.3设置或获取状态栏信息CStatusBar::SetPaneText,CStatusBar::GetPaneText实例[cpp]#include "stdafx.h"#include "Resource.h"UINT g_nIndicators[]={0,IDS_TIME,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL};class CMainFrame:public CFrameWnd{public:DECLARE_MESSAGE_MAP()afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);//菜单栏,工具栏,状态栏创建与加载//菜单栏消息处理函数afx_msg void OnExit();afx_msg void OnOpen();afx_msg void OnUpdateUIOpen(CCmdUI* pCmdUI);//工具栏消息处理函数afx_msg void OnViewStandard();afx_msg void OnUpdateUIStandard(CCmdUI* pCmdUI);//状态栏消息处理函数afx_msg void OnTimer(UINT nIDEvent);afx_msg void OnMouseMove(UINT nFlags, CPoint point);private:CToolBar mWndToolBar;CStatusBar mWndStatusBar;};BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()ON_COMMAND(ID_OPEN,OnOpen)ON_COMMAND(ID_EXIT,OnExit)ON_UPDA TE_COMMAND_UI(ID_OPEN,OnUpdateUIOpen)ON_COMMAND(ID_VIEW_STANDARD,OnViewStandard)ON_UPDA TE_COMMAND_UI(ID_VIEW_STANDARD,OnUpdateUIStandard)ON_WM_TIMER()ON_WM_MOUSEMOVE()END_MESSAGE_MAP()int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){//添加菜单CMenu menu;menu.LoadMenuW(IDR_MAINFRAME);//加载菜单资源SetMenu(&menu);//将菜单设置到窗口menu.Detach();//将菜单句柄与菜单对象分离//添加工具栏mWndToolBar.CreateEx(this,TBSTATE_CHECKED,WS_CHILD|WS_VISIBLE|CB RS_ALIGN_ANY|CBRS_TOOLTIPS);mWndToolBar.LoadToolBar(IDR_MAINFRAME);//加载工具栏//停靠工具栏mWndToolBar.EnableDocking(CBRS_ALIGN_ANY);//1.设置工具栏允许停靠EnableDocking(CBRS_ALIGN_ANY);//设置框架窗口允许被停靠DockControlBar(&mWndToolBar,AFX_IDW_DOCKBAR_TOP);//停靠工具栏操作mWndToolBar.SetWindowTextW(L"标准工具栏");//设置工具栏的标题//创建状态栏mWndStatusBar.CreateEx(this);mWndStatusBar.SetIndicators(g_nIndicators,sizeof(g_nIndicators)/sizeof(UINT));//设置指示灯SetTimer(100,1000,NULL);//启动定时器return 0;}void CMainFrame::OnOpen(){MessageBox(L"OnOpen");}void CMainFrame::OnExit(){MessageBox(L"OnExit");//PostQuitMessage(0);}void CMainFrame::OnUpdateUIOpen(CCmdUI* pCmdUI) {pCmdUI->SetCheck();pCmdUI->SetRadio();pCmdUI->SetText(L"Open");}void CMainFrame::OnViewStandard(){if (mWndToolBar.IsWindowVisible()){ShowControlBar(&mWndToolBar,FALSE,FALSE);}else{ShowControlBar(&mWndToolBar,TRUE,FALSE);}}void CMainFrame::OnUpdateUIStandard(CCmdUI* pCmdUI) {pCmdUI->SetCheck(mWndToolBar.IsVisible());}void CMainFrame::OnTimer(UINT nIDEvent){CTime t=CTime::GetCurrentTime();CString strTime=t.Format("%Y-%m-%d %H:%M:%S");mWndStatusBar.SetPaneText(1,strTime);}void CMainFrame::OnMouseMove(UINT nFlags, CPoint point){CString strPt;strPt.Format(L"坐标:X=%d,Y=%d",point.x,point.y);mWndStatusBar.SetPaneText(0,strPt);}class MFCMenu:public CWinApp{public:virtual BOOL InitInstance();};BOOL MFCMenu::InitInstance(){CMainFrame *pFrame=new CMainFrame;pFrame->Create(NULL,L"MFCMenue");//pFrame->Create(NULL,L"MFCToolbar",WS_OVERLAPPEDWINDOW,CFrameW nd::rectDefault,NULL,MAKEINTRESOURCE(IDR_MAINFRAME));m_pMainWnd=pFrame;pFrame->ShowWindow(SW_SHOW);pFrame->UpdateWindow();return TRUE;}MFCMenu theApp;#include "stdafx.h"#include "Resource.h"UINT g_nIndicators[]={0,IDS_TIME,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL};class CMainFrame:public CFrameWnd{public:DECLARE_MESSAGE_MAP()afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);//菜单栏,工具栏,状态栏创建与加载//菜单栏消息处理函数afx_msg void OnExit();afx_msg void OnOpen();afx_msg void OnUpdateUIOpen(CCmdUI* pCmdUI);//工具栏消息处理函数afx_msg void OnViewStandard();afx_msg void OnUpdateUIStandard(CCmdUI* pCmdUI);//状态栏消息处理函数afx_msg void OnTimer(UINT nIDEvent);afx_msg void OnMouseMove(UINT nFlags, CPoint point);private:CToolBar mWndToolBar;CStatusBar mWndStatusBar;};BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()ON_COMMAND(ID_OPEN,OnOpen)ON_COMMAND(ID_EXIT,OnExit)ON_UPDA TE_COMMAND_UI(ID_OPEN,OnUpdateUIOpen)ON_COMMAND(ID_VIEW_STANDARD,OnViewStandard)ON_UPDA TE_COMMAND_UI(ID_VIEW_STANDARD,OnUpdateUIStandard)ON_WM_TIMER()ON_WM_MOUSEMOVE()END_MESSAGE_MAP()int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){//添加菜单CMenu menu;menu.LoadMenuW(IDR_MAINFRAME);//加载菜单资源SetMenu(&menu);//将菜单设置到窗口menu.Detach();//将菜单句柄与菜单对象分离//添加工具栏mWndToolBar.CreateEx(this,TBSTATE_CHECKED,WS_CHILD|WS_VISIBLE|CBRS _ALIGN_ANY|CBRS_TOOLTIPS);mWndToolBar.LoadToolBar(IDR_MAINFRAME);//加载工具栏//停靠工具栏mWndToolBar.EnableDocking(CBRS_ALIGN_ANY);//1.设置工具栏允许停靠EnableDocking(CBRS_ALIGN_ANY);//设置框架窗口允许被停靠DockControlBar(&mWndToolBar,AFX_IDW_DOCKBAR_TOP);//停靠工具栏操作mWndToolBar.SetWindowTextW(L"标准工具栏");//设置工具栏的标题 //创建状态栏mWndStatusBar.CreateEx(this);mWndStatusBar.SetIndicators(g_nIndicators,sizeof(g_nIndicators)/sizeof(UINT));//设置指示灯SetTimer(100,1000,NULL);//启动定时器return 0;}void CMainFrame::OnOpen(){MessageBox(L"OnOpen");}void CMainFrame::OnExit(){MessageBox(L"OnExit");//PostQuitMessage(0);void CMainFrame::OnUpdateUIOpen(CCmdUI* pCmdUI) {pCmdUI->SetCheck();pCmdUI->SetRadio();pCmdUI->SetText(L"Open");}void CMainFrame::OnViewStandard(){if (mWndToolBar.IsWindowVisible()){ShowControlBar(&mWndToolBar,FALSE,FALSE);}else{ShowControlBar(&mWndToolBar,TRUE,FALSE);}}void CMainFrame::OnUpdateUIStandard(CCmdUI* pCmdUI) {pCmdUI->SetCheck(mWndToolBar.IsVisible());}void CMainFrame::OnTimer(UINT nIDEvent){CTime t=CTime::GetCurrentTime();CString strTime=t.Format("%Y-%m-%d %H:%M:%S");mWndStatusBar.SetPaneText(1,strTime);}void CMainFrame::OnMouseMove(UINT nFlags, CPoint point) {CString strPt;strPt.Format(L"坐标:X=%d,Y=%d",point.x,point.y);mWndStatusBar.SetPaneText(0,strPt);class MFCMenu:public CWinApp{public:virtual BOOL InitInstance();};BOOL MFCMenu::InitInstance(){CMainFrame *pFrame=new CMainFrame;pFrame->Create(NULL,L"MFCMenue");//pFrame->Create(NULL,L"MFCToolbar",WS_OVERLAPPEDWINDOW,CFrameWnd: :rectDefault,NULL,MAKEINTRESOURCE(IDR_MAINFRAME));m_pMainWnd=pFrame;pFrame->ShowWindow(SW_SHOW);pFrame->UpdateWindow();return TRUE;}MFCMenu theApp;菜单栏的一些资源[cpp]/////////////////////////////////////////////////////////////////////////////// BitmapIDR_MAINFRAME BITMAP "res\\toolbar1.bmp"/////////////////////////////////////////////////////////////////////////////// ToolbarIDR_MAINFRAME TOOLBAR 16, 15BEGINBUTTON ID_OPENBUTTON ID_EXITSEPARATORBUTTON ID_EDIT_COPYBUTTON ID_EDIT_PASTESEPARATORBUTTON ID_APP_ABOUTEND/////////////////////////////////////////////////////////////////////////////// MenuIDR_MAINFRAME MENUBEGINPOPUP "文件(&F)"BEGINMENUITEM "打开(&O)", ID_OPENMENUITEM "退出(&X)", ID_EXITENDPOPUP "视图(&V)"BEGINPOPUP "工具栏(&T)"BEGINMENUITEM "标准(&S)", ID_VIEW_STANDARD ENDENDEND///////////////////////////////////////////////////////////////////////////// STRINGTABLEBEGINIDS_TIME " "END/////////////////////////////////////////////////////////////////////////////// BitmapIDR_MAINFRAME BITMAP "res\\toolbar1.bmp"/////////////////////////////////////////////////////////////////////////////// ToolbarIDR_MAINFRAME TOOLBAR 16, 15BEGINBUTTON ID_OPENBUTTON ID_EXITSEPARATORBUTTON ID_EDIT_COPYBUTTON ID_EDIT_PASTESEPARATORBUTTON ID_APP_ABOUTEND/////////////////////////////////////////////////////////////////////////////// MenuIDR_MAINFRAME MENUBEGINPOPUP "文件(&F)"BEGINMENUITEM "打开(&O)", ID_OPENMENUITEM "退出(&X)", ID_EXITENDPOPUP "视图(&V)"BEGINPOPUP "工具栏(&T)"BEGINMENUITEM "标准(&S)", ID_VIEW_STANDARD ENDENDEND///////////////////////////////////////////////////////////////////////////// STRINGTABLEBEGINIDS_TIME " "END运行结果:。
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);}。
13. MFC工具条和状态栏1. Windows控制窗口Windows (Windows95或者以上版本) 提供了系列通用控制窗口,其中包括工具条(ToolBar)、状态栏(StatusBar)、工具条提示窗口(ToolTip)。
Windows在一个DLL加载时注册个控制窗口的“窗口类”。
例如,工具条的“窗口类”是“ToolbarWindow32”,状态栏的“窗口类”是“msctls_statusbar32”,工具条提示窗口的“窗口类”是“tooltips_class32”。
为了保证该DLL被加载,使用控制“窗口类”前,应该首先调用函数InitCommonControl。
MFC在窗口注册函数AfxDeferRegisterClass中实现了这一点。
见2.2.1节MFC下窗口的注册。
创建通用控制窗口,可以使用专门的创建函数,如创建工具条的函数::CreateToolBarEx,创建状态栏的函数::CreateStatusBarEx。
也可以调用窗口创建函数::CreateWindowEx,但是需要指定预定义的“窗口类”,必要的话还要其他步骤,如使用“ToolbarWindow32”“窗口类”创建工具栏后,还需要在工具栏中添加或者插入按钮。
一般,通用控制可以指定控制窗口风格(Style)。
例如,具备风格CCS_TOP,表示该控制窗口放到父窗口客户区的顶部,具备CCS_BOTTOM,表示该控制窗口在客户区的底部。
具体的控制窗口类可以有特别的适合于自己的风格,例如,TTS_ALWAYSTIP表示只要光标落在工具栏的按钮上,ToolTip窗口不论激活与否都会显示出来。
每一控制窗口类都有自己的窗口过程来处理自己的窗口消息,实现特定的功能。
控制窗口类的窗口过程由Windows提供。
● 工具条工具条的窗口过程处理了必要的消息,提供了标准工具条的功能,例如,工具条对客户化特征提供内在的支持,用户可以通过一个客户化对话框来添加、修改、删除或者重新安排工具条按钮。
MFC通用控件使用详解首先,我们需要在MFC应用程序中包含要使用的控件的头文件。
例如,要使用按钮控件,我们需要包含afxwin.h文件。
然后,在对话框资源中添加一个按钮控件,并给它一个唯一的ID值。
在OnInitDialog(函数中,我们可以使用以下代码获取按钮控件的指针并对其进行操作:```cppCButton* pButton = (CButton*)GetDlgItem(IDC_BUTTON1);``````cpppButton->SetWindowText(_T("Click Me"));```我们还可以使用以下代码来设置按钮的样式:```cpppButton->SetButtonStyle(BS_DEFPUSHBUTTON);```这将使按钮默认显示为按下按钮。
```cppCEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);``````cppCString strText;pEdit->GetWindowText(strText);``````cpppEdit->SetWindowText(_T("Hello World"));```对于列表框控件,我们可以使用以下代码获取列表框的指针:```cppCListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1); ```然后,我们可以使用以下代码向列表框中添加项:```cpppListBox->AddString(_T("Item 1"));pListBox->AddString(_T("Item 2"));```我们还可以使用以下代码来获取列表框中选定项的索引:```cppint nIndex = pListBox->GetCurSel(;```此外,MFC通用控件还提供了进度条控件和组合框控件等功能。
【转】MFC工具栏设计发现不错的一篇,就转载了!工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标来表示。
当单击某个按钮时,会产生一个相应的消息,对这个消息的处理就是按钮的功能实现。
将菜单中常用的功能放置在工具栏中,这样可以方便用户操作,省去了在级联菜单中一层层查找菜单项的麻烦。
6.2.1 工具栏类CToolBar在MFC类库中,CToolBar类封装了工具栏的基本功能,CToolBar类的主要方法如下。
(1)Create方法:该方法用于创建工具栏窗口。
语法如下:BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE |CBRS_TOP, UINTnID = AFX_IDW_TOOLBAR );参数说明pParentWnd:标识父窗口。
dwStyle:标识工具栏风格。
可选值如下:CBRS_TOP:工具栏位于框架窗口的顶部。
CBRS_BOTTOM:工具栏位于框架窗口的底部。
CBRS_NOALIGN:当父窗口重新调整尺寸时不重新定位工具栏。
CBRS_TOOLTIPS:工具栏显示工具提示。
CBRS_SIZE_DYNAMIC:工具栏是动态的。
CBRS_SIZE_FIXED:工具栏是固定的。
CBRS_FLOATING:工具栏是浮动的。
CBRS_FLYBY:状态栏显示按钮的信息。
CBRS_HIDE_INPLACE:工具栏不显示。
nID:标识工具栏ID。
(2)CreateEx方法:该方法与Create方法类似,用于创建工具栏窗口,只是该方法支持扩展风格。
语法如下:BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = TBSTYLE_FLAT, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, CRect rcBorders = CRect(0, 0, 0, 0), UINT nID = AFX_IDW_TOOLBAR);参数说明pParentWnd:标识父窗口。
MFC Tree Control控件详解1.InsertItem 添加节点参数: 文字,图标,父节点返回: HTREEITEM示例: 添加一系列节点HTREEITEM hItem = m_Tree.InsertItem("root",NULL,NULL);///root就是节点的标题int i,j;for (i=0;i<4;i++){HTREEITEM hSubItem = m_Tree.InsertItem("item",NULL,NULL,hItem);for (j=0;j<3;j++){m_Tree.InsertItem("subitem",NULL,NULL,hSubItem);}}InsertItem函数的第一个参数就是设置他的节点标题2.ModifyStyle 设置风格参数: 取消的风格,增加的风格示例: 在对话框初始化时设置风格BOOL CMfc1Dlg::OnInitDialog(){//...m_Tree.ModifyStyle(NULL,TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESA TROOT); }3.DeleteItem 删除节点4.DeleteAllItems 删除全部节点5.Expand 展开/收缩节点参数: 节点HTREEITEM,展开/收缩示例:m_Tree.Expand(hItem,TVE_EXPAND);/////////////////////////////////////////////////////////CTreeCtrl的概述cc++vcCTreeCtrl在三种不同情况下创建的方式1、如果要在对话框窗口上创建树形控件,你需要在对话框类中定义一个CTreeCtrl类型的成员变量。
2、如果树形控件是一个子窗口,你可以使用CTreeCtrl::Create()来构建树形空间对象。
MFC基础,图标,光标,标题,工具栏,状态栏等(最细致的讲解改变窗口大小和标题修改:在Cmainframe中的precreatewindow中cs.cx=600;cs.cy=600;cs.style=cs.style&~FWS_ADDTOTITLE;cs.lpszName="jiaotong";光标,背景在CMyview中的precreatewindow中cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,LoadCursor(NULL,IDC_HELP),(HBRUSH)GetStockObject(BLACK_BRUSH),0);动态图标修改:首先在resources中的Icon中插入两个图标然后按照以下步骤1.在mainframe类里的m_wndStatusBar中添加HICON的一个数组,大小为2public:HICON m_hIcons[2];2.在CMainFrame::OnCreate里加载图标m_hIcons[1]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));m_hIcons[2]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON2)); SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[1]);//将开始的图标设置为第一个图标SetTimer(1,1000,NULL);3.自定义一个定时器(点击右键选择add windows Message。
在里面选择VM_TIMER)void CMainFrame::OnTimer(UINT nIDEvent){static int i=1;SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[i+1]);i=++i%2;CFrameWnd::OnTimer(nIDEvent);}工具栏添加属性:1。
MFC控件使用详细教程MFC(Microsoft Foundation Class)是微软推出的一套用于开发Windows应用程序的类库。
它提供了许多方便易用的控件,可以快速创建用户界面。
本教程将详细介绍如何使用MFC控件来创建Windows应用程序。
第一步:创建一个MFC应用程序项目要使用MFC控件,首先需要创建一个MFC应用程序项目。
在Visual Studio中,选择"文件"->"新建"->"项目",然后选择"MFC应用程序"模板。
在项目设置中,可以选择使用对话框或视图来作为应用程序的主界面。
第二步:设置控件属性第三步:添加控件消息处理程序控件不仅仅可以显示在界面上,还可以响应用户的操作。
例如,当用户点击按钮时,可以执行一些特定的操作。
要实现这个功能,需要添加控件消息处理程序。
可以通过右键单击控件,选择"添加事件处理程序"来添加控件消息处理程序。
在生成事件处理程序的对话框中,可以选择控件的事件(如点击事件、鼠标移动事件等)和消息的处理函数。
在消息处理函数中,可以编写代码来实现特定的功能。
第四步:编写控件的功能代码在控件的消息处理函数中,可以使用MFC类库提供的函数来实现控件的功能。
例如,如果用户点击了按钮控件,可以使用CButton类的GetWindowText函数来获取按钮的文本,并使用CMessageBox类的MessageBox函数来显示一个消息框。
可以使用类似的方式来处理其他控件的事件。
例如,当用户选择了一个列表框中的项时,可以使用CListBox类的GetCurSel函数来获取选择的项的索引,并根据索引来执行特定的操作。
第五步:编译和运行应用程序完成了控件的添加和功能编写后,可以使用Visual Studio的编译和运行功能来编译和运行应用程序。
在编译过程中,会生成可执行文件和相关的依赖文件。
MFC 常用整理MFC USUAL TRIM艾德温*范克里夫学生所在学院:信息科学与工程学院学生所在班级:软件2班学生姓名:王海波学生学号:110120010061指导教师:王海波教务处2014年 7 月目录MFC 常用知识第一回:整体感知第二回: MFC是什么第三回:开始用MFC创建窗体以及MFC的结构第四回: VS2010界面组织MFC 常用控件写法常用控件介绍常用控件使用按钮的使用编辑框的使用选项卡的使用报表的使用MFC 常用知识第一回:想写一个像上图(大二写的的吧。
囧)的窗体程序,我们就可以用简单的MFC.怎么用MFC做出上图的窗体?1 如下图用vs2010的可视化工具栏拖控件,很简单2 然后双击某个按钮,vs2010会自动弹出函数,我们就可以在函数中填写代码。
之后,每当你按那个按钮一次,你在函数中写的代码就会执行一次。
3 显然这一点功能远远不够,更多请看下回。
第二回:回顾:第一回讲的就是一个窗体初级的原型。
接下来说说更深一点的东西。
MFC 是什么?(上面的窗体等是哪里来的?)定义:MFC: Microsoft function class (微软功能类)理解:MFC 就是许许多多的类。
跟我们有什么联系:我们利用MFC中的许多类作为工具来开发出窗体。
更浅显的理解:MFC就是工具,让我们能快速开发的工具。
之前穆云峰老师的windows编程课记着么,最开始窗体就是那么一句句代码手动写出来的,特繁琐,所以微软就写了功能封装类,把一些重复的工作写成类,之后写窗体就更方便了。
第三回:一:开始用MFC 写窗体123其他不知道的全点下一步。
最后一步:二:怎么利用MFC三个类: CtestApp CtestDlg(这两个类是自动生成的) CDialogEx (MFC的类)1 CtestApp 是用来封装主函数Main的。
并且定义了一个全局变量TheApp。
2 CDialogEx 封装了创建窗体的基本代码。
VC MFC工具栏(CToolBar)控件 第 1 页 共 9 页 VC MFC工具栏(CToolBar)控件 工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。 CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如下: BOOL CButton::Create( LPCTSTR lpszCaption,//按钮显示的文本 DWORD dwStyle,//按钮样式 const RECT& rect,//按钮控件显示的区域(大小)相对于父窗口 CWnd* pParentWnd,//按钮的父窗口(按钮属于哪个窗口) UINT nID//指明按钮控件ID号 ); 这个函数的第二个参数dwStyle是按钮控件的样式,也就是在可视化添加按钮控件时,右击按钮控件,选择属性,之后会弹出一个对话框,这个对话框有一个样式的选项,该参数即对应这个样式。 好了,了解了上面这些我们就来动态创建一个按钮吧,首先在对应话类里添加一个按钮类成员变量CButton m_Button; 然后在对话框编辑区里给对话框添加一个按钮控件(单击这个按钮创建按钮控件),然后添加这个按钮控件单击消息处理函数,并在函数添加以下语句: RECT ButtonRect;//按钮控件显示的区域(大小)相对于父窗口 ButtonRect.left=10; ButtonRect.top=10; ButtonRect.right=80; ButtonRect.bottom=30; m_Button.Create("动态创建",WS_CHILD,ButtonRect,this,1115); m_Button.ShowWindow(SW_SHOW);//显示按钮控件 知道了怎样动态创建按钮控件,我们就来创建工具栏控件。 首先在对话类中添加一个CToolBar类成员变量CToolBar m_Toolbar; 然后在对话类文件中定义工具栏命令ID #define ID_BUTTON1 501 #define ID_BUTTON2 502 #define ID_BUTTON3 503 接着我们就要创建工具栏资源了,用于工具栏按钮的显示图片 方法是进入ResourceView(资源视图选项卡),再随便选中一个选项,右击选择插入,在弹出的对话框里选中Toolbar,点新建。 接着创建三个按钮。如下图所示: VC MFC工具栏(CToolBar)控件
第 2 页 共 9 页 好了,下面把三个按钮ID号,改成上面宏定义的ID号,如果要改变“天”字按钮,选中该按钮,然后回车键,就会弹出一个对话框, 在ID项填入ID_BUTTON1,就可以了。接着依次把两个ID号改为ID_BUTTON2,ID_BUTOON3。在这个对话框里也可以改变工具栏按钮的大小。 接下来我们样在对话框类的OnInitDialog函数里的所有代码之后,return TRUE;之间添加以下语句: m_Toolbar.Create(this);//创建工具栏控件 m_Toolbar.LoadToolBar(IDR_TOOLBAR1);//装载工具栏资源 CRect rect(100,100,200,200);// m_Toolbar.MoveWindow(rect);//移动工具栏在父窗口的位置 m_Toolbar.ShowWindow(SW_SHOW);//显示工具栏 但这样显示工具栏不是很方便,特别是当窗口大小改变后,还要计算工具栏在窗口中的位置,有没有什么方法,可以根据窗口大小自动调整工具栏到合适的位置呢?答案是肯定的,RepositionBars函数可以做到。实现方法如下,把上面的语句换成下面的: m_Toolbar.Create(this);//创建工具栏控件 m_Toolbar.LoadToolBar(IDR_TOOLBAR1);//装载工具栏资源 //该函数用于显示工具栏,并根据窗口大小自动调整工具栏的位置 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); 而响应工具栏按钮单击消息,跟前面介绍的添加按钮单击消息差不多,进入类向导,找到要添加的工具栏按钮ID,添加COMMAND消息响应函数,如下图: VC MFC工具栏(CToolBar)控件
第 3 页 共 9 页 工具栏按钮上显示真彩位图 上面的例子有一个缺陷,那就是工具栏按钮显示的图形,不能超过256色,如果我想在工具栏按钮显示真彩位图,上面的方法显示是无法实现的,那这个功能是如何实现呢? SetImageList函数可以做到,既然要显示真彩位图,那就不能使用上面的工具栏资源(256色),所以一切都得到用代码实现 首先向工程引入六张位图(用于工具栏按钮显示的图片),假设ID号分别为IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4,IDB_BITMAP5,IDB_BITMAP6,大小为50X38 第一步:在对话框里添加两个成员变量分别是: CToolBar m_Toolbar; CImageList m_ImageList; 第二步:在对话类文件添加以下宏定义: #define ID_BUTTON1 501 #define ID_BUTTON2 502 #define ID_BUTTON3 503 #define ID_BUTTON4 504 #define ID_BUTTON5 505 #define ID_BUTTON6 506 接下来在对话框初始化函数OnInitDialog后面添加如下语句: m_ImageList.Create(50,38,ILC_COLOR24|ILC_MASK,1,1);//图片大小必须一致 CBitmap bmp; for(int i=0;i<6;i++) { bmp.LoadBitmap(IDB_BITMAP1+i); m_ImageList.Add(&bmp,RGB(255,255,255)); bmp.DeleteObject(); } UINT nArray[6]; for(i=0;i<6;i++) { nArray[i]=ID_BUTTON1+i; } m_Toolbar.CreateEx(this);//创建工具栏控件,CreateEx函数创建的工具栏,默认有浮动按钮属性 m_Toolbar.SetButtons(nArray,6);//创建六个工具按钮,并依次设置ID号,对应nArray数组的元素 m_Toolbar.SetSizes(CSize(60,56),CSize(50,38));//函数第一个是按钮大小,第二个是图像大小,按钮必须比图像要大,具体是按钮的要 //比图像的宽大7或者以上,高6 m_Toolbar.GetToolBarCtrl().SetImageList(&m_ImageList);//设置图像 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); VC MFC工具栏(CToolBar)控件
第 4 页 共 9 页 运行效果如下图:
如果要响应工具栏按钮单击消息的话,必须手动添加消息映射:如 ON_COMMAND(ID_BUTTON1,Button1) //button1为消息处理函数 如果要设置按钮显示文本的话,就是CToolBar类的 SetButtonText函数。 设置工具栏背景位图 用CReBar类可以实现在工具栏背景里显示位图,可以把工具栏设置成CReBar类对应的子窗口,以上面的工程为例子,再在对话类里添加一个成员变量: CReBar m_Rebar;接着导入一张位图,用做工具栏的背景,ID号为ID_TOOLBACK,然后在OnInitDialog函数的 RepositionBar(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);语句前面添加如下语句: m_Rebar.Create(this);//创建窗口(控件) m_Rebar.AddBar(&m_Toolbar);//添加m_Toolbar为子窗口 m_Rebar.RedrawWindow();//重画窗口 REBARBANDINFO info; info.cbSize=sizeof(info); info.fMask=RBBIM_BACKGROUND; m_Toolbar.ModifyStyle(0,TBSTYLE_TRANSPARENT);//设置工具栏背景色透明 info.hbmBack=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_TOOLBACK));//加载位图 m_Rebar.GetReBarCtrl().SetBandInfo(0,&info); 编译,运行效果如下:
为工具栏按钮添加鼠标停留提示信息 以上面的工程为例子,在对话类里添加一个成员变量CString str; 接着在m_Toolbar调用CreateEx函数后,调用这个语句: m_Toolbar.EnableToolTips();//激活信息提示功能 然后在对话类里添加一个成员函数(用于TTN_NEEDTEXT消息处理函数),格式如下: BOOL OnDisplay(UINT id, NMHDR *pNMHDR, LRESULT *pResult) 然后添加TTN_NEEDTEXT消息映射宏 ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnDisplay)