VisualC++6.0实例教程(全套课件).ppt_第1页
VisualC++6.0实例教程(全套课件).ppt_第2页
VisualC++6.0实例教程(全套课件).ppt_第3页
VisualC++6.0实例教程(全套课件).ppt_第4页
VisualC++6.0实例教程(全套课件).ppt_第5页
已阅读5页,还剩307页未读 继续免费阅读

VIP免费下载

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

文档简介

Visual C+6.0实例教程 第2章 文档和视 第3章 对话框与控件 第4章 菜单、快捷键和控制条 第5章 图形操作 第6章 文件操作 第7章 MFC通用类 第8章 异常处理和诊断 第9章 多线程 第2章 文档和视 内容摘要: 1. 通过视类与用户交互 2. 通过视类与用户交互 返回目录 2.1 通过视类与用户交互 学习目标 1. 在程序中响应鼠标消息 在程序中响应键盘消息 2.12.1 返回第2章 程序的实现步骤 利用AppWizard生成单文档程序框架(DocView ) 为视类添加数据成员 2.12.1 BOOL m_bMouseDown; /标识鼠标左键是否按下 HCURSOR m_hCross; /十字型鼠标句柄 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); 2.12.1 void CDocViewView: OnLButtonDown (UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default m_bMouseDown = true; / 鼠标左键按下 m_ptStart = point; / 画线的起点 m_ptOld = point; / 临时点 SetCapture(); / 将鼠标消息发送到视窗口 CRect rect; GetClientRect( / 得到客户窗口的大小 ClientToScreen( / 将当前窗口坐标转换成屏幕坐标 ClipCursor( / 把鼠标限定在其参数指定的矩形区域内 SetCursor(m_hCross);/ 设置鼠标形状为十字形 CView:OnLButtonDown(nFlags, point); 4为视类添加鼠标动作响应函数 2.12.1 void CMyDrawView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if( m_bMouseDown ) CClientDC dc(this); dc.SetROP2( R2_NOT ); dc.MoveTo( m_ptStart );/这两行代码擦除从起点(鼠标按下点)到 dc.LineTo( 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(); 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 ); /这两行代码从起点到鼠标当前位置画线 dc.LineTo( point ); / SetCursor(m_hArrow); /设置鼠标形状为标准箭头形 CView:OnLButtonUp(nFlags, point); 2.12.1 程序的实现步骤_2 1为视类添加数据成员为视类添加数据成员 2.12.1 int m_nLine; /记录已输入字符行数 CString m_strDisplay; /保存当前字符串的变量 2. 在构造函数中初始化成员变量 CDocViewView:CDocViewView() / TODO: add construction code here m_nLine = 0; m_bMouseDown = false; m_hCross = AfxGetApp()-LoadStandardCursor(IDC_CROSS); m_hArrow = AfxGetApp()-LoadStandardCursor(IDC_ARROW); 3为视类添加键盘消息响应函数 2.12.1 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在文档类中添加保存数据的变量 2.22.2 public: CString m_strLastLine; CStringList m_strList; CPtrList m_LineList; 3修改视类成员函数OnButtonUp()和OnChar() 程序的实现步骤 2.22.2 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 ); 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 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( int nLineHeight = tm.tmHeight + tm.tmExternalLeading; dc.TextOut(0, m_nLine * nLineHeight, m_strDisplay); CView:OnChar(nChar, nRepCnt, nFlags); 2.22.2 程序的实现步骤 2.22.2 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); pLine-Draw(pDC); 4. 在文档类中添加重画直线和重写文本的函数 程序的实现步骤 2.22.2 void CDocViewDoc:DrawText(CDC *pDC) TEXTMETRIC tm; pDC-GetTextMetrics( 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.GetAt(pos); pDC-TextOut( 0, line*nLineHeight, str ); line+; pDC-TextOut( 0, line*nLineHeight, m_strLastLine ); 程序的实现步骤 2.22.2 void CDocViewView:OnDraw(CDC* pDC) CDocViewDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here pDoc-DrawLine(pDC); pDoc-DrawText(pDC); 5修改视类成员函数OnDraw() 返回第2章 第3章 对话框与控件 内容摘要: 1.使用对话框与控件 2.模态对话框 3.非模态对话框 4.进度条对话框 5.属性页对话框 6.使用通用对话框 返回目录 3.1 使用对话框与控件 3.13.1 程序的实现步骤 利用AppWizard生成多文档程序(Dialog ) 编辑口令对话框资源 添加控件关联变量 添加代码 返回第3章 步骤1 生成程序框架(Dialog ) 项目名称: Dialog 选择多文档界面应用程序(Multiple document) 3.13.1 步骤2 编辑口令对话框资源 添加控件: IDC_STATIC Static Text Caption:请输入口令 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:取消 3.13.1 ID: IDD_PASSWORD_DIALOG Caption: “口令” Class: CPasswordDialog 步骤3 添加控件关联变量 3.13.1 IDC_PASSWORD_EDIT int m_Password Minimum Value : 0 Maximum Value : 9999 步骤4 显示对话框 在文件Dialog.cpp的头部,加入下面的包含语句 #include “PasswordDialog.h” 步骤4 显示对话框 3.13.1 BOOL CDialogApp:InitInstance() CPasswordDialog cDlg; /声明CPasswordDialog类的一个对象 if( cDlg.DoModal() = IDOK ) /用户按了确定按钮 if( cDlg.m_Password != 1925 ) /口令为整数1925 /如果口令不对,则显示出错信息,然后程序结束 AfxMessageBox(“口令错误,确定后将退出程序。“); return FALSE; else /如果按下取消按钮,程序也结束 return FALSE; return TRUE; 3.2 模态对话框 3.23.2 概念 模态对话框弹出后,独占了系统资源,只有 在关闭该对话框后才可能继续执行程序的其他代 码,不能够在关闭对话框之前执行应用程序其他 部分的代码。模态对话框一般要求用户做出某种 选择,如前面例程中的口令对话框将一直出现并 等待用户输入口令 。 返回第3章 程序的实现步骤 3.23.2 在上一节程序的基础上 添加菜单资源和菜单响应函数 编辑对话框资源和创建对话框类 添加消息响应函数和代码 步骤1 添加菜单资源和菜单响应函数 在“查看(V)”菜单中添加以下菜单项 Separator ID_VIEW_MODALDIALOG 模态对话框( IDC_SEX1 CButtonm_Radio; IDC_EDIT CString m_Edit; 步骤4 显示对话框 1. 菜单响应函数 void CDialogView:OnViewModaldialog() CDialogModal m_Dlg; m_Dlg.DoModal(); 3.23.2 2. 对话框响应函数 BOOL CDialogModal:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_Radio.SetCheck(1); /把“男“设置为默认值 m_Combo.InsertString(0,“小学“); /往Combo Box加入选项 m_Combo.InsertString(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 FALSE void CDialogModal:OnOk() / TODO: Add your control notification handler code here CString str; str.Empty(); if(m_Radio.GetCheck() str += “先生“; else str += “小姐“; str += “你好,你的爱好:“; BOOL flag=0; CButton *p; /得到指向IDC_INSTEREST1的指针 p = (CButton *)GetDlgItem(IDC_INSTEREST1); if(p-GetCheck() /判断“登山“是否被选中 str += “登山 “; flag = 1; 3.23.2 /得到指向IDC_INSTEREST2的指针 p = (CButton *)GetDlgItem(IDC_INSTEREST2); 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 += “不知道“; 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.33.3 概念 非模态对话框弹出后,程序可以在不关闭该 对话框的情况下继续执行,在转入到应用程序其 他部分的代码时可以不需要用户做出响应。非模 态对话框一般用来显示信息,或者实时地进行一 些设置。 返回第3章 程序的实现步骤 3.23.2 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示非模态对话框 实现对话框的功能 步骤1 编辑对话框资源 3.33.3 ID: IDD_MODALLESS_DIALOG Caption: “Modalless Dialog” Class: CDialogModalless 添加控件: ID号控件属性 IDC_TRE E Tree Control 选中复选框Has buttons,Has lines和Lines at root IDC_LISTList ControlStyles|View:Report ID_OKButtonCaption:确定 步骤2 显示非模态对话框 3.33.3 1在视类中添加对话框成员指针 ,并包含对话框头文件 public: CDialogModalless* m_pModallessDlg; 并包含对话框头文件 #include“DialogModalless.h” 2添加消息响应函数 3.33.3 void CDialogView:OnViewModallessdialog() / TODO: Add your command handler code here /如果指针指向NULL,说明对话框还没有创建,则动态创建 if(m_pModallessDlg=NULL) m_pModallessDlg=new CDialogModalless; m_pModallessDlg- Create(IDD_MODALLESS_DIALOG,this); /显示非模态对话框 m_pModallessDlg-ShowWindow(SW_SHOW); 3.33.3 CDialogView:CDialogView() / TODO: add construction code here m_pModallessDlg = NULL; /初始化指针 CDialogView:CDialogView() if(m_pModallessDlg != NULL) delete m_pModallessDlg; /释放空间 3修改视类的构造函数和析构函数 步骤3 实现对话框的功能 3.33.3 1添加控件关联变量 控件 变量类型 变量名 IDC_LIST CListCtrl m_List IDC_Tree CTeeCtrl m_Tree 2. 添加消息响应函数 BOOL CDialogModalless:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here /往List控件中插入一列 m_List.InsertColumn(0, “文件名“, LVCFMT_LEFT, 150, -1); TV_INSERTSTRUCTTreeItem; HTREEITEMhTreeItem; TreeItem.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; /对于根目录,设置为1 hTreeItem = m_Tree.InsertItem( /插入Tree控件中 int number = 0; /计算文件的个数 CFileFind file; 3.33.3 BOOL bfind; CString temp; /第二级 TreeItem.hParent = hTreeItem; TreeItem.item.lParam = 10;/对于子目录,设置为10 bfind = file.FindFile(“D:*.*“); /查找D:盘根目录下的所有文件和目录 while(bfind)/如果找到 bfind = file.FindNextFile(); /查找下一个 if(file.IsDirectory() /判断是否为目录 /得到目录名并拷贝字符串 strcpy(TreeItem.item.pszText,file.GetFileName(); hTreeItem = m_Tree.InsertItem( /插入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:OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; / TODO: Add your control notification handler code here CString temp,str; /获取当前被选择的tree view项 HTREEITEM CurItem = m_Tree.GetSelectedItem(); TV_ITEM TreeItem; TreeItem.hItem = CurItem; m_Tree.GetItem( /获取指定tree view项的属性 /获得当前选中项的文本 temp = m_Tree.GetItemText(m_Tree.GetSelectedItem(); long CurlParam = TreeItem.lParam; /当前条目的序号 if(CurlParam != 1) /如果是子目录 /获取当前被选择项的父项 TreeItem.hItem = m_Tree.GetParentItem(m_Tree.GetSelectedItem(); 3.33.3 m_Tree.GetItem( CurItem = TreeItem.hItem; /获得当前选中项的文本 str = m_Tree.GetItemText(CurItem); str += temp; str += “; else str = 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.InsertItem(number,temp); /把文件名插入第number行 number+; UpdateData(false); /更新控件中的值 *pResult = 0; 3.4 进度条对话框 3.43.4 程序的实现步骤 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示进度条对话框 实现对话框的功能 返回第3章 步骤1 编辑对话框资源 3.43.4 ID: IDD_PROGRESS_DIALOG Caption: “Progress Dialog” Class: CDialogProgress 添加控件: ID号控件属性 IDC_PROGRESSProgress Border:选中 IDC_TIME_SLIDERSlider IDC_EDITEdit Box IDC_PERCENT_SPINSpin选中Auto buddy和Set buddy integer IDC_PROGRESS_BUTTO N Button Caption:进度条演示 IDC_QUIT_BUTTONButton Caption:退出 步骤2 显示进度条对话框 3.43.4 1在视类中包含对话框头文件 #include “DialogProgress.h“ 2添加消息响应函数 void CDialogView:OnViewProgressdialog() / TODO: Add your command handler code here CDialogProgress dlg; dlg.DoModal(); 步骤3 实现对话框的功能 3.43.4 1添加控件关联变量 控件 变量类型 变量名 IDC_PERCENT_SPIN CSpinButtonCtrl m_Spin IDC_PROGRESS CProgressCtrl m_Progrees IDC_TIME_SLIDER CSliderCtrl m_Time 2. 添加消息响应函数 BOOL CDialogProgress:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_Spin.SetRange(1,50); /给Spin控件设置数值范围 /把文本框的初始值设为1 GetDlgItem(IDC_EDIT)-SetWindowText(“1“); m_Time.SetRange( 0, 10 ); /设置滑动的数值范围 m_Time.SetPos( 1 ); /设滑动控件的初始值设为1 m_Progress.SetRange( 0, 100 ); /设进度条的数值范围 return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE 3.43.4 void CDialogProgress:OnProgressButton() / TODO: Add your control notification handler code here CString temp; GetDlgItem(IDC_EDIT)-GetWindowText(temp); /得到文本框中的内容 int percent = atoi(temp); if( (percent 50) ) /判断文本框中的内容是否在设定的范围之内 MessageBox(“输入的数据超出范围!“,“Waring“,MB_ICONWARNING|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 ); /设置进度条当前的位置为0 while( (nCurPos+=nPercent) mask = TCIF_TEXT; /接收的值为文本 m_pTCItem-pszText = “学生守则“; /标签的名字 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_ScrollBar.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 FALSE 3.53.5 void CDialogTab:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler 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)-ShowWindow(SW_HIDE); GetDlgItem(IDC_SCROLLBAR)-ShowWindow(SW_HIDE); /显示IDC_STATIC2控件 GetDlgItem(IDC_STATIC2)-ShowWindow(SW_SHOW); *pResult = 0; 3.53.5 void CDialogTab:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / TODO: Add your message handler code here and/or call default /对滚动条进行重新定位 switch(nSBCode) case SB_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: /单击滚动条当前位置的上面 /把滚动条设置为当前位置减5的位置 pScrollBar-SetScrollPos(pScrollBar-GetScrollPos() - 5); break; case SB_PAGEDOWN: /单击滚动条当前位置的下面 /把滚动条设置为当前位置加5的位置 pScrollBar-SetScrollPos(pScrollBar-GetScrollPos() + 5); break; CDialog:OnVScroll(nSBCode, nPos, pScrollBar); 3.53.5 3.6 使用通用对话框 3.63.6 概念 在MFC中,提供了一些通用对话框类来实现 Windows系统提供的通用对话框,包括文件对话 框、颜色对话框、字体对话框、打印对话框和查 找与替换对话框等,这些通用对话框类都是从 CCommonDialog类派生出来的。对于每个通用对 话框,都可以实现相应的特定功能。 返回第3章 程序的实现步骤 3.63.6 在上一节程序的基础上 编辑对话框资源和创建对话框类 显示对话框 实现对话框的功能 步骤1 编辑对话框资源 3.63.6 ID: IDD_COMMON_DIALOG Caption: “Common Dialog” Class: CDialogCommon 添加控件: ID号控 件 属 性 IDC_STATIC Static TextCaption:请选择一个文本文 件 IDC_EDITEdit BoxRead-only:选中 IDC_OPEN_BUTTONButton Caption:打开 ID_QUITButton Caption:退出 步骤2 显示对话框 3.63.6 1在视类中包含对话框头文件 #include “DialogCommon.h“ 2添加消息响应函数 void CDialogView:OnViewCommondialog() / TODO: Add your command handler code here CDialogCommon dlg; dlg.DoModal(); 步骤3 实现对话框的功能 3.63.6 void CDialogCommon: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)-SetWindowText(cdlg.GetPathName(); UpdateData(false); /更新 void CDialogCommon:OnQuit() / TODO: Add your control notification handler code here OnOK(); 3.63.6 返回第3章 第4章 菜单、快捷键和控制条 内容摘要: 1. 菜单 2. 快捷菜单 3. 动态生成菜单 4. 工具条 5. 状态条 返回目录 4.1 菜单 学习目标 1. 响应菜单消息 控制菜单状态 使用快捷键 4.14.1 返回第4章 程序的实现步骤 利用AppWizard生成程序框架(MenuTest) 编辑资源 加入菜单消息处理函数 菜单命令的更新控制 4.14.1 步骤1 生成程序框架(MenuTest) 项目名称: MenuTest 选择单文档界面应用程序(Single document ) 4.14.1 步骤2 编辑资源 1.编辑菜单资源 画图 Pop-up 选中 Caption ID Prompt 矩形( dc(this); dc.Rectangle(50,50,200,150); dc.Rectangle(50,50,200,150); void void CMenuTestView:OnDrawCircleCMenuTestView:OnDrawCircle() () CClientDCCClientDC dc(this); dc(this); dc.Ellipse(250,50,400,150); dc.Ellipse(250,50,400,150); 步骤4 菜单命令的更新控制 1. 在画图 菜单中再添加两个菜单项 Caption ID Prompt 允许画矩形 ID_DRAW_ENABLE - 禁止画矩形 ID_DRAW_DISABLE - 在视类中添加一个记录当前“矩形”菜单项状态的变量 BOOL m_Enable; 3. 在构造函数中初始化数据成员m_Enable m_ Enable =TRUE;m_ Enable =TRUE; 4.14.1 步骤4 菜单命令的更新控制 4. 添加 菜单响应函数 Class Name Objects IDs Messages CMenuTestView ID_DRAW_ENABLE COMMAND CMenuTestView ID_DRAW_ DISABLE COMMAND CMenuTestView ID_DRAW_RECT UPDATE_COMMAND_UI CMenuTestView ID_DRAW_ENABLE UPDATE_COMMAND_UI CMenuTestView ID_DRAW_ DISABLE UPDATE_COMMAND_UI 4.14.1 void void CMenuTestView:OnUpdateDrawRect(CCmdUICMenuTestView:OnUpdateDrawRect(CCmdUI* * pCmdUIpCmdUI) ) pCmdUIpCmdUI-Enable(m_Enable);-Enable(m_Enable); 步骤4 菜单命令的更新控制 4.14.1 void void CMenuTestView:OnDrawDisableCMenuTestView:OnDrawDisable() () m_Enable = FALSE;m_Enable = FALSE; void void CMenuTestView:OnDrawEnableCMenuTestView:OnDrawEnable() () m_Enable = TRUE;m_Enable = TRUE; void void CMenuTestView:OnUpdateDrawEnable(CCmdUICMenuTestView:OnUpdateDrawEnable(CCmdUI* * pCmdUIpCmdUI) ) pCmdUIpCmdUI-SetCheck(m_EnableSetCheck(m_Enable ? 1:0); ? 1:0); void void CMenuTestView:OnUpdateDrawDisable(CCmdUICMenuTestView:OnUpdateDrawDisable(CCmdUI* * pCmdUIpCmdUI) ) pCmdUIpCmdUI-SetCheck(m_EnableSetCheck(m_Enable ? 0:1); ? 0

温馨提示

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

评论

0/150

提交评论