MFC编程示例参考_第1页
MFC编程示例参考_第2页
MFC编程示例参考_第3页
MFC编程示例参考_第4页
MFC编程示例参考_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

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

文档简介

1、1MFC基础2计算机实习n一、实习内容n二、演示例子n三、相关知识 1、对话框程序 2、控件使用 3、类使用 4、文件使用3一、实习内容n题目 实现一个基本的学生信息管理系统 4一、实习内容n存储介质:.txt文件(学号唯一)类别 姓名 学号 年龄 系别 实验室 发表文章B 张山 B098 23电信学院M 测试 Y094 23电信学院lab3M 周正 Y093 23电信学院lab2D 王丹 0102 29电信学院LAB9 20B 本科生M 硕士生D 博士生5一、实习内容n程序框架:1、基于对话框应用程序。6一、实习内容n程序框架:2、基于控制台的应用程序7一、实习内容n程序功能: 1. 能够显

2、示学生信息 2. 能够增加、删除、编辑学生信息 3. 能够按照学号或姓名查询学生信息 4. 能够分类统计(可选)、排序(可选) 5. 能够保存学生信息8二、演示例子n1、基于对话框的例子9二、演示例子n2、基于控制台的例子10三、相关知识1、对话框程序2、控件使用 标签、图片、编辑框、按钮、组合框、列表框等。3、类使用4、文件使用111、对话框程序n1.1步骤 1、选择工程类别 MFC AppWizard(exe) 2、选择应用程序类别 Dialog Based 3、选择应用程序外观 4、选择应用程序风格 5、确认相关类名称 6、完成,显示主窗口121、选择工程类别MFC AppWizard(

3、exe)选择MFC AppWizard(exe)132、选择应用程序类别 Dialog Based选择Dialog Based14 3、选择应用程序外观 去掉该复选框154、选择应用程序风格165、确认相关类名称176、完成,显示主窗口控件面版主对话框对话框资源入口Resource视图Class视图File视图18对话框或控件n共同特征 1、Resource :外观 2、Class:逻辑实现 3、File:物理存储19运行20说明n1、CStep1App类 应用程序类,该类中包含程序的入口函数: BOOL CStep1App:InitInstance() CStep1Dlg dlg; m_pM

4、ainWnd = &dlg; 对应的文件Step1.h和Step1.cpp。工程名称Step121说明n2、CStep1Dlg 主对话框类,却省应用程序的主窗口。 /数据交换的支持函数 void DoDataExchange(CDataExchange* pDX) /对话框初始化函数 BOOL OnInitDialog() /屏幕刷新函数 void OnPaint() 对应的文件Step1Dlg.h和Step1Dlg.cpp。由应用程序类调用222、控件使用静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签23二、常用控件资源静态图片树形视图按钮复选框单选框组合框编辑框

5、组框静态文本24二、常用控件资源n什么是控件? 具有外观、属性和行为的元素,也就是说每一种控件=resource+class。比如编辑框CEdit类,按钮CButton类251、静态控件n静态控件是用来显示一个字符、边框、图标、位图等,一般不接受用户的输入,也不产生任何事件。261、静态控件静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签27静态图片n适用范围 一般用于应用程序的logo图片n使用步骤 1、添加图片资源 2、将控件和图片资源关联28 1)添加图片资源Resource点击鼠标右键,选择Insert29 1)添加图片资源弹出添加资源窗口选择bitmap用于

6、手绘图案选择已有图案30 2)将控件和图片资源关联1、用鼠标选中“静态图片”,并拖入对话框中2、点击鼠标右键,弹出属性对话框类型选择Bitmap资源ID312)将控件和图片资源关联32静态文本和组框n适用范围 一般用于静态的说明文字和边框,与其他控件共同使用。n使用步骤 1、将控件拖入对话框 2、设置属性332、编辑框静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签342、编辑框n适用范围 一般用于可编辑的单行或多行文字。n编辑框相关知识 resource: 资源外观,有唯一的ID class:CEdit 成员变量:属性 成员函数:设置属性和行为 CEdit的对象:控

