C++及Windows程序设计A:第10章 对话框_第1页
C++及Windows程序设计A:第10章 对话框_第2页
C++及Windows程序设计A:第10章 对话框_第3页
C++及Windows程序设计A:第10章 对话框_第4页
C++及Windows程序设计A:第10章 对话框_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

1、对话框第10章本章主要内容10.2 常用控件的使用10.3 无模式对话框10.1 模式对话框基础10.4 通用对话框简介10.5 基于对话框的应用程序10.1.1 模式对话框基础对话框基本概念创建对话框资源关联对话框类调用对话框1、对话框基本概念对话框是应用程序与用户交互信息的重要途径,对话框窗口中通常会包含若干控件。控件是对话框的子窗口。对话框的三个概念对话框资源:描述对话框的外观和控件布局,在资源描述文件中有对话框的定义;对话框类:为每个对话框资源关联一个对话框类,常派生与CDialog,通过该类对象间接操纵对话框;在程序需要的地方调用对话框,完成数据交换2、创建对话框资源对话框资源编辑器

2、,为对话框、每个控件分配一个ID标识符。必须指定每个控件的ID号对应的资源描述IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 187, 98STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION “实验对话框FONT 10, SystemBEGIN DEFPUSHBUTTON 确定,IDOK,30,67,50,14 PUSHBUTTON 取消,IDCANCEL,107,68,50,14 EDITTEXT IDC_INPUTNAME,78,27,78,14,ES_AUTOHSCROLL LTEXT

3、请输入姓名,IDC_STATIC,29,29,41,8END3、关联对话框类双击新对话框资源的空白处,可以为对话框资源关联一个对话框类。输入对话框类的类名选择基类,一般情况下选择CDialog4、调用对话框假定为对话框资源关联了CTestDlg类,如果主程序需要调用该对话框。定义一个CTestDlg类对象;调用该对象的DoModal()方法,创建并显示模式对话框;调用代码所在文件中,要包含CTestDlg类的头文件。#include “TestDlg.h”调用对话框示例void CMainFrame:OnCalldlg() CTestDlg dlg;dlg.DoModal();在主框架窗口类实

4、现文件头部包含头文件#include “TestDlg.h”10.1.2 数据交换数据交换的概念关联成员变量对话框内更新数据与主程序交换数据1、数据交换的概念对话框是用户与主程序交换数据的重要途径,MFC采用独特的DDX和DDV技术,可以轻松实现数据在控件之间及主程序之间的传递。使用ClassWizard可以为控件关联一个成员变量。借助成员变量及一组成员函数,可以方便地实现数据交换。2、关联成员变量选择要关联的控件ID,双击输入成员变量名,选择类型关联成员变量在Category框中可选择Value和Control两种类型Control类型:为对话框中的控件关联一个控件类对象,通过对象操作控件本

5、身。可关联控件类类型取决于所使用的控件。Value类型:为控件窗口中依附的值(如编辑框中的文本)关联一个成员变量,通过成员变量获取控件中依附的值。不同类型控件,可关联的数据类型会有所不同。每个控件最多只能关联Control和Value类型成员变量各1个。设置有效性规则编辑框中最多只能输入20个字符,对于数值类型,可以指定数值范围ClassWizard生成的代码在CTestDlg类中增加数据成员定义CStringm_input;构造函数中进行初始化m_input = _T();通过DDX和DDV宏关联控件和成员变量void CTestDlg:DoDataExchange()CDialog:DoD

6、ataExchange(pDX);/AFX_DATA_MAP(CTestDlg)DDX_Text(pDX, IDC_TESTEDIT, m_input);DDV_MaxChars(pDX, m_input, 20);/AFX_DATA_MAP3、对话框内更新数据CDialog中的UpdateData成员函数非常重要,用于成员变量和控件之间的数据传递UpdateData(true);提取控件窗口中的值,将值传递给相关联的成员变量。默认参数为true。UpdateData(false);将成员变量的值传递给控件窗口,并更新控件窗口显示。4、主程序获取数据主程序CMainFrame定义CString

7、 test;void CMainFrame:OnCalldlg() CTestDlg dlg;if(dlg.DoModal()=IDOK)test=dlg.m_input;如果用户点击“确定”,返回IDOK,否则返回IDCANCEL通过成员变量,获取用户在对话框中输入的值为对话框控件赋初值在主程序的CMainFrame中,定义CString test;成员,用于保存对话框中传递的数据void CMainFrame:OnCalldlg() CTestDlg dlg;dlg.m_input=test;if(dlg.DoModal()=IDOK)test=dlg.m_input;对话框类对象、对话框

