Visual C++ 6.0 实例教程(全套课件)

上传人:花开****07 文档编号:60392586 上传时间:2022-03-07 格式:PPT 页数:313 大小:1.94MB
收藏 版权申诉 举报 下载
Visual C++ 6.0 实例教程(全套课件)_第1页
第1页 / 共313页
Visual C++ 6.0 实例教程(全套课件)_第2页
第2页 / 共313页
Visual C++ 6.0 实例教程(全套课件)_第3页
第3页 / 共313页
资源描述:

《Visual C++ 6.0 实例教程(全套课件)》由会员分享,可在线阅读,更多相关《Visual C++ 6.0 实例教程(全套课件)(313页珍藏版)》请在装配图网上搜索。

1、Visual C+6.0实例教程实例教程第2章 文档和视第3章 对话框与控件第4章 菜单、快捷键和控制条第5章 图形操作第6章 文件操作第7章 MFC通用类第8章 异常处理和诊断第9章 多线程第2章 文档和视 内容摘要:1. 通过视类与用户交互2. 通过视类与用户交互返回目录2.1 通过视类与用户交互通过视类与用户交互 学习目标1. 在程序中响应鼠标消息 2. 在程序中响应键盘消息返回第2章程序的实现步骤1.利用AppWizard生成单文档程序框架(DocView )2.为视类添加数据成员 BOOL m_bMouseDown; /标识鼠标左键是否按下HCURSOR m_hCross; /十字型

2、鼠标句柄HCURSOR m_hArrow; /标准型鼠标句柄CPoint m_ptOld; /临时点CPoint m_ptStart; /画线的起始点3. 在构造函数中初始化成员变量 CDocViewView:CDocViewView()m_bMouseDown = false;m_hCross = AfxGetApp()-LoadStandardCursor(IDC_CROSS);m_hArrow = AfxGetApp()-LoadStandardCursor(IDC_ARROW);void CDocViewView: OnLButtonDown (UINT nFlags, CPoint

3、point) / TODO: Add your message handler code here and/or call defaultm_bMouseDown = true; / 鼠标左键按下m_ptStart = point; / 画线的起点m_ptOld = point; / 临时点SetCapture(); / 将鼠标消息发送到视窗口CRect rect;GetClientRect(&rect); / 得到客户窗口的大小ClientToScreen(&rect); / 将当前窗口坐标转换成屏幕坐标ClipCursor(&rect); / 把鼠标限定在其参数指定的矩形区域内SetCur

4、sor(m_hCross);/ 设置鼠标形状为十字形CView:OnLButtonDown(nFlags, point);4为视类添加鼠标动作响应函数 void CMyDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif( m_bMouseDown )CClientDC dc(this);dc.SetROP2( R2_NOT );dc.MoveTo( m_ptStart );/这两行代码擦除从起点(鼠标按下点)到dc.Lin

5、eTo( m_ptOld );/上次鼠标移动到的位置之间的临时线dc.MoveTo( m_ptStart );/这两行代码从起点到鼠标当前位置画线dc.LineTo( point );/ m_ptOld = point; /鼠标当前位置在下一次鼠标移动事件看来就是旧位置CView:OnMouseMove(nFlags, point);4为视类添加鼠标动作响应函数 void CMyDrawView:OnLButtonUp(UINT nFlags, CPoint point) if( m_bMouseDown )m_bMouseDown = false;ReleaseCapture();ClipC

6、ursor( NULL );CClientDC dc(this);dc.SetROP2( R2_NOT );dc.MoveTo( m_ptStart ); /这两行代码擦除从起点(鼠标按下点)到dc.LineTo( m_ptOld ); /上次鼠标移动到的位置之间的临时线 dc.SetROP2( R2_COPYPEN );dc.MoveTo( m_ptStart ); /这两行代码从起点到鼠标当前位置画线dc.LineTo( point ); / SetCursor(m_hArrow); /设置鼠标形状为标准箭头形CView:OnLButtonUp(nFlags, point);程序的实现步骤

7、_21为视类添加数据成员为视类添加数据成员 int m_nLine; /记录已输入字符行数CString m_strDisplay; /保存当前字符串的变量2. 在构造函数中初始化成员变量 CDocViewView:CDocViewView()/ TODO: add construction code herem_nLine = 0;m_bMouseDown = false;m_hCross = AfxGetApp()-LoadStandardCursor(IDC_CROSS);m_hArrow = AfxGetApp()-LoadStandardCursor(IDC_ARROW); 3为视类