7、件变量352、编辑框如何使用编辑框? 1、将控件拖入对话框 2、设置属性 3、编程对其进行控制 1)设置关联控件变量 2)使用变量调用相关成员函数362、编辑框属性多行文本显示*只读373、编辑框的控制n1)直接调用成员函数 /设置获取编辑框文字 SetWindowText(LPTSTR); GetWindowText(LPTSTR); /编辑框是否变灰 EnableWindow(BOOL); /编辑框是否可见 ShowWindow(int); 38例1:编辑框使用n设置编辑框的文字并使其变灰 1、设置控件变量 点击View-ClassWizard 2、在窗口初始化时添加代码 391、设置控件

8、变量点击添加变量选择Control401、设置控件变量411、设置控件变量系统自动添加代码如下 / Dialog Data/AFX_DATA(CStep1Dlg)enum IDD = IDD_STEP1_DIALOG ;CEditm_edit;/AFX_DATA所有和控件映射的变量均在此42数据交换函数中的生成代码系统自动添加代码如下void CStep1Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CStep1Dlg)DDX_Control(pDX, IDC_EDIT1, m_e

9、dit);/AFX_DATA_MAP控件ID映射变量432、在窗口初始化时添加代码BOOL CStep1Dlg:OnInitDialog()/ TODO: Add extra initialization herem_edit.SetWindowText(welcome); m_edit.EnableWindow(false);return TRUE; / return TRUE unless you set the focus to a control44运行有文字,变灰453、编辑框的控制n对话框数据交换机制对话框数据交换机制 DDX(Dialog Data exchange),用于控件初

10、始化和获取用户输入的数据。 对话框数据验证DDV(Dialog data validation),用于对话框中输入数据的合法性检验。 用户只关心编辑框的内容,不关心编辑框的属性,可以使用内容相关变量操作编辑框。463、编辑框的控制n通常使用UpdateData函数进行数据传递。 UpdateData(true):控件-成员变量 UpdateData(false):成员变量-控件n进行数据交换时UpdateData函数将设置一个CDataExchange对象,并调用对话框中的DoDataExchange重载函数。47例2:编辑框使用n使用DDX和DDV控制编辑框的内容和长度 1、变更控件变量并注

11、释掉OnInitDialog()中的原有代码。 2、 在OnInitDialog()中添加新代码 3、 运行481、变更控件变量删除原有变量,增加新的变量选择Value字符串选择CString整型选择int、UINT、long等491、变更控件变量设置编辑框内容的长度50头文件中的生成代码 / Dialog Data/AFX_DATA(CStep1Dlg)enum IDD = IDD_STEP1_DIALOG ;CStringm_edit;/AFX_DATA51构造函数中的生成代码CStep1Dlg:CStep1Dlg(CWnd* pParent /*=NULL*/): CDialog(CSt

12、ep1Dlg:IDD, pParent)/AFX_DATA_INIT(CStep1Dlg)m_edit = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);52数据交换函数中的生成代码void CStep1Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CStep

13、1Dlg)DDX_Text(pDX, IDC_EDIT1, m_edit);DDV_MaxChars(pDX, m_edit, 4);/AFX_DATA_MAP控件ID映射变量最大字符数532、 在OnInitDialog()中添加新代码BOOL CStep1Dlg:OnInitDialog()/ TODO: Add extra initialization here /m_edit.SetWindowText(welcome); /m_edit.EnableWindow(false);m_edit = 123;UpdateData(false);return TRUE; / return T