8、窗口是两个不同的东西,有不同的生命周期。通过关联的成员变量,传递初始参数10.1.3 对话框的构造与控制对话框创建过程对话框的结束控件消息映射1、对话框的创建调用对话框类对象的DoModal,创建对话框;对话框创建后,发送WM_CREATE消息,在该消息处理代码中创建各控件;创建完控件后,发送WM_INITDIALOG消息,一般会重载该消息处理函数OnInitDialog ,完成对对话框及控件的初始化。基类的OnInitDialog会调用UpdateData(false)调用DoDataExchange,将成员变量的值传递给控件,完成初始化。最后显示对话框。/DlgCore.cpp中2、对话框

9、的结束DoModal函数直到用户关闭对话框后才返回。当用户点击“确定”关闭对话框时,调用OnOK,通常在映射的函数中调用基类CDialog的OnOK,调用UpdateData(true);调用DoDataExchange将控件的值传递到成员变量中,最后调用EndDialog结束对话框。DoModal返回IDOK当用户点击“取消”关闭对话框时,直接调用基类的EndDialog结束对话框,DoMdal返回IDCANCEL。3、映射控件消息用户操作对话框中的控件,会激发控件通知消息,可以使用ClassWizard映射这些消息。不同的控件所产生的消息是不同的,比如按钮控件,可以映射BN_CLICKED

10、和BN_DOUBLECLICKED消息,对应单击或双击该按钮时产生的消息。通常情况下,将控件通知消息映射到包含它们的对话框类中。映射控件消息选择正确的类选择控件的ID选择要映射的消息,双击消息映射机制对话框类中定义成员函数 afx_msg void OnButton1(); 实现成员函数 void CTestDlg:OnButton1() 定义消息映射宏BEGIN_MESSAGE_MAP(CTestDlg, CDialog)/AFX_MSG_MAP(CTestDlg)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP(

11、)消息映射小结菜单命令消息、控件通知消息、标准Windows消息的映射机制都非常类似在类头文件中定义消息映射函数在类实现文件中实现成员函数在类实现文件中加入消息映射条目不同类型消息在消息映射表中使用的宏不同命令消息:ON_COMMAND(菜单ID,fun)标准Windows消息:ON_WM_MOUSEMOVE()控件消息:ON_BN_CLICKED(控件ID,fun)不同的控件使用不同的宏本章主要内容10.2 常用控件的使用10.3 无模式对话框10.1 对话框基础10.4 通用对话框10.5 基于对话框的应用程序10.2.1 控件简介静态控件命令按钮单选按钮复选框编辑框列表框组合框滚动条旋转

12、按钮进度条1、静态控件:CStatic可显示字符串、图标、位图等,一般不接收用户输入,也不产生通知消息。分为三种:静态文本、组框、静态图片。通常用于显示内容固定的文本,可以在设计对话框时直接指定,也可以在程序运行时动态改变其内容。如果要在程序中动态改变静态控件的文本: 修改控件的默认标识符,确保其ID唯一 调用SetWindowText,改变所显示文本2、命令按钮:CButton单击时往往会执行某个命令,被称为命令按钮,可映射的消息有BN_CLICKED和BN_DOUBLECLICKED消息。必须设置的属性:ID号和按钮标题。在对话框的所有按钮中,有一个按钮的Default button属性被

13、选中,称为默认按钮,回车表示点击该按钮。重要的成员 SetWindowText:设置按钮标题 EnableWindow:设置按钮允许状态3、单选按钮:CButton确保用户在一组选项中只能选中一个选项。放置多个单选按钮构成一组选项时,第一个单选按钮的Group属性要选中,其后的按钮Group属性不选中,直至开始一个新的选项组。通过单选按钮获取用户当前选项的方法为一组单选按钮的第一个按钮关联int类型的成员变量,如m_a。用户改变选项,调用UpdateData(true) ,m_a保存用户选项的序号,从0开始编号。设置m_a的值,调用UpdateData(false),可强行改变当前选项。单选按

14、钮:CButton对于特定的单选按钮(CButton类成员)void SetCheck(int nCheck);int GetCheck()const;0表示不选中,1表示选中CWnd类提供的方法void CheckRadioButton(int nIDFirst,int nIDLast, int nIDChecked);int GetCheckedRadioButton(int nIDFirst,int nIDLast);4、复选框:CButton通过复选框,提供用户任意选择的若干选项;多个复选框之间是并列关系,编程时需要单独检查每个复选框的状态。通常为复选框关联BOOL型成员变量,通过Up

