电子教案-《Visual-C++-6.0实例教程(第二版)》-杨国兴_第1页
电子教案-《Visual-C++-6.0实例教程(第二版)》-杨国兴_第2页
电子教案-《Visual-C++-6.0实例教程(第二版)》-杨国兴_第3页
电子教案-《Visual-C++-6.0实例教程(第二版)》-杨国兴_第4页
电子教案-《Visual-C++-6.0实例教程(第二版)》-杨国兴_第5页
已阅读5页,还剩305页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章数据库编程学习目标建立ODBC数据源了解类CDatabase、CRecordSet的使用方法创建WindowsExplore风格的程序进一步熟练树控件和列表控件的使用10.1MFC提供的ODBC数据库类1.VisualC++数据库编程概述ODBCAPIMFCODBCDAOOLEDBADO第10章多线程2.CDatabase类Open()IsOpen()Close()第10章多线程10.1MFC提供的ODBC数据库类例:CDatabasedb;if(!db.IsOpen())//判断db是否处于打开状态{ if(!db.Open(“Caie”)) { AfxMessageBox(“建立数据库连接失败!”) }}db.Close();3.CRecordSet类第10章多线程10.1MFC提供的ODBC数据库类CRecordSet类对象提供了从数据源中提取出的记录集。在实际应用程序中,一般不直接使用CRecordSet类,而是从CRecordSet类产生一个派生类,并添加相应于数据库表中字段的成员变量。10.2本章实例第10章多线程1.实例介绍

实例程序是“汽车及汽车零部件企业查询系统”,主要功能就是查询某个地区生产某产品的企业。单击工具栏的“打印”按钮,打印所查询出来的公司清单。第10章多线程10.2本章实例双击右侧窗口列表中的某个公司编码,弹出对话框来显示该公司的详细信息。单击“打印”或“打印信封标签”按钮打印公司的详细信息或信封标签。第10章多线程10.2本章实例(1)代码设计产品编码:*

*

**如2

1

02

地区编码:**

**

如01

00

企业编码:****

***如0100

001

2系统设计汽车零部件汽车发动机系统泵类零部件北京未用序号(2)数据库设计地区编码表(Dqbm)产品编码表(Cpbm)公司情况表(Gsqk)产品情况表(Cpqk)本系统使用Access数据库,数据库名Caie.mdb第10章多线程10.2本章实例(1)用户DSN(2)DriverdoMicrosoftAccess(*.mdb)(3)数据源名:Caie”3创建ODBC数据源10.3程序实现第10章多线程创建工程Odbc创建与数据库表相关联的类处理工具栏处理左边窗口处理右边窗口初始封面公司详细情况对话框处理状态栏步骤1创建工程Odbc第10章多线程(1)单文档(2)数据库:Headerfilesonly可以在工程的在stdAfx.h文件中找到相应的代码如下: #include<afxdb.h>//MFCODBCdatabaseclasses(3)界面风格:Windowsexplore10.3程序实现步骤2创建与数据库表相关联的类第10章多线程添加以下4个与数据库表相关联的类:CRecordSet,CCpbmSet,CGsqkSet,CCpqkSet

方法:插入新类 选择基类CRecordSet 选择ODBC数据源,并选择Caie 选择4个相应的表10.3程序实现步骤3处理工具栏1第10章多线程(1)除“打印”按钮外,将工具栏上的所有按钮删除,载添加一个按钮,ID为ID_COMBOBOX。(2)载主框架类中定义组合框成员变量

CComboBoxm_ComboBox;

(3)在主框架类的OnCreat()函数中创建工具栏代码的下面添加创建组合框的代码。 10.3程序实现AddItemFromDqbm()调用步骤3处理工具栏2第10章多线程(4)添加AddItemFromDqbm()函数。在主框架类中添加成员函数AddItemFromDqbm()

在主框架类中添加一个公有数据成员m_strDqbm,用来保存所选择地区的编码。 CStringm_strDqbm;在主框架类的实现文件的开始位置加入文件包含。 #include"DqbmSet.h" #include"Cpqkset.h"10.3程序实现步骤3处理工具栏3第10章多线程(5)添加组合框的消息响应函数OnSelChangeCombo()原型: afx_msgvoidOnSelChangeCombo();消息映射: ON_CBN_SELCHANGE(ID_COMBOBOX,OnSelChangeCombo)函数定义:voidCMainFrame::OnSelChangeCombo(){ CStringstrComboItem; m_ComboBox.GetWindowText(strComboItem); m_strDqbm=strComboItem.Left(4); COdbcView*pView=GetRightPane(); pView->ListBuild();}10.3程序实现本函数在后面介绍步骤3处理工具栏4第10章多线程(6)在主框架类中添加成员函数GetLeftPane()CLeftView*CMainFrame::GetLeftPane(){ CWnd*pWnd=m_wndSplitter.GetPane(0,0); CLeftView*pView= DYNAMIC_DOWNCAST(CLeftView,pWnd); returnpView;}

在主框架类头文件中,添加CLeftView类的声明 classCLeftView;

10.3程序实现步骤4处理左边窗口1第10章多线程(1)添加资源和成员变量 IDI_CAR1,IDI_CAR2,IDI_CAR3,IDI_CAR4

10.3程序实现在视类中添加CImageList成员变量classCLeftView:publicCTreeView{……protected: CImageListm_ImageList;……}在LeftView.cpp中添加:#include"CpbmSet.h"