14、RUE unless you set the focus to a control543、 运行用户只能键入4个字符55注意n1、每一个控件只能关联一个控件变量。n2、Control类型的变量只能在窗口弹出时使用。可以用来改变编辑框的内容和属性。n3、Value类型的变量只能改变编辑框的内容。563、编辑框控制n消息机制 控件响应键盘或鼠标的操作,称为事件。发送消息给控件;控件获取消息后,进行处理。 EN_CHABGE: 内容改变 EN_SETFOCUS: 获取焦点 EN_MAXTEXT: 插入最多字符n入口 菜单View-ClassWizard 573、编辑框消息选择控件控件消息58例3(接

15、例2):n当编辑框的内容超出最大限制时,弹出警告框 步骤: 1、选择IDC_EDIT1的EN_ MAXTEXT消息 2、系统自动产生对于该消息的消息映射,并生成处理函数 3、在处理函数中,添加弹出警告框的代码591、选择IDC_EDIT1的EN_MAXTEXT消息控件消息添加处理函数60消息映射BEGIN_MESSAGE_MAP(CStep1Dlg, CDialog)/AFX_MSG_MAP(CStep1Dlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_EN_MAXTEXT(IDC_EDIT1, OnMaxtextEdit1)/AFX_MSG_MAPEND_ME

16、SSAGE_MAP()控件ID消息名称处理函数61消息处理函数(头文件)/ Generated message map functions/AFX_MSG(CStep1Dlg)virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnMaxtextEdit1();/AFX_MSGDECLARE_MESSAGE_MAP()消息处理函数62处理函数中添加代码void CStep1Dlg:OnMaxtextEdit1 () / TODO: Add your c

17、ontrol notification handler code hereUpdateData(true);AfxMessageBox(m_edit);63运行643、按钮静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签653、按钮n常见的按钮分为三类 1、按钮 2、单选框 3、复选框n消息映射 BN_CLICKED BN_DOUBLE_CLICKED66例4:按钮的使用IDC_RADIO1IDC_RADIO2IDC_CHECK1IDC_CHECK2IDC_CHECK3IDC_BUTTON167例4n设置并获取单选框和复选框的值 1) 设置控件变量 2) 添加按钮的消

18、息映射 3) 添加单选框的消息映射 4) 在按钮和单选框的消息处理函数中添加代码 5) 运行681) 设置控件变量单选框必须选中Group去掉auto691) 设置控件变量IDC_CHECK1IDC_CHECK2IDC_CHECK3IDC_RADIO1IDC_RADIO2702) 添加按钮的消息映射713) 添加单选框的消息映射724) 在消息处理函数中添加代码void CStep1Dlg:OnRadio1() m_radmale.SetCheck(true); m_radfemale.SetCheck(false);void CStep1Dlg:OnRadio2() m_radmale.Se

19、tCheck(false); m_radfemale.SetCheck(true);734) 在消息处理函数中添加代码void CStep1Dlg:OnButton1() CString str;if(m_radmale.GetCheck()m_radmale.GetWindowText(str);elsem_radfemale.GetWindowText(str);UpdateData(true);if(m_chk1) str+=“、游泳” ; if(m_chk2) str+=“、跑步” ;if(m_chk3) str+=“、打球” ;MessageBox(str,测试, MB_OKCANC

20、EL);745) 运行754、组合框静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签764、组合框n组合框控件有三种风格: Simple:包含一个编辑框和总是显示的列表框。 Drop Down:仅当单击下滚箭头时才出现列表框。 Drop List:仅当单击下滚箭头时才出现列表框。但是 没有编辑功能,用户只能选择列表中已有的项。774、组合框n组合框的事件 CBN_SELCHANGE 如果选择项改变 CBN_EDITCHANGE 如果编辑框种文字改变784、组合框的方法 1.获取组合框中的项数 int GetCount(); 2.获取组合框中指定位置的文字 void G

21、etLBText( int nIndex, CString& rString )794、组合框的方法3.获取/设置当前选择项 SetCurSel(int index); int GetCurSel();4.添加/删除文字项 int AddString(LPCTSTR lpszString ) int InsertString( int nIndex, LPCTSTR lpszString ); int DeleteString( UINT nIndex );804、组合框的方法n5.从组合框中查询指定字符串 int FindString( int nStartAfter, LPCTSTR lp

22、szString ) int FindStringExact( int nIndexStart, LPCTSTR lpszFind )81例5n向组合框添加数据,并获取所选的数据 1、设置控件变量 2、设置控件属性 3、在OnInitDialog()中添加初始化代码 4、添加组合框消息映射CBN_SELCHANGE 5、在处理函数中添加代码82 1、设置控件变量832、设置控件属性可以直接在添加数据CTRL+ENTER换行组合框风格843、在OnInitDialog()中添加初始化代码BOOL CStep1Dlg:OnInitDialog() m_combo1.AddString(“24);