15、dateData控制选中或读取状态。也可以使用下面的成员函数进行控制。 SetCheck:设置选中状态 GetCheck:获取选中状态5、编辑框:CEdit编辑框常用的属性设置Multiline:选中设置多行编辑框,多行方式下可设置水平、垂直滚动条Password:设置后,用于输入密码,用户的输入默认以*显示Number:选中后只能输入数字Read-only:设置后,用户不能输入内容,但能显示内容编辑框:CEdit编辑框CEdit :常用方法SetLimitTet:限制输入字符数SetPasswordChar:指定口令字符SetSel:选择文本GetSel:获得所选取的文本GetLineCou

16、nt:获得文本行数LineLength:获得指定行的字符数GetLine:获得某行文本GetWindowText:获得文本编辑框:CEdit编辑框关注的消息EN_CHANGE:编辑框中的文本发生变化EN_KILLFOCUS:失去焦点EN_SETFOCUS:获得焦点6、列表框:CListBox基本特征窗口内列出一系列文本,每个占一行每行显示为一个字符串;各行有一个索引值,从0开始;还可以为每行关联一个值属性selection:选中single属性用户每次只能选择一个选项,选中multiple属性则可多选(通过按Ctrl或Shift选择)选中sort属性:添加或删除列表项后,列表项自动排序列表框:

17、CListBox列表类的基本方法(一)AddString:添加行DeleteString:删除行,需要指定行的序号,序号从0开始GetCount:获得列表框中总行数GetCurSel:获得当前选中行的序号SetCurSel:选中某行,需要指定行的序号ResetContent:清除所有行GetText:获得某行显示的字符串列表框:CListBox多行列表类的基本方法(二)GetSelCount:返回被选中的行数GetSelItems(int nMaxItems,LPINT rgIndex):将每个选中行的序号存入int型数组rgIndex中GetText:获得某行的字符串列表框:CListBox

18、多行列表类的其它方法(三)FindString:查找匹配的列表项,返回找到行的序号;SetItemData:为指定列表项关联一个32位的DWORD数据;注意序号、列表项文本和关联数据的关系。SetItemDataPtr:为指定列表项关联一个void指针,可指向数组、结构体等大量数据GetItemData:获得关联的32位数据GetItemDataPtr:获得关联的指针列表框:CListBox常用的消息LBN_DBLCLK:双击列表项LBN_SELCHANGE:当用户更改列表项LBN_KILLFOCUS:失去焦点7、组合框:CComboBox基本特征在type属性中选DropDown,为下拉组合

19、框,可以下拉,也可以通过编辑框输入选中simple,为简单组合框,无须下拉,可以通过编辑框输入选中Drop List,为下拉列表框,可以下拉,但不能直接输入组合框: CComboBox常用方法列表框类方法,如AddString、GetCurSel、SetCurSel、GetCount等编辑框类方法:常用消息列表框类消息:CBN_DBLCLK、CBN_SELCHANGE编辑框类消息:CBN_EDITCHANGE等8、滚动条: CScrollBar滚动条基本操作(1)设置滚动范围:SetScrollRange操作滚动条后,产生WM_HSCROLL、WM_VSCROLL消息,如果有多个滚动条,需要在

20、OnHScroll中加以区分滚动消息产生后,不同操作会产生不同的通知码,点击箭头的通知码为SB_LINELEFT、SB_LINERIGHT、点击滚动块左右空白为SB_PAGELEFT、拖动滚动块SB_THUMBTRACK滚动条: CScrollBarSB_LINELEFT SB_LINERIGHT SB_PAGELEFT SB_PAGERIGHTSB_LINEUPSB_PAGEUPSB_THUMBTRACK和SB_THUMBPOSITIONSB_PAGEDOWNSB_LINEDOWN滚动条: CScrollBar滚动条基本操作(2)设置滚动块位置:SetScrollPos,操作滚动条后,滚动块