步骤4处理左边窗口2第10章多线程(2)设置视中树控件的风格10.3程序实现在CLeftView类的PreCreateWindow()函数中添加代码

BOOLCLeftView::PreCreateWindow(CREATESTRUCT&cs){ cs.style|=TVS_HASLINES|TVS_HASBUTTONS| TVS_LINESATROOT|TVS_SHOWSELALWAYS; returnCTreeView::PreCreateWindow(cs);}步骤4处理左边窗口3第10章多线程10.3程序实现(3)在CLeftView::OnInitialUpdate()中建立树控件节点(4)添加消息响应函数函数CLeftView::OnSelchanged()在CLeftView类中添加两个成员变量classCLeftView:publicCTreeView{……public: CStringm_strCpbm; longm_nCurlParam;……}在LeftView.cpp类中添加文件包含:#include"MainFrm.h“#include"OdbcView.h"步骤5处理右边窗口1第10章多线程10.3程序实现(1)设置列表视的风格为reportBOOLCOdbcView::PreCreateWindow(CREATESTRUCT&cs){

cs.style|=LVS_REPORT; returnCListView::PreCreateWindow(cs);}步骤5处理右边窗口2第10章多线程10.3程序实现(2)在OnInitialUpdate()函数创建列表控件的列voidCOdbcView::OnInitialUpdate(){ CListView::OnInitialUpdate(); CListCtrl&refList=GetListCtrl();

refList.InsertColumn(0,"公司编码",LVCFMT_LEFT,60); refList.InsertColumn(1,"公司名称",LVCFMT_LEFT,240); refList.InsertColumn(2,"联系电话",LVCFMT_LEFT,100); refList.InsertColumn(3,"邮政编码",LVCFMT_LEFT,60); refList.InsertColumn(4,"通信地址",LVCFMT_LEFT,300); }步骤5处理右边窗口3第10章多线程10.3程序实现(3)添加COdbcView::ListBuild()函数在OdbcView.cpp文件中添加以下文件包:#include"MainFrm.h"#include"LeftView.h"#include"DqbmSet.h"#include"Cpqkset.h"#include"Gsqkset.h"步骤6初始封面第10章多线程10.3程序实现(1)选择菜单Project︱AddToProject︱ComponentsAndControls,弹出ComponentsAndControlsGallery对话框。(2)双击VisualC++Components,选择Splashscreen,单击“Insert”按钮,再单击“确定”按钮。然后关闭ComponentsAndControlsGallery对话框。(3)可以在工程文件夹中找到位图“Splsh16.bmp”,如果要使用自己制作的封面,只要替换这个位图即可。步骤7公司详细情况对话框1第10章多线程10.3程序实现(1)编辑对话框资源。ID:IDD_DLG_COMPINFO编辑框的IDIDC_EDIT_NAME IDC_EDIT_POSTIDC_EDIT_ADRRESS IDC_EDIT_TELEPHONEIDC_EDIT_CZH

IDC_EDIT_FRDBIDC_EDIT_EMAIL

IDC_EDIT_PPIDC_EDIT_QYGM

IDC_EDIT_CPQK步骤7公司详细情况对话框2第10章多线程10.3程序实现(2)为文本框控件添加关联变量IDC_EDIT_ADRRESS CString m_strAddress;IDC_EDIT_CPQK CString m_strCpqk;IDC_EDIT_CZH CString m_strFax;IDC_EDIT_EMAIL CString m_strEmail;IDC_EDIT_FRDB CString m_strFrdb;IDC_EDIT_NAME CString m_strName;IDC_EDIT_POST CString m_strPostNumber;IDC_EDIT_PP CString m_strPp;IDC_EDIT_QYGM CString m_strQygm;IDC_EDIT_TELEPHONE CString m_strTelephone;步骤7公司详细情况对话框3第10章多线程10.3程序实现(3)在对话框中添加私有成员变量m_strGsbm,并初始化CDlgCompinfo::CDlgCompinfo(CStringgsbm,CWnd*pParent/*=NULL*/): CDialog(CDlgCompinfo::IDD,pParent){…… m_strGsbm=gsbm;}步骤7公司详细情况对话框4第10章多线程10.3程序实现(4)显示对话框函数COdbcView::OnLButtonDblClk()(5)将公司的详细信息显示在对话框中函数CDlgCompinfo::OnInitDialog()在OdbcView.cpp中添加文件包含: #include"DlgCompinfo.h“在对话框类的实现文件中添加文件包含: #include"GsqkSet.h"步骤8处理状态栏1第10章多线程10.3程序实现(1)将主框架类中的保护成员变量m_wndStatusBar改为公有成员。(2)在主框架类的实现文件中找到indicators数组,再添加一个ID_SEPARATOR(3)设置状态栏前两个指示器的风格在CMainFrame::OnCreate()添加以下代码: m_wndStatusBar.SetPaneInfo(0,ID_STATUSBAR,SBPS_NORMAL,10); m_wndStatusBar.SetPaneInfo(1,ID_STATUSBAR,SBPS_NORMAL,600);

(4)在状态栏显示查询过程在函数ListBuild()的第三行下面添加如下两行代码。 CStringstrMess="正在查询,请稍候..."; pMainFrame->m_wndStatusBar.SetPaneText(1,strMess);步骤8处理状态栏2第10章多线程10.3程序实现在函数ListBuild()查询的循环里面添加下面的代码