23、m_combo1.InsertString(0,“20”); m_combo1.SetCurSel(3); return TRUE; / return TRUE unless you set the focus to a control85运行测试864、添加组合框消息映射CBN_SELCHANGE 875、在处理函数中添加代码void CStep1Dlg:OnSelchangeCombo1() / TODO: Add your control notification handler code hereint index = m_combo1.GetCurSel();CString str;

24、m_combo1.GetLBText(index,str);AfxMessageBox(str);88运行895、树形视图静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签905、树形视图IDC_TREE1Linesbutton91设置控件属性风格92常用树形控件的事件n树形控件 NM_CLICKED NM_RCLICKED NM_SETFOCUSn树结点 TVN_SELCHANGED TVN_ITEMEXPANDED TVN_DELETEITEM93树形控件的方法1、插入/删除结点 HTREEITEM InsertItem(LPCTSTR lpszItem, HTRE

25、EITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST ); BOOL DeleteItem( HTREEITEM hItem ); BOOL DeleteAllItems( );2、获取选中的结点 HTREEITEM GetSelectitem();94树形控件的方法3、设置/获取已知结点的标题 CString GetItemText(HTREEITEM hitem) BOOL SetItemText( HTREEITEM hItem, LPCTSTR lpszItem );4、获取结点之间的关系 BOOL ItemHasChi

26、ldren(HTREEITEM hItem); HTREEITEM GetChildItem(HTREEITEM hItem) HTREEITEM GetNextSiblingItem(HTREEITEM hItem) 95树形控件的方法n5、结点展开/收缩BOOL Expand( HTREEITEM hItem, UINT nCode );ncode的取值: TVE_COLLAPSE TVE_COLLAPSERESET TVE_EXPAND TVE_TOGGLE 96例6n添加并获取选中的树结点 1) 设置控件变量 2) 在OnInitDialog()初始化 3) 添加树形控件的消息映射 4

27、) 在消息处理函数中添加代码 5) 运行971) 设置控件变量982) 在OnInitDialog()初始化BOOL CStep1Dlg:OnInitDialog() HTREEITEM root = m_tree1.InsertItem(本科生);m_tree1.InsertItem(张三,root);m_tree1.InsertItem(李四,root); m_tree1.Expand(root,TVE_EXPAND); root = m_tree1.InsertItem(研究生);m_tree1.InsertItem(王单,root);m_tree1.InsertItem(丁一,root

28、);993) 添加树形控件的消息映射1004) 在消息处理函数中添加代码void CStep1Dlg:OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;/ TODO: Add your control notification handler code hereHTREEITEM hitem = m_tree1.GetSelectedItem();m_edit = m_tree1.GetItemText(hitem);if(m_edit!=本科生

29、& m_edit!=研究生)UpdateData(false);*pResult = 0;1015) 运行和树形控件结点对应102例7:删除当前选中结点的所有孩子HTREEITEM hitem = m_tree1.GetSelectedItem();if (m_tree1.ItemHasChildren(hitem) HTREEITEM hNext; HTREEITEM hChild= m_tree1.GetChildItem(hitem); while (hChild!= NULL) hNext = m_tree1.GetNextSiblingItem( hChild); m_tree1.D

30、eleteItem(hChild); hChild = hNext; 1035、列表视图静态图片编辑框静态文本组框按钮复选框单选框组合框列表框列表视图树形视图标签1045、列表视图的风格iconsmalliconlistreport1055、列表视图的事件n列表控件 NM_CLICKED NM_RCLICKED NM_SETFOCUSn列表数据 LVN_ITEMCHANGED LVN_COLUMNCLICK LVN_DELETEITEM LVN_INSERTITEM1065、列表视图的方法1、添加/删除列 int InsertColumn( int nCol, LPCTSTR lpszColu

31、mnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1 ); BOOL DeleteColumn( int nCol );1075、列表视图的方法2、添加/删除数据int InsertItem( int nItem, LPCTSTR lpszItem );int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );BOOL DeleteItem( int nItem );BOOL DeleteAllItems( );1085、列表视图的方法3、获取列