21、不会自动变化位置,必须调用该方法调整滚动块位置GetScrollRange:获得滚动范围GetScrollPos:获得当前滚动位置9、滑动条:CSliderCtrl基本操作由滑动块和刻度线构成,按指定增量移动常用属性 Orientation:设置刻度线方向 Tick marks:显示刻度线 Point:设置刻度线及滑块尖头的方向 Auto ticks:按一定步长间隔显示刻度线, 默认间隔为1滑动条:CSliderCtrl基本方法设置滑动条范围:SetRange设置滑块位置:SetPosSetTic:设置刻度线位置,一次只能设置一个刻度线,用于手动设置刻度线SetTicFreq:设置刻度线的疏密

22、程度,配合Auto ticks属性使用,每隔一定单位自动显示一条刻度线10、旋转按钮:CSpinButtonCtrl基本操作是一对箭头按钮,也称上下控件通常与其它控件相伴,一般与Tab顺序相邻的控件相伴,最常用的是编辑框控件一般将Auto buddy和Set buddy integer属性选中设置Alignment属性为Right,选中的按钮将嵌入在编辑框控件的右侧旋转按钮:CSpinButtonCtrl基本方法设置范围:SetRange设置当前位置:SetPos设置基数:SetBase,设置显示的基数,16进制或十进制11、进度条:CProgressCtrl进度条基本操作设置进度条范围:Se

23、tRange设置填充步长:SetStep设置当前位置:SetPos前进一个步长:StepIt选中Smooth属性,表示平滑地填充进度条,否则按块进行填充。进度条往往与WM_TIMER消息配合使用10.2.2 示例:访问编辑框任务:在一个对话框中,设置三个编辑框和一个按钮,前两个用于输入加数,点击“加法”按钮后,将前两个数的和输出到第三个编辑框中。关联对话框类关联对话框类为CAddDlg。映射按钮IDC_ADD的单击消息void CAddDlg:OnAdd() 1、获取控件窗口指针void CAddDlg:OnAdd() int num1,num2,result;char ch110, ch21

24、0, ch310;GetDlgItem(IDC_NUM1)-GetWindowText(ch1, 10);GetDlgItem(IDC_NUM2)-GetWindowText(ch2, 10);num1=atoi(ch1); num2=atoi(ch2);result=num1+num2;itoa(result, ch3,10);GetDlgItem(IDC_SUM)-SetWindowText(ch3);得到指定ID号控件的窗口指针。2、直接读取编辑框void CAddDlg:OnAdd() int num1,num2,result;char ch110, ch210, ch310;GetD

25、lgItemText(IDC_NUM1,ch1,10);GetDlgItemText(IDC_NUM2,ch2,10);num1=atoi(ch1); num2=atoi(ch2);result=num1+num2;itoa(result, ch3,10);SetDlgItemText(IDC_RESULT,ch3);3、读取为整数void CAddDlg:OnAdd() int num1,num2,result;num1 = GetDlgItemInt(IDC_NUM1);num2 = GetDlgItemInt(IDC_NUM2);result = num1+num2;SetDlgItem

26、Int(IDC_SUM,result);4、关联值成员变量void CAddDlg:OnAdd() UpdateData(true);m_sum = m_num1+m_num2;UpdateData(false);5、关联控件成员变量关联控件成员变量void CAddDlg:OnAdd() int num1, num2, result;char ch110, ch210, ch310;m_Edit1.GetWindowText(ch1,10);m_Edit2.GetWindowText(ch2,10);num1=atoi(ch1); num2=atoi(ch2);result = num1+n

27、um2;itoa(result, ch3,10);m_Edit3.SetWindowText(ch3);10.2.3 示例:设置画笔颜色1、关联成员变量IDC_DRAW:用于绘图的Static控件IDC_RED:int m_red,输入红色的编辑框IDC_GREEN:int m_greenIDC_BLUE:int m_blueIDC_SCROLLRED:滚动条,CScrollBarm_scrollIDC_SLIDEGREEN:CSliderCtrlm_sliderIDC_SPINBLUE:CSpinButtonCtrl m_spin2、初始化控件BOOL CScrollDlg:OnInitDi

28、alog() CDialog:OnInitDialog();m_scroll.SetScrollRange(0,255);m_scroll.SetScrollPos(m_red);m_slider.SetRange(0,255);m_slider.SetPos(m_green);m_slider.SetTicFreq(10);m_spin.SetRange(0,255);UpdateData(false);first = false;return TRUE;3、编辑框更新映射编辑框更新消息EN_CHANGEvoid CScrollDlg:OnChange() UpdateData();m_sc