…… nItemNumber++; if(nItemNumber%100==0) { strMess+="."; pMainFrame->m_wndStatusBar.SetPaneText(1,strMess); } pGsqkSet->MoveNext();

……在函数ListBuild()的最后添加下面两行代码。 strMess.Format("共有%d家公司",nItemNumber); pMainFrame->m_wndStatusBar.SetPaneText(1,strMess);小结CDatabase类CRecordSet类Tree控件List控件程序启动封面

在状态栏显示信息

第10章多线程VisualC++6.0实例教程(第2版)第1章VC++基础知识与VC6.0开发环境学习目标了解VC++的一些基本概念了解VisualC++6.0开发环境利用应用向导建立一个应用程序框架1.1VC++基础知识

面向对象编程的三大特征封装性继承性多态性VisualC++和MFC的发展MFC(MicrosoftFoundationClassLibrary)SDK(SoftwareDevelopmentKit)第1章VC++基础知识1.2VisualC++6.0开发环境简介

标题栏菜单栏工具栏工作区(Workspace)客户区输出窗口状态条第1章VC++基础知识1.VisualC++6.0主界面2.应用向导(MFCAppWizard(exe))第一步:选择程序类型单文档应用程序多文档应用程序基于对话框的应用程序第1章VC++基础知识第二步:程序对数据库的支持第三步:程序对OLE和ActiveX控件的支持第四步:程序外观和对通信的支持第五步:程序的和风格、代码加注释、链接库设置第六步:选择视类的基类3.应用程序主要的类主框架类:CMainFrame第1章VC++基础知识MainFrm.hMainFrm.cpp应用类:C***App***.h***.cpp文档类:C***Doc***Doc.h***Doc.cpp***View.h***View.cpp视类:C***View第2章对话框与控件

学习目标了解MFC应用向导所生成应用程序的基本结构掌握对话框编程的一般方法学习用类向导添加消息响应函数及控件关联变量掌握Windows通用控件使用方法了解Windows通用对话框编程的使用方法2.1使用对话框与控件实例:口令对话框在程序开始运行时,弹出一个口令对话框,要求输入口令,如果口令超过四个或不足四个数字,程序会给出警告,要求用户重新输入,如果输入的口令不正确,则显示出错信息,然后程序结束,如果按下取消按钮,程序也结束,如果口令正确,则进入该程序。第2章对话框与控件程序的实现步骤利用AppWizard生成多文档程序(Dialog)编辑口令对话框资源添加控件关联变量添加代码第2章对话框与控件2.1使用对话框与控件步骤1生成程序框架(Dialog)

1.项目名称:Dialog

2.选择多文档界面应用程序第2章对话框与控件2.1使用对话框与控件步骤2编辑口令对话框资源对话框ID:IDD_PASSWORD_DIALOG,Caption:“口令”类:CPasswordDialog添加控件:ID控件类型属性IDC_STATIC

StaticTextCaption:请输入口令IDC_STATICStaticTextCaption:口令为一个0-9999之间的整数 (Clientedge、Staticedge和Modalframe选中) IDC_PASSWORD_EDITEditBoxPassword:选中IDOKButton Caption:确定IDCANCELButtonCaption:取消步骤3

添加控件关联变量第2章对话框与控件2.1使用对话框与控件步骤4显示对话框

应用类CDialogApp的成员函数InitInstance()完成程序的初始化工作,因此可以在该函数中添加代码,显示对话框并检测口令。为了在DialogApp.cpp文件中使用对话框类CPasswordDialog,需在文件的开始部分添加如下文件包含:#include“PasswordDialog.h”IDC_PASSWORD_EDITintm_PasswordMinimumValue:0MaximumValue:9999第2章对话框与控件2.1使用对话框与控件在函数

InitInstance()最后一行returnTRUE;的前面加入以下代码:

CPasswordDialogcDlg;//声明CpasswordDialog类的一个对象

if(cDlg.DoModal()==IDOK)//用户按了确定按钮

{ if(cDlg.m_Password!=1925)//口令为整数1925 {//如果口令不对,则显示出错信息,然后程序结束

AfxMessageBox("口令错误,确定后将退出程序。"); returnFALSE; }}else//如果按下取消按钮,程序也结束