32、表中数据 CString GetItemText( int nItem, int nSubItem); BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );4、列标与图标关联 CImageList* SetImageList( CImageList* pImageList, int nImageList ); CImageList* GetImageList( int nImageList );1095、列表视图的方法5、获取列表中选中的行 POSITION GetFirstSelectedItemPosition( );

33、int GetNextSelectedItem( POSITION& pos );1106、对话框1、有模式对话框 比如设置属性对话框,一般包括OK和Cancle按钮,使用DoModal()函数调用,利用其返回值判断该窗口由哪个按钮关闭。2、无模式对话框 比如查找对话框.111例8n如何新建一个有模式对话框? 1、新建对话框资源 2、设置对话框属性 3、生成对应的对话框类 4、测试对话框1121、新建对话框资源1、点击鼠标右键2、选择Insert Dialog1131、新建对话框资源资源ID对话框外观1142、设置对话框属性缺省ID字体标题是否有菜单风格边框窗口右上角1153、生成对应的对话框

34、类点击右键菜单classwizard弹出1163、生成对应的对话框类类名对应源文件基类名资源ID1173、生成对应的对话框类资源ID和类的对应enum IDD=IDD_DIALOG11184、测试对话框1、在主对话框中添加 #include dialog1.h 2、在主对话框的OnButton1()函数中添加 CDialog1 dlg1; if(dlg1.DoModal()=IDOK)AfxMessageBox(点击OK按钮); else AfxMessageBox(点击Cancle按钮);1195、运行120例9:在另一个窗口显示列表框n步骤 1) 设置图标 2) 设置列表框变量 3) 设置

35、列表外观属性 4) 在CDialog1类的OnInitDialog中添加代码将图标与列表相连,设置列表列标题 5) 在CStep1Dlg类的OnButton1()中添加代码初始化列表视图数据 6) 运行121 1) 设置图标在资源视图中添加三个ICON1222) 设置列表变量设置控件变量1233) 设置列表外观属性风格单选1244) 在OnInitDialog中添加代码将图标与列表相连1、首先需要在CDialog1中添加成员变量 public:CImageList *m_pImageList;/用来传递来自主窗口的数据 CString name; CString gender;CString

36、age;1252、添加OnInitDialog()事件1264) 在OnInitDialog中添加代码将图标与列表相连BOOL CDialog1:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereCStep1App *pApp = (CStep1App *)AfxGetApp();m_pImageList = new CImageList();m_pImageList-Create(16,16,ILC_COLOR32,0,10);m_pImageList-Add(pApp-LoadIcon(ID

37、I_ICON1);m_pImageList-Add(pApp-LoadIcon(IDI_ICON2);m_pImageList-Add(pApp-LoadIcon(IDI_ICON3);m_list.SetImageList(m_pImageList,LVSIL_SMALL);创建16*16的32位色的图标列表将图标调入内存图标与列表关联1275) 在OnInitDialog中添加代码初始化列表视图BOOL CDialog1:OnInitDialog() /添加列 m_list.InsertColumn(0,姓名,LVCFMT_CENTER,60,-1); m_list.InsertColum

38、n(1,年龄,LVCFMT_CENTER,60,0); m_list.InsertColumn(2,性别,LVCFMT_CENTER,60,1); /添加数据 m_list.InsertItem(0,name,1); m_list.SetItemText(0,1,gender); m_list.SetItemText(0,2,age);1285)为主窗口的“确定”按钮添加事件及代码void CStep1Dlg:OnOK() / TODO: Add extra validation hereCDialog1 dlg1;UpdateData(false); = m_edit;dlg1.gender = m_rad

温馨提示

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

评论

0/150

提交评论