29、roll.SetScrollPos(m_red);m_slider.SetPos(m_green);Draw(); /类中将要定义的绘图函数/将前两个编辑框的EN_CHANGE均映射到同一个处理函数中。编辑框更新第三个编辑框更新消息EN_CHANGEvoid CScrollDlg:OnChange2() if(first) return;UpdateData();Draw(); /类中将要定义的绘图函数/ first作用:对话框类的bool型成员,在构造函数中初始化为true,首次调用时旋转按钮还没有初始化好,避免出现问题;在InitialDialog完成初始化之后,将first置为false

30、 。4、WM_HSCROLLvoid CScrollDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / 判断由那个控件发出int nID=pScrollBar-GetDlgCtrlID();if(nID=IDC_SLIDERGREEN) / 由滑动条产生 m_green=m_slider.GetPos();获得发送消息的控件ID号, 滚动条和滑动条都会产生WM_HSCROLL消息,OnHscroll中传递一个指向发送消息的控件指针WM_HSCROLLvoid CScrollDlg:OnHScroll(UINT nSB

31、Code, ) / 由滚动条产生if(nID=IDC_SCROLLRED)switch(nSBCode) /判断nSBCode通知码 case SB_LINELEFT:m_red-; break;case SB_LINERIGHT:m_red+; break;case SB_PAGELEFT:m_red-=10; break;case SB_PAGERIGHT:m_red+=10; break;case SB_THUMBTRACK:m_red=nPos; break; WM_HSCROLLvoid CScrollDlg:OnHScroll(UINT nSBCode, ) if(nID=IDC_

32、SCROLLRED)switch(nSBCode) if(m_red255) m_red=255;m_scroll.SetScrollPos(m_red); /人为控制滚动条的位置,滑动条无须手工设置UpdateData(false);Draw();CDialog:OnHScroll(nSBCode, nPos, ScrollBar);5、WM_PAINTvoid CScrollDlg:OnPaint() CPaintDC dc(this); CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd-UpdateWindow(); /更新窗口Draw(); / 绘制窗口区域6、

33、辅助绘图void CScrollDlg:Draw()CWnd *pWnd=GetDlgItem(IDC_DRAW);CDC *pDC=pWnd-GetDC();CBrush brush(RGB(m_red,m_green,m_blue);CBrush *pOldBrush =pDC-SelectObject(&brush);CRect client;pWnd-GetClientRect(client);pDC-Rectangle(client);pDC-SelectObject(pOldBrush);7、主程序交互在视图类中定义COLORREF color,用于保存设置的颜色;在视图类构造函数

34、中,初始化color为黑色color = RGB(0,0,0);主程序交互void CMyView:OnCalldlg() CColorDlg dlg;dlg.m_red=GetRValue(color);dlg.m_green=GetGValue(color);dlg.m_blue=GetBValue(color);if(dlg.DoModal()=IDOK) color=RGB(dlg.m_red,dlg.m_green,dlg.m_blue);Invalidate();8、视图类的OnDrawvoid CMyView:OnDraw(CDC* pDC)CPen pen(PS_SOLID,2

35、,color);CPen *pOldPen=pDC-SelectObject(&pen);pDC-SetTextColor(color);pDC-TextOut(20,20,用指定的颜色画线);pDC-MoveTo(30,60);pDC-LineTo(200,300);pDC-SelectObject(pOldPen);本章主要内容10.2 常用控件的使用10.3 无模式对话框10.1 对话框基础10.4 通用对话框10.5 基于对话框的应用程序1、模式与无模式对话框模式对话框的过程创建对话框资源,关联对话框类,定义对话框类对象,调用DoModal创建并显示对话框;用户结束对话框后,销毁对话框

36、后DoModal返回无模式对话框无模式对话框显示后,主窗口可以继续接收用户输入,情况比较复杂。建立对话框资源,关联对话框类相同;用户调用Create创建对话框,用户负责销毁对话框(调用DestroyWindow)。模式与无模式对话框模式对话框的过程通常定义一个对话框类局部对象,DoModal返回后,对话框窗口已经被销毁,对话框类对象已经没有存在的必要。无模式对话框通常在堆中动态构建一个无模式对话框类对象,调用Create创建对话框窗口后,Create立即返回,对话框窗口依然存在,当然对话框类对象不能被销毁。当用户点击“取消”按钮后,要确保对话框窗口和对话框对象及时销毁。2、模式对话框的创建vo

37、id CMyView:OnCallDlg()pDlg=new CMyDlg(this);pDlg-Create(IDD_MYDLG);pDlg-ShowWindow(SW_SHOW);相关联的对话框资源ID传入对话框的窗口指针3、用户自定义消息用户在操作无模式对话框时,可随时点击“确定”、“取消”、“应用”按钮,必须借助某种机制通知主程序。往往通过发送用户自定义消息通知主程序自定义消息语法#define WM_DLGNOTIFY WM_USER+5向指定的窗口发送消息 /CWnd成员BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARA

38、M lParam = 0 );SendMessage4、无模式对话框简单示例建立对话框资源创建对话框资源与创建普通对话框一样对话框的ID为IDD_DIALOG2IDC_RED,选中Group属性,关联成员变量 int m_color;IDC_GREENIDC_BLUE对话框类为CModallessDlg修改对话框构造函数CModallessDlg:CModallessDlg(CWnd* pParent) : CDialog(CModallessDlg:IDD, pParent)ASSERT(pParent);m_pView=pParent;CWnd *m_pView,对话框类添加的成员,用于保