returnFALSE;第2章对话框与控件2.1使用对话框与控件小结编辑对话框资源添加控件关联变量应用类的成员函数InitInstance()对话框类的成员函数DoModal()MessageBox()函数2.2模态对话框模态对话框弹出后,独占了系统资源,只有在关闭该对话框后才可能继续执行程序的其他代码,不能够在关闭对话框之前执行应用程序其他部分的代码。第2章对话框与控件本节在前一节程序的基础上,在菜单“查看”下面添加菜单项“模态对话框”,选择该菜单项弹出左面的对话框,作出各种选择后,单击“确定”按钮后,程序将选择的信息显示在文本框中,单击“退出”按钮,结束程序的运行。程序的实现步骤编辑菜单资源编辑对话框资源,创建类显示对话框添加控件关联变量添加消息响应函数第2章对话框与控件2.2模态对话框步骤1添加菜单资源在“查看(V)”菜单中添加以下菜单项SeparatorID_VIEW_MODALDIALOG 模态对话框ID_VIEW_MODALLESSDIALOG 非模态对话框ID_VIEW_PROGRESSDIALOG 进度条对话框ID_VIEW_PROPERTIES 属性页对话框ID_VIEW_COMMONDIALOG 通用对话框第2章对话框与控件2.2模态对话框步骤2编辑对话框资源第2章对话框与控件2.2模态对话框IDC_SEX1 RadioButton Caption:男Group:选中IDC_SEX2 RadioButton Caption:女IDC_INSTEREST1 CheckBox Caption:登山Group:选中IDC_INSTEREST2 CheckBox Caption:游泳IDC_INSTEREST3 CheckBox Caption:看书IDC_INSTEREST4 CheckBox Caption:玩游戏IDC_COMBO ComboBoxIDC_EDIT EditBox将对话框中OK按钮的标题改为“确定”,ID改为ID_OK。CANCE按钮标题改为“退出”ID:IDD_MODAL_DIALOGCaption:“ModalDialog”Class:CDialogModal注意:一组单选钮的TABORDER连续,且选中第一个单选钮的GROUP属性。步骤3显示对话框第2章对话框与控件2.2模态对话框使用类向导在视类中添加菜单的消息响应函数:Classname:CDialogViewObjectIDs:ID_VIEW_MODALLESSDIALOGMessages:COMMAND

在文件DialogView.cpp中包含头文件:#include"DialogModal.h"voidCDialogView::OnViewModaldialog(){ //TODO:Addyourcommandhandlercodehere CDialogModalcDlg; cDlg.DoModal();}步骤4添加控件关联变量第2章对话框与控件2.2模态对话框使用类向导的MenberVariable标签添加IDC_COMBOCComboBox m_Combo;IDC_SEX1CButton m_Radio;IDC_EDITCStringm_Edit;值型控件关联变量:int,char,CString,float等控制型控件关联变量:每个控件都有对应的类管理,如CComboBox,CButton,CEdit等。也可以添加这些类型的关联变量,称为控制型控件关联变量。步骤5添加消息响应函数第2章对话框与控件2.2模态对话框初始化:Classname:CDialogModalObjects:CDialogModalMessage:WM_INITDIALOG代码单击确定按钮:Classname:CDialogModalObjects:ID_OKMessage:BN_CLICKED代码小结第2章对话框与控件2.2模态对话框1.单选钮SetCheck(),GetCheck()2.复选框 GetCheck()3.组合框InsertString(),SetCurSel(),GetCurSel(),GetLBText()4.对话框

GetDlgItem()2.3非模态对话框非模态对话框弹出后,程序可以在不关闭该对话框的情况下继续执行,在转入到应用程序其他部分的代码时可以不需要用户做出响应。第2章对话框与控件本节在前一节程序的基础上,当选择“查看”菜单中的“非模态对话框”菜单项时,弹出左面的对话框。选择左边树控件中的某个班级,在右边的列表控件显示该班级的学生。程序的实现步骤编辑对话框资源,创建类显示对话框实现对话框的功能:添加控件关联变量添加消息响应函数第2章对话框与控件2.3非模态对话框步骤1编辑对话框资源第2章对话框与控件2.3非模态对话框ID:IDD_MODALLESS_DIALOGCaption:“ModallessDialog”Class:CDialogModallessID号控件属性IDC_TREETreeControl选中复选框Hasbuttons,Haslines和LinesatrootIDC_LISTListControlStyles|View:ReportIDOKButtonCaption:确定步骤2显示对话框第2章对话框与控件2.3非模态对话框在视类中添加成员公有变量:

CDialogModalless*m_pModallessDlg;在视类的头文件添加文件包含:#include”DialogModalless.h”2.在构造函数中初始化:m_pModallessDlg=NULL;

3.在析构函数中释放:

if(m_pModallessDlg!=NULL)

{ deletem_pModallessDlg;//释放空间

}4.添加菜单消息响应函数,显示对话框。代码步骤3实现对话框的功能第2章对话框与控件2.3非模态对话框添加控件关联变量

控件 变量类型 变量名 IDC_LIST ClistCtrl m_List IDC_Tree CteeCtrl m_Tree2.添加消息响应函数(1)初始化函数:

CDialogModalless::OnInitDialog()(2)树控件节点选择改变函数:

CDialogModalless::OnSelchangedTree()调用的三个函数BuildJsj()BuildGl()BuildRj()小结第2章对话框与控件2.3非模态对话框1.树控件

TV_INSERTSTRUCT,HTREEITEMInsertItem(),GetSelectedItem(),GetItemText(),GetItem()2.列表控件

InsertColumn(),InsertItem(),SetItemText(),3.非模态对话框的显示

ShowWindow(SW_SHOW);4.创建对话框m_pModallessDlg=newCDialogModalless;m_pModallessDlg->Create(IDD_MODALLESS_DIALOG,this);2.4进度条对话框当程序中有一项任务需要较长时间时,一般可以显示一个进度条反映任务的完成情况。第2章对话框与控件本节在前一节程序的基础上,当选择“查看”菜单中的“进度条对话框”菜单项时,弹出左面的对话框。设置好每次前进百分比和每两次前进的时间间隔,单击“进度条”显示,观察进度条演示。程序的实现步骤编辑对话框资源,创建类显示对话框实现对话框的功能:添加控件关联变量添加消息响应函数第2章对话框与控件2.4进度条对话框步骤1编辑对话框资源第2章对话框与控件2.4进度条对话框ID:IDD_PROGRESS_DIALOGCaption:“ProgressDialog”Class:CDialogProgressID号控件属性IDC_PROGRESSProgressBorder:选中IDC_TIME_SLIDERSliderIDC_EDITEditBoxIDC_PERCENT_SPINSpin选中Autobuddy和SetbuddyintegerIDC_PROGRESS_BUTTONButtonCaption:进度条演示IDC_QUIT_BUTTONButtonCaption:退出注意:要保证Edit控件与Spin控件的TabOrder连续,且Edit控件在前。步骤2显示对话框第2章对话框与控件2.4进度条对话框使用类向导在视类中添加菜单的消息响应函数:Classname:CDialogViewObjectIDs:ID_VIEW_PROGRESSDIALOGMessages:COMMAND