8、添加键盘消息响应函数 void CDocViewView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) if(nChar = VK_RETURN) /如果按下回车键m_strDisplay.Empty();m_nLine+;else if(m_strDisplay.GetLength() MoveTo(m_ptStart);pDC-LineTo(m_ptEnd);程序的实现步骤2在文档类中添加保存数据的变量 public:CString m_strLastLine;CStringList m_strList;CPtrList m_LineList;

9、3修改视类成员函数OnButtonUp()和OnChar()程序的实现步骤void CDocViewView:OnLButtonUp(UINT nFlags, CPoint point) if( m_bMouseDown )m_bMouseDown = false;ReleaseCapture();ClipCursor( NULL );CClientDC dc(this);dc.SetROP2( R2_NOT );dc.MoveTo( m_ptStart );dc.LineTo( m_ptOld );dc.SetROP2( R2_COPYPEN );dc.MoveTo( m_ptStart )

10、;dc.LineTo( point );CDocViewDoc *pDoc = GetDocument(); /得到文档类指针CLine *pLine = new CLine(m_ptStart,point); /创建CLine对象pDoc-m_LineList.AddTail( (void *) pLine); /将pLine加入到链表中SetCursor(m_hArrow); /设置鼠标形状为标准箭头形CView:OnLButtonUp(nFlags, point);程序的实现步骤void CDocViewView:OnChar(UINT nChar, UINT nRepCnt, UINT

11、 nFlags) CDocViewDoc *pDoc = GetDocument(); if(nChar = VK_RETURN)pDoc-m_strList.AddTail(m_strDisplay);pDoc-m_strLastLine.Empty();m_strDisplay.Empty();m_nLine+;else if(m_strDisplay.GetLength() m_strLastLine = m_strDisplay;CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);int nLineHeight = tm.tm

12、Height + tm.tmExternalLeading;dc.TextOut(0, m_nLine * nLineHeight, m_strDisplay);CView:OnChar(nChar, nRepCnt, nFlags);程序的实现步骤void CDocViewDoc:DrawLine(CDC *pDC)CLine *pLine;POSITION pos = m_LineList.GetHeadPosition();for(; pos != NULL; m_LineList.GetNext(pos)pLine = (CLine *) m_LineList.GetAt(pos);p

13、Line-Draw(pDC); 4. 在文档类中添加重画直线和重写文本的函数 程序的实现步骤void CDocViewDoc:DrawText(CDC *pDC)TEXTMETRIC tm;pDC-GetTextMetrics(&tm);int nLineHeight = tm.tmHeight + tm.tmExternalLeading;CString str;int line = 0;POSITION pos = m_strList.GetHeadPosition();for( ; pos != NULL; m_strList.GetNext(pos) )str = m_strList.

14、GetAt(pos);pDC-TextOut( 0, line*nLineHeight, str );line+;pDC-TextOut( 0, line*nLineHeight, m_strLastLine );程序的实现步骤void CDocViewView:OnDraw(CDC* pDC)CDocViewDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDoc-DrawLine(pDC);pDoc-DrawText(pDC);5修改视类成员函数OnDraw() 返

15、回第2章第第3章章 对话框与控件对话框与控件 内容摘要: 1.使用对话框与控件 2.模态对话框 3.非模态对话框 4.进度条对话框 5.属性页对话框6.使用通用对话框 返回目录3.1 使用对话框与控件使用对话框与控件 程序的实现步骤1.利用AppWizard生成多文档程序(Dialog )2.编辑口令对话框资源 3.添加控件关联变量 4.添加代码 返回第3章步骤1 生成程序框架(Dialog )1.项目名称: Dialog 2.选择多文档界面应用程序(Multiple document)步骤2 编辑口令对话框资源 添加控件:IDC_STATIC Static Text Caption:请输入口

16、令IDC_STATIC Static Text Caption:口令为一个0 - 9999之间的整数 Client edge、Static edge和Modal frame选中IDC_PASSWORD_EDIT Edit Box Password :选中IDOK Button Caption:确定IDCANCEL Button Caption:取消ID: IDD_PASSWORD_DIALOG Caption: “口令”Class: CPasswordDialog 步骤3 添加控件关联变量 IDC_PASSWORD_EDIT int m_Password Minimum Value : 0Ma

17、ximum Value : 9999步骤4 显示对话框 在文件Dialog.cpp的头部,加入下面的包含语句 #include “PasswordDialog.h”步骤4 显示对话框 BOOL CDialogApp:InitInstance() CPasswordDialog cDlg; /声明CPasswordDialog类的一个对象 if( cDlg.DoModal() = IDOK ) /用户按了确定按钮 if( cDlg.m_Password != 1925 ) /口令为整数1925 /如果口令不对,则显示出错信息,然后程序结束AfxMessageBox(口令错误,确定后将退出程序。)

18、;return FALSE;else /如果按下取消按钮,程序也结束 return FALSE;return TRUE; 3.2 模态对话框模态对话框 概念概念 模态对话框弹出后,独占了系统资源,只有在关闭该对话框后才可能继续执行程序的其他代码,不能够在关闭对话框之前执行应用程序其他部分的代码。模态对话框一般要求用户做出某种选择,如前面例程中的口令对话框将一直出现并等待用户输入口令 。返回第3章程序的实现步骤在上一节程序的基础上在上一节程序的基础上1.添加菜单资源和菜单响应函数 2.编辑对话框资源和创建对话框类 3.添加消息响应函数和代码 步骤1 添加菜单资源和菜单响应函数 在在“查看(查看(

19、V)”菜单中添加以下菜单项菜单中添加以下菜单项 Separator ID_VIEW_MODALDIALOG 模态对话框(&M)ID_VIEW_MODALLESSDIALOG 非模态对话框(&E)ID_VIEW_PROGRESSDIALOG进度条对话框(&R)ID_VIEW_PROPERTIES 属性页对话框(&P)ID_VIEW_COMMONDIALOG通用对话框(&C)步骤2 编辑对话框资源 IDC_SEX1 Radio Button Caption: 男 Group:选中IDC_SEX2 Radio Button Caption: 女IDC_INSTEREST1 Check Box Cap

20、tion: 登山 Group:选中IDC_INSTEREST2 Check Box Caption: 游泳IDC_INSTEREST3 Check Box Caption: 看书IDC_INSTEREST4 Check Box Caption: 玩游戏IDC_COMBO Combo BoxIDC_EDIT Edit BoxID: IDD_MODAL_DIALOGCaption: “Modal Dialog”Class: CDialogModal 添加控件:步骤3 添加控件关联变量 IDC_COMBO CComboBox m_Combo; IDC_SEX1 CButtonm_Radio; IDC

21、_EDIT CString m_Edit;步骤4 显示对话框 1. 菜单响应函数 void CDialogView:OnViewModaldialog() CDialogModal m_Dlg;m_Dlg.DoModal();2. 对话框响应函数 BOOL CDialogModal:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herem_Radio.SetCheck(1); /把男设置为默认值m_Combo.InsertString(0,小学); /往Combo Box加入选项m_Combo.In

22、sertString(1,初中);m_Combo.InsertString(2,高中);m_Combo.InsertString(3,大学);m_Combo.InsertString(4,本科以上.);m_Combo.SetCurSel(0); /把小学设置为默认值return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CDialogModal:OnOk() / TODO: Add your control n

23、otification handler code hereCString str;str.Empty();if(m_Radio.GetCheck()str += 先生;elsestr += 小姐;str += 你好,你的爱好:;BOOL flag=0;CButton *p;/得到指向IDC_INSTEREST1的指针p = (CButton *)GetDlgItem(IDC_INSTEREST1);if(p-GetCheck() /判断登山是否被选中str += 登山 ;flag = 1;/得到指向IDC_INSTEREST2的指针p = (CButton *)GetDlgItem(IDC_I

24、NSTEREST2);if(p-GetCheck() /判断游泳是否被选中str += 游泳 ;flag = 1;/得到指向IDC_INSTEREST3的指针p = (CButton *)GetDlgItem(IDC_INSTEREST3);if(p-GetCheck() /判断看书是否被选中str += 看书 ;flag = 1;/得到指向IDC_INSTEREST4的指针p = (CButton *)GetDlgItem(IDC_INSTEREST4);if(p-GetCheck() /判断玩游戏是否被选中str += 玩游戏 ;flag = 1;if (!flag)str += 不知道;

25、str += ,学历:;int number;CString temp;number = m_Combo.GetCurSel(); /得到当前被选中项的序号m_Combo.GetLBText(number,temp); /得到序号为number的项的內容str += temp;m_Edit = str;UpdateData(false); /更新文本框中的内容 3.3 非模态对话框非模态对话框 概念概念 非模态对话框弹出后,程序可以在不关闭该对话框的情况下继续执行,在转入到应用程序其他部分的代码时可以不需要用户做出响应。非模态对话框一般用来显示信息,或者实时地进行一些设置。 返回第3章程序的实

26、现步骤在上一节程序的基础上在上一节程序的基础上1.编辑对话框资源和创建对话框类 2. 显示非模态对话框 3.实现对话框的功能 步骤1 编辑对话框资源 ID: IDD_MODALLESS_DIALOG Caption: “Modalless Dialog”Class: CDialogModalless 添加控件:ID号号控件控件属性属性IDC_TREETree Control 选中复选框选中复选框Has buttons,Has lines和和Lines at rootIDC_LISTList ControlStyles|View:ReportID_OKButtonCaption:确定:确定步骤2

27、 显示非模态对话框 1在视类中添加对话框成员指针 ,并包含对话框头文件public:CDialogModalless* m_pModallessDlg;并包含对话框头文件#include“DialogModalless.h”2添加消息响应函数 void CDialogView:OnViewModallessdialog() / TODO: Add your command handler code here/如果指针指向NULL,说明对话框还没有创建,则动态创建if(m_pModallessDlg=NULL)m_pModallessDlg=new CDialogModalless;m_pMod

28、allessDlg-Create(IDD_MODALLESS_DIALOG,this);/显示非模态对话框m_pModallessDlg-ShowWindow(SW_SHOW); CDialogView:CDialogView()/ TODO: add construction code herem_pModallessDlg = NULL; /初始化指针 CDialogView:CDialogView()if(m_pModallessDlg != NULL)delete m_pModallessDlg; /释放空间 3修改视类的构造函数和析构函数 步骤3 实现对话框的功能 1添加控件关联变量

29、添加控件关联变量控件 变量类型 变量名IDC_LIST CListCtrl m_ListIDC_Tree CTeeCtrl m_Tree2. 添加消息响应函数添加消息响应函数 BOOL CDialogModalless:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization here/往List控件中插入一列m_List.InsertColumn(0, 文件名, LVCFMT_LEFT, 150, -1);TV_INSERTSTRUCTTreeItem;HTREEITEMhTreeItem;TreeItem.

30、hInsertAfter = TVI_LAST;TreeItem.item.mask = TVIF_TEXT|TVIF_PARAM;/第一级CString str = D:;TreeItem.hParent = TVI_ROOT; /父级为根部TreeItem.item.pszText = str.GetBuffer(50); /设置字符缓冲区的大小并赋值TreeItem.item.lParam = 1; /对于根目录,设置为1hTreeItem = m_Tree.InsertItem(&TreeItem); /插入Tree控件中int number = 0; /计算文件的个数CFileFin

31、d file;BOOL bfind;CString temp;/第二级TreeItem.hParent = hTreeItem;TreeItem.item.lParam = 10;/对于子目录,设置为10bfind = file.FindFile(D:*.*); /查找D:盘根目录下的所有文件和目录while(bfind)/如果找到bfind = file.FindNextFile(); /查找下一个if(file.IsDirectory() /判断是否为目录/得到目录名并拷贝字符串strcpy(TreeItem.item.pszText,file.GetFileName();hTreeIte

32、m = m_Tree.InsertItem(&TreeItem); /插入Tree控件else/如不是目录,插入List控件str = file.GetFileName(); /得到文件名m_List.InsertItem(number,str); /把文件名插入第number行number+;return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE void CDialogModalless:OnSelchangedT

33、ree(NMHDR* pNMHDR, LRESULT* pResult) NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;/ TODO: Add your control notification handler code hereCString temp,str;/获取当前被选择的tree view项HTREEITEM CurItem = m_Tree.GetSelectedItem();TV_ITEM TreeItem;TreeItem.hItem = CurItem;m_Tree.GetItem(&TreeItem); /获取指定tree

34、view项的属性/获得当前选中项的文本temp = m_Tree.GetItemText(m_Tree.GetSelectedItem();long CurlParam = TreeItem.lParam; /当前条目的序号if(CurlParam != 1) /如果是子目录/获取当前被选择项的父项TreeItem.hItem = m_Tree.GetParentItem(m_Tree.GetSelectedItem();m_Tree.GetItem(&TreeItem);CurItem = TreeItem.hItem;/获得当前选中项的文本str = m_Tree.GetItemText(

35、CurItem);str += temp;str += ;elsestr = temp;m_List.DeleteAllItems(); /删除控件中的所有项CFileFindfile;BOOLbFind;intnumber = 0;str += *.*;bFind = file.FindFile(str); /在str目录下查找while(bFind) /如果找到bFind = file.FindNextFile();if(!file.IsDirectory() /判断是否为目录/如不是目录,插入List控件temp = file.GetFileName(); /得到文件名m_List.In

36、sertItem(number,temp); /把文件名插入第number行number+;UpdateData(false); /更新控件中的值*pResult = 0; 3.4 进度条对话框进度条对话框 程序的实现步骤程序的实现步骤在上一节程序的基础上1.编辑对话框资源和创建对话框类 2.显示进度条对话框 3.实现对话框的功能 返回第3章步骤1 编辑对话框资源 ID: IDD_PROGRESS_DIALOGCaption: “Progress Dialog”Class: CDialogProgress 添加控件:ID号号控件控件属性属性IDC_PROGRESSProgress Border

37、:选中:选中IDC_TIME_SLIDERSlider IDC_EDITEdit Box IDC_PERCENT_SPINSpin选中选中Auto buddy和和Set buddy integerIDC_PROGRESS_BUTTONButton Caption:进度条演示:进度条演示IDC_QUIT_BUTTONButton Caption:退出:退出步骤2 显示进度条对话框 1在视类中包含对话框头文件#include DialogProgress.h2添加消息响应函数 void CDialogView:OnViewProgressdialog() / TODO: Add your comm

38、and handler code hereCDialogProgress dlg;dlg.DoModal();步骤3 实现对话框的功能 1添加控件关联变量添加控件关联变量控件 变量类型 变量名IDC_PERCENT_SPIN CSpinButtonCtrl m_SpinIDC_PROGRESS CProgressCtrl m_ProgreesIDC_TIME_SLIDER CSliderCtrl m_Time2. 添加消息响应函数添加消息响应函数 BOOL CDialogProgress:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add ext

39、ra initialization herem_Spin.SetRange(1,50); /给Spin控件设置数值范围/把文本框的初始值设为1GetDlgItem(IDC_EDIT)-SetWindowText(1);m_Time.SetRange( 0, 10 ); /设置滑动的数值范围m_Time.SetPos( 1 ); /设滑动控件的初始值设为1m_Progress.SetRange( 0, 100 ); /设进度条的数值范围return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX

40、 Property Pages should return FALSE void CDialogProgress:OnProgressButton() / TODO: Add your control notification handler code hereCString temp;GetDlgItem(IDC_EDIT)-GetWindowText(temp); /得到文本框中的内容int percent = atoi(temp); if( (percent 50) ) /判断文本框中的内容是否在设定的范围之内MessageBox(输入的数据超出范围!,Waring,MB_ICONWAR

41、NING|MB_OK);GetDlgItem(IDC_EDIT)-SetFocus(); /把焦点设在文本框上return; /中断程序的运行,返回int nPercent, nTime, nCurPos = 0;nPercent = m_Spin.GetPos(); /得到Spin控件的值nTime = m_Time.GetPos(); /得到滑动条上当前的值m_Progress.SetPos( 0 ); /设置进度条当前的位置为0while( (nCurPos+=nPercent) mask = TCIF_TEXT; /接收的值为文本m_pTCItem-pszText = 学生守则; /标

42、签的名字m_Tab.InsertItem(0,m_pTCItem); /插入一个新的标签m_pTCItem-pszText = 市民公约;m_Tab.InsertItem(1,m_pTCItem);/显示IDC_STATIC1、IDC_SCROLLBAR两个控件GetDlgItem(IDC_STATIC1)-ShowWindow(SW_SHOW);GetDlgItem(IDC_SCROLLBAR)-ShowWindow(SW_SHOW);/隐藏IDC_STATIC2控件GetDlgItem(IDC_STATIC2)-ShowWindow(SW_HIDE);/对滚动条进行初始化m_ScrollB

43、ar.SetScrollRange(1,10); /设置滚动条的范围m_ScrollBar.SetScrollPos(1); /设置当前滚动条的位置return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CDialogTab:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler

44、code here/当前Tab控件所选中的标签if( m_Tab.GetCurSel() = 0 )/显示IDC_STATIC1、IDC_SCROLLBAR两个控件GetDlgItem(IDC_STATIC1)-ShowWindow(SW_SHOW);GetDlgItem(IDC_SCROLLBAR)-ShowWindow(SW_SHOW);/隐藏IDC_STATIC2控件GetDlgItem(IDC_STATIC2)-ShowWindow(SW_HIDE);else/隐藏IDC_STATIC1、IDC_SCROLLBAR两个控件GetDlgItem(IDC_STATIC1)-ShowWind

45、ow(SW_HIDE);GetDlgItem(IDC_SCROLLBAR)-ShowWindow(SW_HIDE);/显示IDC_STATIC2控件GetDlgItem(IDC_STATIC2)-ShowWindow(SW_SHOW);*pResult = 0;void CDialogTab:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / TODO: Add your message handler code here and/or call default/对滚动条进行重新定位switch(nSBCode)case S

46、B_THUMBPOSITION: /滚动的绝对位置pScrollBar-SetScrollPos(nPos); /设置滚动条的位置break;case SB_LINEUP: /单击滚动条的上箭头/把滚动条设置为当前位置减1的位置pScrollBar-SetScrollPos(pScrollBar-GetScrollPos() - 1);break;case SB_LINEDOWN: /单击滚动条的下箭头/把滚动条设置为当前位置加1的位置pScrollBar-SetScrollPos(pScrollBar-GetScrollPos() + 1);break;case SB_PAGEUP: /单击

47、滚动条当前位置的上面/把滚动条设置为当前位置减5的位置pScrollBar-SetScrollPos(pScrollBar-GetScrollPos() - 5);break;case SB_PAGEDOWN: /单击滚动条当前位置的下面/把滚动条设置为当前位置加5的位置pScrollBar-SetScrollPos(pScrollBar-GetScrollPos() + 5);break;CDialog:OnVScroll(nSBCode, nPos, pScrollBar);3.6 使用通用对话框使用通用对话框 概念概念 在MFC中,提供了一些通用对话框类来实现Windows系统提供的通用

48、对话框,包括文件对话框、颜色对话框、字体对话框、打印对话框和查找与替换对话框等,这些通用对话框类都是从CCommonDialog类派生出来的。对于每个通用对话框,都可以实现相应的特定功能。 返回第3章程序的实现步骤程序的实现步骤在上一节程序的基础上1.编辑对话框资源和创建对话框类 2.显示对话框 3.实现对话框的功能 步骤1 编辑对话框资源 ID: IDD_COMMON_DIALOG Caption: “Common Dialog”Class: CDialogCommon 添加控件:ID号号控控 件件 属属 性性IDC_STATIC Static TextCaption:请选择一个文本文件:请

49、选择一个文本文件IDC_EDITEdit BoxRead-only:选中:选中IDC_OPEN_BUTTONButton Caption:打开:打开ID_QUITButton Caption:退出:退出步骤2 显示对话框 1在视类中包含对话框头文件#include DialogCommon.h2添加消息响应函数 void CDialogView:OnViewCommondialog() / TODO: Add your command handler code hereCDialogCommon dlg;dlg.DoModal();步骤3 实现对话框的功能 void CDialogCommon

50、:OnOpenButton() / TODO: Add your control notification handler code here/声明一个CFileDialog对象,并设置他的格式CFileDialog cdlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,text file(*.txt)|*.txt|All file(*.*)|*.*|, this);if(cdlg.DoModal() = IDOK) /单击OK按钮/从文件对话框中取得文件名并显示在文本框中GetDlgItem(IDC_EDIT)-SetWi

51、ndowText(cdlg.GetPathName();UpdateData(false); /更新void CDialogCommon:OnQuit() / TODO: Add your control notification handler code hereOnOK(); 返回第3章第4章 菜单、快捷键和控制条 内容摘要:1. 菜单2. 快捷菜单3. 动态生成菜单4. 工具条5. 状态条返回目录4.1 菜单菜单学习目标1. 响应菜单消息2. 控制菜单状态3. 使用快捷键返回第4章程序的实现步骤1.利用AppWizard生成程序框架(MenuTest)2.编辑资源 3.加入菜单消息处理函

52、数 4.菜单命令的更新控制 步骤1 生成程序框架(MenuTest)1. 项目名称: MenuTest2. 选择单文档界面应用程序(Single document)步骤2 编辑资源1.编辑菜单资源 画图 Pop-up 选中 Caption ID Prompt 矩形(&R)tCtrl+R ID_DRAW_RECT 在视中画矩形 椭圆(&C)tAlt+C ID_DRAW_CIRCLE 在视中画椭圆 2.编辑快捷键资源ID ModifiersKey ID_DRAW_RECT Ctrl R ID_DRAW_CIRCL Alt C步骤3 加入菜单消息处理函数 Class Name Objects IDs

53、 Messages1.CMenuTestView ID_DRAW_RECT COMMAND2.CMenuTestView ID_DRAW_ CIRCLE COMMAND步骤4 菜单命令的更新控制 1. 在画图 菜单中再添加两个菜单项Caption ID Prompt 允许画矩形 ID_DRAW_ENABLE - 禁止画矩形 ID_DRAW_DISABLE -2.在视类中添加一个记录当前“矩形”菜单项状态的变量BOOL m_Enable; 3. 在构造函数中初始化数据成员m_Enable 步骤4 菜单命令的更新控制 4. 添加 菜单响应函数Class Name Objects IDs Messa

54、ges1.CMenuTestView ID_DRAW_ENABLE COMMAND2.CMenuTestView ID_DRAW_ DISABLE COMMAND3.CMenuTestView ID_DRAW_RECT UPDATE_COMMAND_UI 4.CMenuTestView ID_DRAW_ENABLE UPDATE_COMMAND_UI 5.CMenuTestView ID_DRAW_ DISABLE UPDATE_COMMAND_UI 步骤4 菜单命令的更新控制基本知识1. pCmdUI-Enable(true | false);2. pCmdUI-SetCheck( 1| 0

55、);3. 使用COMMAND消息响应菜单项的选择事件 4. UPDATE_COMMAND_UI消息控制菜使用单项状态 4.2 快捷菜单 学习目标1. 实现快捷菜单返回第4章程序的实现步骤1. 编辑快捷菜单资源2. 显示跟踪菜单3. 添加菜单响应函数4. 实现对话框功能步骤1 编辑快捷菜单资源添加菜单(IDR_POPUP_MENU )Popup1 选中Pop-up Caption ID 编辑矩形坐标 ID_EDIT_RECT 编辑椭圆坐标 ID_EDIT_CIRCLE 步骤2 显示快捷菜单添加响应函数Class Name ObjectsIDs MessagesCMainFrame CMainFr

56、ame WM_CONTEXTMENU 步骤2 显示快捷菜单步骤3 添加菜单消息处理函数 (1) 编辑对话框资源静态文本框,IDC_STATIC,左上角坐标(X1,Y1)静态文本框,IDC_STATIC,右下角坐标(X2,Y2)编辑框,IDC_EDIT_X1编辑框,IDC_EDIT_Y1编辑框,IDC_EDIT_X2编辑框,IDC_EDIT_Y2按扭控件,IDOK,确定按扭控件,IDCANCEL,取消 步骤3 添加菜单消息处理函数 (2)为对话框添加控件关联变量 IDC_EDIT_X1,int,m_nX1IDC_EDIT_Y1,int,m_nX1IDC_EDIT_X2,int,m_nX1IDC_

57、EDIT_Y2,int,m_nX1(3)在主框架中加入变量并初始化 int m_nRectLeft;int m_nRectTop;int m_nRectRight;int m_nRectBottom;int m_nCircleLeft;int m_nCircleTop;int m_nCircleRight;int m_nCircleBottom; 步骤3 添加菜单消息处理函数 CMainFrame *pMainFrame = (CMainFrame *) AfxGetApp()-GetMainWnd();CMainFrame *pMainFrame = (CMainFrame *) AfxGe

58、tApp()-GetMainWnd();步骤3 添加菜单消息处理函数 (4) 修改画图函数步骤3 添加菜单消息处理函数 (5)加入菜单消息处理函数 void CMenuTestView:OnEditRect() CDlgEdit dlg(1);dlg.DoModal();void CMenuTestView:OnEditCircle() CDlgEdit dlg(2);dlg.DoModal();步骤4 实现对话框功能(1)修改构造函数 CDlgEdit:CDlgEdit(int type, CWnd* pParent /*=NULL*/): CDialog(CDlgEdit:IDD, pPa

59、rent)/AFX_DATA_INIT(CDlgEdit)m_nX1 = 0;m_nX2 = 0;m_nY1 = 0;m_nY2 = 0;/AFX_DATA_INITm_nType = type; (2)添加确定命令按扭响应函数OnOK() 步骤4 实现对话框功能void CDlgEdit:OnOK() UpdateData(TRUE);CMainFrame *pMainFrame = (CMainFrame *) AfxGetApp()-GetMainWnd();if(m_nType = 1)pMainFrame-m_nRectLeft = m_nX1;pMainFrame-m_nRectT

60、op = m_nY1;pMainFrame-m_nRectRight = m_nX2;pMainFrame-m_nRectBottom = m_nY2;else if(m_nType = 2)pMainFrame-m_nCircleLeft = m_nX1;pMainFrame-m_nCircleTop = m_nY1;pMainFrame-m_nCircleRight = m_nX2;pMainFrame-m_nCircleBottom = m_nY2;CDialog:OnOK(); 基本知识1.OnContextMenu()函数 2. CMenu类1. LoadMenu()函数2. Tra

61、ckPopupMenu()函数3.AfxGetApp()函数4. CWinApp 类的GetMainWnd()函数4.3 动态菜单动态菜单 学习目标1. 菜单动态增加与删除2. 用户自定义消息3. 动态菜单消息响应返回第4章程序的实现步骤1. 编辑菜单资源2. 添加菜单响应函数3. 加入动态菜单响应函数步骤1 编辑菜单资源为菜单(IDR_POPUP_MENU )添加两个菜单项:Caption ID1.Seprator2.增加椭圆控制菜单 ID_ADD_MENU 3.删除椭圆控制菜单 ID_DELETE_MENU 步骤2 添加菜单响应函数1. OnAddMenu()2. OnDeleteMenu

62、() 步骤2 添加菜单响应函数void CMainFrame:OnAddMenu() / TODO: Add your command handler code hereCString menu2;menu0=允许画椭圆;menu1=禁止画椭圆;CWnd *pMainFrame=AfxGetMainWnd();CMenu *pMenuDyna=NULL;CMenu *pMenu=NULL;CMenu *pTopMenu=pMainFrame-GetMenu();int iPos;for(iPos=pTopMenu-GetMenuItemCount()-1; iPos=0; iPos-)pMen

63、u=pTopMenu-GetSubMenu(iPos);if(pMenu & pMenu-GetMenuItemID(0)=ID_DRAW_RECT)pMenuDyna=pMenu;break;for(iPos=pMenuDyna-GetMenuItemCount()-1; iPos=5; iPos-)pMenuDyna-DeleteMenu(iPos,MF_BYPOSITION);for(int i=0;iAppendMenu(MF_STRING, WM_USER+10+i, menui); 步骤2 添加菜单响应函数void CMainFrame:OnDeleteMenu() / TODO:

64、 Add your command handler code hereCWnd *pMainFrame=AfxGetMainWnd();CMenu *pMenuDyna=NULL;CMenu *pMenu=NULL;CMenu *pTopMenu=pMainFrame-GetMenu();int iPos;for(iPos=pTopMenu-GetMenuItemCount()-1; iPos=0; iPos-)pMenu=pTopMenu-GetSubMenu(iPos);if(pMenu & pMenu-GetMenuItemID(0)=ID_DRAW_RECT)pMenuDyna=pMe

65、nu;break;for(iPos=pMenuDyna-GetMenuItemCount()-1; iPos=5; iPos-)pMenuDyna-DeleteMenu(iPos,MF_BYPOSITION);步骤3 添加动态菜单响应函数1.在类CMainFrame中增加一个变量并初始化int m_SelectMenu;当m_SelectMenu为0时,第一项为选中状态,允许画椭圆。否则第二项为选中状态,禁止画椭圆。CMainFrame:CMainFrame()/ TODO: add member initialization code herem_SelectMenu =0; 步骤3 添加动

66、态菜单响应函数2. 重载主框架类的OnCmdMsg()函数 Project: MenuTestClass Name:CMainFrameObjects IDs:CMainFrameMessages: OnCmdMsg步骤3 添加动态菜单响应函数BOOL CMainFrame:OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) if(pHandlerInfo=NULL)for(int i=0; iSetCheck(1);elsepCmdUI-SetCheck(0);pCmdUI-Enable(true); 步骤3 添加动态菜单响应函数4.为椭圆菜单项加入UPDATE_COMMAND_UI消息处理函数 void CMainFrame:OnUpdateDrawCircle(CCmdUI* pCmdUI) / TODO: Add your command update UI handler code hereif(m_nSelectMenu = 0)pCmdUI-Enable(true);e

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!