39、存调用者的窗口指针调用对话框void CMyView:OnCalldlg() if(dlg=NULL)dlg=new CModallessDlg(this);dlg-m_color=m_color;dlg-Create(IDD_DIALOG2);dlg-ShowWindow(SW_SHOW);else dlg-SetActiveWindow(); /dlg定义为视图类中数据成员 CModallessDlg* dlg; 在构造函数中初始为NULL视图类成员,用于保存对话框中设置的颜色,构造函数中初始0防止重复创建自定义消息和常量对话框类的头文件中#define WM_DLGNOTIFY WM_U

40、SER+5#define ID_PRESS_OK 1#define ID_PRESS_CANCEL 2#define ID_PRESS_APPLY 3映射对话框应用按钮void CModallessDlg:OnApply() UpdateData(); m_pView-SendMessage(WM_DLGNOTIFY, ID_PRESS_APPLY ); /发送自定义消息至视图类对象映射对话框确定按钮void CModallessDlg:OnOK() UpdateData(); m_pView-SendMessage(WM_DLGNOTIFY, ID_PRESS_OK ); /发送自定义消息至

41、视图类对象映射对话框取消按钮void CModallessDlg:OnCancel() m_pView-SendMessage(WM_DLGNOTIFY, ID_PRESS_CANCEL ); /发送自定义消息至视图类对象视图类中手工映射消息用户自定义消息不能用ClassWizard映射视图类头文件中声明函数afx_msg void OnDlgNotify( WPARAM wParam, LPARAM lParam);添加消息映射条目,构造函数中/AFX_MSG_MAP(CMyView)ON_MESSAGE(WM_DLGNOTIFY, OnDlgNotify)/AFX_MSG_MAP视图类中手

42、工映射消息void CMyView:OnDlgNotify( WPARAM wParam, LPARAM lParam);switch(wParam) case ID_PRESS_APPLY:m_color=dlg-m_color;Invalidate(); break;case ID_PRESS_OK:m_color=dlg-m_color;Invalidate();case ID_PRESS_CANCEL:dlg-DestroyWindow();delete dlg; dlg=NULL; break;OnDrawvoid CMyView:OnDraw(CDC *pDC)COLORREF c

43、olor;switch(m_color) case 0: color=RGB(255,0,0);break;case 1: color=RGB(0,255,0); break;case 2: color=RGB(0,0,255);break; CPen pen(PS_SOLID,1,color);CPen *oldPen=pDC-SelectObject(&pen);pDC-Ellipse(0,0,200,200);本章主要内容10.2 常用控件的使用10.3 无模式对话框10.1 对话框基础10.4 通用对话框10.5 基于对话框的应用程序1、6大通用对话框Window系统中集成了一些常用的

44、公用对话框,可以直接使用,不用创建对话框资源模板、关联对话框类,方便使用。MFC封装了6个公用对话框文件选择对话框:CFileDialog颜色选择对话框:CColorDialog字体选择对话框:CFontDialog查找与替换对话框:CFindReplaceDialog打印对话框:CPrintDialog页面设置对话框:CPageSetupDialog2、颜色通用对话框构造函数CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd *pParentWnd=NULL)clrInit指定初始颜色,默认黑色dwFlag为选项,定制对话框初始外观pParentWnd为父窗口指针DoModal返回后,可以调用颜色对话框的GetColor函数,获得用户所选择的颜色3、字体通用对话框构造函数CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = , CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL ); 通常定义一个LOGFONT结构体,作为初始

温馨提示

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

评论

0/150

提交评论