在文件DialogView.cpp中包含头文件:#include"DialogProgress.h"voidCDialogView::OnViewProgressdialog

(){ //TODO:Addyourcommandhandlercodehere CDialogProgressdlg; dlg.DoModal();}步骤3实现对话框的功能第2章对话框与控件2.4进度条对话框添加控件关联变量

控件 变量类型 变量名IDC_PERCENT_SPINCSpinButtonCtrlm_SpinIDC_PROGRESSCProgressCtrlm_ProgressIDC_TIME_SLIDERCSliderCtrlm_Time2.添加消息响应函数(1)初始化函数:

CDialogProgress::OnInitDialog()(2)单击“进度条演示”按钮函数:

CDialogProgress::OnProgressButton()(3)单击“退出”按钮函数:

CDialogProgress::OnQuitButton(){OnOK();}小结第2章对话框与控件2.4进度条对话框1.进度条控件

SetRange(),GetRange(),SetPos(),GetPos(),OffsetPos()2.滑杆控件SetRange(),GetRange(),SetPos(),GetPos(),3.微调控件Autobuddy,Alignment

SetRange(),GetRange(),SetPos(),GetPos()4.其他Sleep()函数2.5属性页对话框属性页对话框将多个对话框集中起来,通过标签或按钮来激活各个页面。第2章对话框与控件本节在前一节程序的基础上,当选择“查看”菜单中的“属性页对话框”菜单项时,弹出左面的对话框。单击“学生守则”标签显示学生守则,单击“市民公约”显示市民公约。程序的实现步骤编辑对话框资源,创建类显示对话框实现对话框的功能:添加控件关联变量添加消息响应函数第2章对话框与控件2.5属性页对话框步骤1编辑对话框资源第2章对话框与控件2.5属性页对话框ID:IDD_TAB_DIALOGCaption:“TabDialog”Class:CDialogTab注意:由于Tab控件一般要与其它控件占用同一个位置,这样在编辑对话框资源时非常不方便,可以先将对话框调大,在不同位置调整好控件的大小及设置号属性后,再将这些控件放在同一个位置上。ID号控件属性IDC_TABTabControlBorder:选中IDC_STATIC1StaticTextCaption:学生守则:\n1...\n2...\n3...\n4...\n......,Clientedge:选中IDC_SCROLLBARVerticalScrollBarIDC_STATIC2StaticTextCaption:市民公约:\n1...\n2...\n3...\n4...\n......,Clientedge:选中ID_BUTTON_CANCELButtonCaption:退出步骤2显示对话框第2章对话框与控件2.5属性页对话框使用类向导在视类中添加菜单的消息响应函数:Classname:CDialogViewObjectIDs:ID_VIEW_TABMessages:COMMAND

在文件DialogView.cpp中包含头文件:#include"DialogTab.h"voidCDialogView::OnViewTab(){ CDialogTabdlg; dlg.DoModal();}步骤3实现对话框的功能第2章对话框与控件2.5属性页对话框添加控件关联变量

控件 变量类型 变量名IDC_SCROLLBAR CScrollBar m_ScrollBarIDC_TAB CTabCtrl m_Tab2.添加消息响应函数(1)初始化函数:

CDialogTab::OnInitDialog()(2)Tab控件页面选择改变的消息响应函数:

CDialogTab::OnSelchangeTab()(3)滚动条发生变化的消息响应函数

CDialogTab::OnVScroll()小结第2章对话框与控件2.5属性页对话框1.Tab控件

TC_ITEMInsertItem(),GetCurSel()

2.滚动条控件 SetScrollPos

(),GetScrollPos(),SetScrollRange(),3.其他

ShowWindow(SW_SHOW);

ShowWindow(SW_HIDE);2.6通用对话框在MFC中,提供了一些通用对话框类来实现Windows系统提供的通用对话框,包括文件对话框、颜色对话框、字体对话框、打印对话框和查找与替换对话框等。第2章对话框与控件本节在前一节程序的基础上,当选择“查看”菜单中的“通用对话框”菜单项时,弹出左面的对话框。再单击“打开”按钮,弹出“打开”对话框。选择一个文件,单击“打开”按钮,所选择的文件名显示在前面对话框的文本框中。程序的实现步骤编辑对话框资源,创建类显示对话框实现对话框的功能

——添加消息响应函数第2章对话框与控件2.6通用对话框步骤1编辑对话框资源第2章对话框与控件2.6通用对话框ID:IDD_COMMON_DIALOGCaption:“CommonDialog”Class:CDialogCommonID号控件属性IDC_STATICStaticTextCaption:请选择一个文本文件IDC_EDITEditBoxRead-only:选中IDC_OPEN_BUTTONButtonCaption:打开ID_QUITButtonCaption:退出步骤2显示对话框第2章对话框与控件2.6通用对话框使用类向导在视类中添加菜单的消息响应函数:Classname:CDialogViewObjectIDs:ID_VIEW_COMMONDIALOGMessages:COMMAND

在文件DialogView.cpp中包含头文件:#include"DialogCommon.h"voidCDialogView::OnViewCommondialog(){ CDialogCommondlg; dlg.DoModal();}步骤3实现对话框的功能第2章对话框与控件2.6通用对话框添加消息响应函数:

“打开”按钮的单击消息响应函数 CDialogCommon::OnOpenButton()

小结第2章对话框与控件2.6通用对话框CFileDialog类

构造函数

GetPathName()第3章菜单与控制条学习目标响应菜单消息和控制菜单状态使用快捷键快捷菜单编程实现动态菜单工具条编程状态条编程3.1菜单

通过选择菜单分别在视中画矩形和椭圆,通过另外两个菜单项控制“矩形”菜单项的状态,在菜单前显示“√”表示该菜单项当前被选中。还可以通过快捷键画矩形和椭圆。第3章菜单与控件条程序的实现步骤利用AppWizard生成单文档程序(MenuTest)编辑菜单资源添加菜单消息响应函数,实现画矩形和椭圆。编辑快捷键资源控制菜单的状态 第3章菜单与控件条3.1菜单步骤1生成程序框架(MenuTest)项目名称:MenuTest选择单文档界面应用程序步骤2编辑菜单资源CaptionIDPrompt画图(Pop-up选中)矩形(&R)\tCtrl+RID_DRAW_RECT视中画矩形椭圆(&C)\tAlt+CID_DRAW_CIRCLE在视中画椭圆第3章菜单与控件条3.1菜单在帮助子菜单后面再添加一个子菜单“画图”,包括两个菜单项。步骤3

添加菜单消息响应函数Classname:CMenuTestViewObjectIDs:ID_DRAW_RECT(ID_DRAW_CIRCLE)Messages:COMMAND第3章菜单与控件条3.1菜单voidCMenuTestView::OnDrawRect(){ CClientDCdc(this); dc.Rectangle(50,50,200,150);}voidCMenuTestView::OnDrawCircle(){ CClientDCdc(this); dc.Ellipse(250,50,400,150);}步骤4

编辑快捷键资源第3章菜单与控件条3.1菜单打开Workspace窗口的ResourceView标签,展开Accelerator资源,添加两个快捷键资源。IDKeyModifiersID_DRAW_RECTRCtrlID_DRAW_CIRCLECAlt步骤5 控制菜单的状态(1)第3章菜单与控件条3.1菜单1.在画图菜单中再添加三个菜单项CaptionIDPromptSeparator -------------------允许画矩形 ID_DRAW_ENABLE--------禁止画矩形 ID_DRAW_DISABLE--------2.在视类中添加一个记录当前“矩形”菜单项状态的变量 BOOLm_Enable;并在构造函数中初始化数据成员m_Enable

m_Enable=TRUE;步骤5 控制菜单的状态(2)第3章菜单与控件条3.1菜单3.添加上面两个菜单项的响应函数,改变m_Enable的值Classname:CMenuTestViewObjectIDs:ID_DRAW_ENABLE(ID_DRAW_DISABLE)Messages:COMMANDvoidCMenuTestView::OnDrawEnable(){ m_Enable=TRUE; }voidCMenuTestView::OnDrawDisable(){ m_Enable=FALSE; }步骤5 控制菜单的状态(3)第3章菜单与控件条3.1菜单4.添加“矩形”菜单的UPDATE_COMMAND_UI响应函数,控制菜单的状态Classname:CMenuTestViewObjectIDs:ID_DRAW_RECTMessages:UPDATE_COMMAND_UIvoidCMenuTestView::OnUpdateDrawRect(CCmdUI*pCmdUI){ pCmdUI->Enable(m_Enable);}步骤5 控制菜单的状态(4)第3章菜单与控件条3.1菜单5.添加“允许画矩形”和“禁止画矩形”菜单的UPDATE_COMMAND_UI响应函数,控制两个菜单项的状态Classname:CMenuTestViewObjectIDs:ID_DRAW_ENABLE(

ID_DRAW_DISABLE)Messages:UPDATE_COMMAND_UIvoidCMenuTestView::OnUpdateDrawEnable(CCmdUI*pCmdUI){ pCmdUI->SetCheck(m_Enable?1:0);}voidCMenuTestView::OnUpdateDrawDisable(CCmdUI*pCmdUI){ pCmdUI->SetCheck(m_Enable?0:1);}小结第3章菜单与控件条3.1菜单菜单:Popup,Separator编辑快捷键使用COMMAND消息响应菜单项的选择事件UPDATE_COMMAND_UI消息控制菜使用单项状态pCmdUI->Enable(true|false);pCmdUI->SetCheck(1|0);3.2快捷菜单

上一节程序的基础上,在视窗口内单击鼠标右键,弹出一个快捷菜单,菜单中包含“编辑矩形坐标”和“编辑椭圆坐标”,当选择“编辑矩形坐标”时,弹出一个对话框,允许输入矩形左上角坐标和右下角坐标,当选择“编辑椭圆坐标”时,也弹出一个对话框,用于输入椭圆外接矩形左上角坐标和右下角坐标。第3章菜单与控件条程序的实现步骤编辑快捷菜单资源显示跟踪菜单编辑对话框资源及对话框的功能添加菜单响应函数,实现程序功能第3章菜单与控件条3.2快捷菜单步骤1编辑快捷菜单资源再添加一个菜单资源(IDR_POPUP_MENU)

子菜单:Popup1选中Pop-upCaptionID

编辑矩形坐标ID_EDIT_RECT

编辑椭圆坐标ID_EDIT_CIRCLE选择与其关联的类为CMainFrame。第3章菜单与控件条3.2快捷菜单步骤2 显示快捷菜单Classname:CMainFrameObjectIDs:CMainFrameMessages:WM_CONTEXTMENU第3章菜单与控件条3.2快捷菜单函数:voidCMainFrame::OnContextMenu(CWnd*pWnd,CPointpoint)CMenu:LoadMenu GetSubMenu TrackPopupMenu TPM_CENTERALIGN 弹出式菜单的水平中心为point.x。 TPM_LEFTALIGN 弹出式菜单的左边位于point.x。 TPM_RIGHTALIGN 弹出式菜单的右边位于point.x。 TPM_LEFTBUTTON 弹出式菜单只跟踪鼠标左键。 TPM_RIGHTBUTTON弹出式菜单也跟踪鼠标右键。步骤3 编辑对话框资源及对话框的功能(1)第3章菜单与控件条3.2快捷菜单编辑对话框资源ID:IDD_DIALOG_EDIT,Class:CDlgEdit

控件IDCaption静态文本框IDC_STATIC左上角坐标(X1,Y1)静态文本框IDC_STATIC右下角坐标(X2,Y2)编辑框IDC_EDIT_X1

编辑框IDC_EDIT_Y1

编辑框IDC_EDIT_X2

编辑框IDC_EDIT_Y2

按钮控件IDOK确定按钮控件IDCANCEL取消步骤3 编辑对话框资源及对话框的功能(2)第3章菜单与控件条3.2快捷菜单添加控件关联变量控件变量类型 变量名IDC_EDIT_X1

int

m_nX1IDC_EDIT_Y1

int

m_nY1IDC_EDIT_X2

int

m_nX2IDC_EDIT_Y2

int

m_nY2步骤4 添加菜单响应函数,实现程序功能(1)第3章菜单与控件条3.2快捷菜单(1)在视类中添加控制矩形和椭圆位置和大小的变量 intm_nRectLeft; intm_nRectTop; intm_nRectRight; intm_nRectBottom; intm_nCircleLeft; intm_nCircleTop; intm_nCircleRight; intm_nCircleBottom;步骤4 添加菜单响应函数,实现程序功能(2)第3章菜单与控件条3.2快捷菜单(2)在视类的构造函数中初始化变量CMenuTestView::CMenuTestView(){ m_nRectLeft=50; m_nRectTop=50; m_nRectRight=200; m_nRectBottom=150; m_nCircleLeft=50; m_nCircleTop=50; m_nCircleRight=200; m_nCircleBottom=150;}步骤4 添加菜单响应函数,实现程序功能(3)第3章菜单与控件条3.2快捷菜单(3)修改视类中的OnDrawRect()和OnDrawCircle()函数

voidCMenuTestView::OnDrawRect(){ CClientDCdc(this); dc.Rectangle(m_nRectLeft,

m_nRectTop,

m_nRectRight,

m_nRectBottom);}voidCMenuTestView::OnDrawCircle(){ CClientDCdc(this); dc.Ellipse(m_nCircleLeft,

m_nCircleTop,

m_nCircleRight,

m_nCircleBottom);}步骤4 添加菜单响应函数,实现程序功能(4)第3章菜单与控件条3.2快捷菜单(4)添加快捷菜单消息响应函数

Class:CMenuTestView

ObjectIDs:ID_EDIT_RECT(ID_EDIT_CIRCLE)Message:COMMAND函数:voidCMenuTestView::OnEditRect()函数:voidCMenuTestView::OnEditCircle()在视类的实现文件中包含头文件:#include"DlgEdit.h"

小结第3章菜单与控件条3.2快捷菜单OnContextMenuCMenu:LoadMenu() TrackPopupMenu()

GetSubMenu()3.3动态菜单

在上一节程序的基础上,在快捷菜单中再添加两个菜单项,当选择“添加椭圆控制菜单”时,在画图菜单中的最后添加两个菜单项“允许画椭圆”和“禁止画椭圆”。通过这两个菜单项控制菜单项“椭圆”的状态。当选择“删除椭圆控制菜单”时,则删除这两个菜单项。第3章菜单与控件条程序的实现步骤编辑快捷菜单资源添加菜单响应函数加入动态菜单响应函数添加椭圆菜单状态控制函数第3章菜单与控件条3.3动态菜单步骤1编辑快捷菜单资源打开上节编辑的菜单资源IDR_POPUP_MENU,为其再增加两个菜单项如下:ID CaptionSeparatorID_ADD_MENU 增加椭圆控制菜单ID_DELETE_MENU 删除椭圆控制菜单第3章菜单与控件条3.3动态菜单步骤2 加入菜单响应函数

Classname:CMainFrameObjectIDs:ID_ADD_MENU(ID_DELETE_MENU)

Messages:WM_COMMAND第3章菜单与控件条3.3动态菜单函数:voidCMainFrame::OnAddMenu()函数:voidCMainFrame::OnDeleteMenu()CWind::GetMenuCMenu:GetMenuItemCount() GetSubMenu() GetMenuItemID() DeleteMenu() AppendMenu() 步骤3 加入动态菜单响应函数(1)第3章菜单与控件条3.3动态菜单(1)由于两个动态菜单项用于控制“椭圆”菜单的状态,在主框架类中添加一个变量记录选择的是哪个菜单。并在构造函数中初始化。CMainFrame::CMainFrame(){ //TODO:addmemberinitializationcodehere m_nSelectMenu=0;//0允许画椭圆}//1禁止画椭圆步骤3 加入动态菜单响应函数(2)第3章菜单与控件条3.3动态菜单(2)为了响应动态菜单的消息,重载主框架类的OnCmdMsg()函数ClassName:CMainFrameObjectsIDs:CMainFrameMessages:OnCmdMsg函数:CMainFrame::OnCmdMsg()用到的两个函数:DoSelectMenu()

DoUpdateSelectMenu()步骤4 添加椭圆菜单状态控制函数第3章菜单与控件条3.3动态菜单ClassName:CMainFrameObjectsIDs:ID_VIEW_CIRCLEMessages:UPDATE_COMMAND_UIvoidCMainFrame::OnUpdateDrawCircle(CCmdUI*pCmdUI){ if(m_nSelectMenu==0) pCmdUI->Enable(true); else pCmdUI->Enable(false);}小结第3章菜单与控件条3.3动态菜单CWnd类:GetMenu()

函数CMenu类GetMenuItemCount()函数GetSubMenu()GetMenuItemID()函数DeleteMenu()函数AppendMenu()函数OnCmdMsg消息3.4工具条

在上一节的基础上,加入另一个工具条。工具条上有三个按钮和一个组合框,三个按钮的功能分别是画矩形、画椭圆和画直线,当选择组合框中的某项时,弹出一个信息框。第3章菜单与控件条程序的实现步骤编辑工具条资源创建工具条在工具条上添加控件加入控件响应函数第3章菜单与控件条3.4工具条步骤1编辑工具条资源添加工具条资源:IDR_MYTOOLBAR在工具条上添加四个工具按扭其ID分别是: ID_DRAW_RECT,ID_DRAW_CIRCLE ID_DRAW_LINE,ID_COMBOBOX第3章菜单与控件条3.4工具条步骤2创建工具条(1)在类CMainFrame中定义工具条类的成员变量CToolBarm_wndMyToolBar;第3章菜单与控件条3.4工具条(2)在类CMainFrame的OnCreate函数中添加代码

函数:OnCreate()(3)添加工具条按钮的消息响应函数 由于矩形和椭圆按钮的ID和菜单项相同,具有相同的功能,只需添加画线按钮的消息响应函数:OnDrawLine()步骤3在工具条上添加组合框(1)在类CMainFrame中定义组合框类的成员变量CComboBoxm_ComboBox;第3章菜单与控件条3.4工具条(2)在类CMainFrame的OnCreate函数中添加代码

函数:OnCreate()步骤4加入组合框控件响应函数第3章菜单与控件条3.4工具条(1)在类CMainFrame的消息响应函数的声明位置添加消息响应函数的原形

afx_msgvoidOnSelchangeCombo();由于类向导只能将工具条伤得按钮做按钮对待,无法添加组合框的消息响应函数,需要手工处理。(2)在MainFrm.cpp的消息映射宏添加消息映射宏:

ON_CBN_SELCHANGE(ID_COMBOBOX,OnSelchangeCombo)(3)在MainFrm.cpp中添加函数定义:

函数:voidCMainFrame::OnSelchangeCombo()小结第3章菜单与控件条3.4工具条创建工具条CreateEx()LoadToolBar()SetButtonInfo()GetItemRect()在工具条上创建组合框Create()AddString()SetCurSel()手工添加消息响应函数消息映射函数声明函数定义3.5状态条

在上一节的基础上,在状态条上添加两个状态信息,用来指示鼠标在视图窗口中的位置。同时加入两个状态指示器,分别用来显示键盘上的Ctrl键和Shift键是否被按下。第3章菜单与控件条程序的实现步骤在文件MainFrm.cpp中,找到状态条indicators数组的定义处添加代码创建Ctrl键和Shift键状态指示器的字符串资源为状态条添加标识号在函数CMainFrame::OnCreate()函数中,添加状态条的设置代码显示控制键状态显示鼠标在视中的位置坐标第3章菜单与控件条3.5状态条步骤1.在文件MainFrm.cpp中的状态条indicators数组的定义处添加代码

staticUINTindicators[]={ ID_SEPARATOR,//statuslineindicator ID_SEPARATOR,//显示x坐标 ID_SEPARATOR,//显示y坐标 ID_INDICATOR_CTRL,//显示Ctrl键的状态 ID_INDICATOR_SHIFT,//显示Shift键的状态 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,};第3章菜单与控件条3.5状态条步骤2创建Ctrl键和Shift键状态指示器的字符串资源插入两个字符串资源ID CaptionID_INDICATOR_CTRLCtrlID_INDICATOR_SHIFTShift。第3章菜单与控件条3.5状态条步骤3为状态条添加标识号选择View菜单下的Res

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论