1、基于MFC的对话框程序v2基于MFC的对话框程序一、利用AppWizard应用程序向导生成程序框架新建项目,选择“MFC”模板中的“MFC 应用程序”,给项目一个名称,如Figure 1所示。Figure 1 新建项目在“MFC应用程序向导”的“应用程序类型”中选择“基于对话框”;在“用户界面功能”中勾选“最小化框”与“最大化框”复选框。其他,默认。最后点击完成。如Figure 2,Figure 3所示。Figure 2Figure 3在Figure 3中,可在“对话框标题”中更改对话框的标题。此处采用默认的MyDlg。生成的初始项目,如Figure 4所示。Figure 4经常用到的菜单、视
2、图等在Figure 4中用红框已标出。接着删掉Figure 4中的“确定”与“取消”按钮,在图中已用绿框框出。然后选中Figure 4中的“TODO:在此放置对话框控件”,右键,选择属性。在弹出的对话框中找到Caption,将其值改为姓名和学号,同时将该对话框控件移动至顶端,见Figure 5。Figure 5二、添加控件与相关程序如果当前工作处于设计对话框时,“工具箱”窗口就会给出各种VC+提供的常用控件。如果找不到“工具箱”,可在“视图”菜单中选择“工具箱”。(其他视图找不到时,也可按这种方式调出。)“视图”菜单及“工具箱”窗口,在Figure 4中顶端和右端的红框中可见。如果选择“工具箱
3、”后,看不到任何控件,请看看程序是否处于调试状态;如果处于调试状态,请退出调试状态再试试。1、添加按钮控件选择“资源视图”,双击“IDD_MYDLG_DIALOG”,再选择“工具箱”,找到“Button”控件,拖至对话框“MyDlg”的合适位置,如Figure 6所示。“资源视图”可在“视图”菜单中调出,也可在Figure 4中低端红框标出的位置找到。Figure 6更改Button1的按钮标题为“按钮”。在Button1的“属性”对话框中设置“Caption”的值为“按钮”。2、添加静态文本控件(Static Text)。和添加按钮控件一样,在适当的位置添加静态文本控件,将其Caption的
4、值改为空,将其ID改为“IDC_STATIC1”。(注意。采用默认的ID“IDC_STATIC”,将不可以为控件添加一些变量。)3、添加静态文本框变量。选中上面添加的静态文本框,右键,选择“添加变量”,“添加成员变量向导”如Figure 7所示,在类别中选择Value,在变量类型中选择“CString”,再给变量取一个名称,如m_static_str1,最后点击完成。此时,在“MyDlgDlg.h”文件中,可见CMyDlgDlg类中增加了一个数据成员m_static_str1。Figure 74、添加按钮事件处理程序。选中“按钮”控件,右键,选择“添加事件处理程序”。在弹出的“事件处理程序向导
5、”界面中,按Figure 8设置消息类型为“BN_CLICKED”,类列表为“CMyDlgDlg”,函数处理程序名称为“OnBnClickedButton1”,最后点击“添加编辑”,向导会自动退出,然后转动“MyDlgDlg.cpp”文件中“OnBnClickedButton1( )”函数处。在该函数处内部按Figure 9添加代码。运行程序,点击按钮试试。注1,当某控件对应的变量值发生变化时,需要用UpdateData(FALSE)更新控件显示内容,否则控件仍为原来的值。注2,若要删除某个事件函数,选择“项目”菜单中的“类向导”(如果项目菜单中没有类向导,切换到“资源视图”,再选择“项目”即
6、可看到“类向导”),按Figure 10中选择想要删除的处理程序。Figure 8Figure 9Figure 105、添加编辑框(Edit Control)。仿照3中的说明,给Edit Control添加对应的字符串变量m_edit_str1。接着在按钮按下对应的函数处(双击“按钮”可跳转至该处)按4中添加相应代码,见Figure 11。Figure 116、添加单选框(Radio Button)。添加两个Radio Button到对话框中,分别与文本框和静态文本框对齐。接着添加Group Box控件,该控件只是为了美观。按Figure 12更改添加控件的Caption。将第一个单选框的Gr
7、oup的属性为true,同时为其添加bool型变量m_radio_bool,见Figure 13。和Figure 11一样,给按钮添加相应的代码,见Figure 14。注1,“UpdateData();”函数的默认参数为TRUE,当为TRUE时,表示从控件传输数据给对应的变量;当为FALSE时,表示从变量传输给对应的控件。注2,Figure 12中顶端红框标出的工具栏可以用于控件的布局,如对齐等。Figure 12Figure 13Figure 147、添加多选框(Check Box)。更改其Caption为“是否显示按钮”。添加bool型变量m_check_bool。在OnBnClicked
8、Button1()函数处添加相应代码,见Figure 15。Figure 158、添加Slider Control。更改其Auto Ticks和Tick Marks的值为True,接着给控件添加整型变量m_slider_int,将在编辑框中显示它的值。添加编辑框(Edit Control)控件,给它添加字符串型变量m_edit_str2,然后给该控件添加事件函数,选择NM_CUSTOMDRAW(当用户拖动滚动条时,该函数响应),函数名默认,给该函数添加相应代码,见Figure 17。Figure 16Figure 179、添加Combo Box控件添加完毕后,更改其Data属性的值为“Red
9、Duck;Black Duck;Green Duck”。(以英文分号间隔。)10、添加一些其他控件。添加完控件后,该对话框如Figure 18所示。Figure 18给Combo Box控件添加整型变量m_combo_int,同时给其消息“CBN_SELCHANGE”添加事件处理函数“OnCbnSelchangeCombo1()”,给该函数添加代码,见Figure 19。Figure 19给新添加的编辑框(Edit Control)控件添加整型变量m_edit_int1,给添加的Spin Control控件的“UDN_DELTAPOS”添加处理函数“OnDeltaposSpin1”,添加相应的
10、代码,见Figure 20。Figure 20注1,在运行中Combo Box的控件可能与Combo Box的控件中Data属性的值顺序不一,为了两者一致,可将其Sort属性改为False。Figure 21三、添加与画图有关的控件及程序1. 在对话框中绘图。该功能在OnPaint()函数中实现。比如绘制一个矩形框区域,和绘制一条从坐标点(400,100)到(500,200)的斜线与从坐标点(400,150)到(500,150)的直线,程序如下:void CDlgEx:OnPaint() if (IsIconic() CPaintDC dc(this); / 用于绘制的设备上下文SendMes
11、sage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0); / 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / 绘制图标 dc.DrawIcon(x,
12、y, m_hIcon); else CPaintDC dc(this); / 用于绘制的设备上下文 dc.Rectangle(400,100,500,200); /绘制矩形框 /画斜线 dc.MoveTo(400,100); dc.LineTo(500,200); /画水平直线 dc.MoveTo(400,150); dc.LineTo(500,150); CDialogEx:OnPaint(); 界面效果如图:2. 设置颜色。1) 添加控件,设置属性:Border为true,修改ID为IDC_CANVAS2) 添加Button按钮,Caption改为“颜色”,右击添加事件处理程序:添加按钮,
13、右击添加Control类型变量,如下:按钮右击添加事件处理程序:3) 在DlgExerDlg.h文件的类CDlgEx中定义两个COLORREF成员变量,public属性,用于指定直线与正弦曲线的颜色:4) 定义DrawLines()函数用于画框中的线,定义DrawSinFun(CDC* pCanvasDC, const CRect &rect)用于画正弦曲线,注意在DlgExerDlg.h中声明函数,在DlgExerDlg.cpp文件中实现函数,在定义DrawSinFun函数之前先在DlgExerDlg.h文件的开始位置定义如下两个全局变量:DrawLines函数与DrawSinFun函数实现
14、代码如下:int CDlgEx:DrawLines() / TODO: 在此添加控件通知处理程序代码 UpdateData(); / 获得绘图控件句柄和区域 CWnd *pCanvasWnd=GetDlgItem(IDC_CANVAS); CDC *pCanvasDC=pCanvasWnd-GetDC(); CRect rect; pCanvasWnd-GetClientRect(&rect); /绘制背景 CBrush br(RGB(200,255,255); pCanvasDC-FillRect(&rect,&br); /创建画笔 CPen NewPen; NewPen.CreatePen
15、(PS_SOLID,2,m_clrLines); CPen *OldPen; OldPen=pCanvasDC-SelectObject(&NewPen); /画线 pCanvasDC-MoveTo(rect.TopLeft(); pCanvasDC-LineTo(rect.TopLeft()+CPoint(100,50); pCanvasDC-MoveTo(rect.TopLeft()+CPoint(100,50); pCanvasDC-LineTo(rect.TopLeft()+CPoint(200,50); pCanvasDC-MoveTo(rect.TopLeft()+CPoint(2
16、00,50); pCanvasDC-LineTo(rect.BottomRight(); /恢复画笔 pCanvasDC-SelectObject(OldPen); /创建画笔 CPen SinPen; SinPen.CreatePen(PS_SOLID,2,m_clrSinCurve); OldPen=pCanvasDC-SelectObject(&SinPen); /画出Sin函数 DrawSinFun(pCanvasDC,rect); /恢复画笔 pCanvasDC-SelectObject(OldPen); /释放资源 pCanvasDC-Detach(); pCanvasWnd-De
17、tach(); UpdateData(FALSE); return 0;void CDlgEx:DrawSinFun(CDC* pCanvasDC, const CRect &rect) /根据画布规定起始点和放大倍数 int BaseY=rect.TopLeft().y+rect.Height()/2; int BaseX=rect.TopLeft().x; int yScale=rect.Height()/2; int xScale=rect.Width()/7; /计算sin(x),并画出离散的直线 double xLEN; for (int i=0; iMoveTo(p1); pCan
18、vasDC-LineTo(p2); 5) 添加颜色按钮的事件处理程序。在DlgExerDlg.cpp文件中找到如下函数:CDlgEx:OnBnClickedButton3(),在对应的地方添加如下代码:void CDlgEx:OnBnClickedButton3() / TODO: 在此添加控件通知处理程序代码 / 打开颜色对话框 CColorDialog ColorDlg; if(ColorDlg.DoModal()=IDOK) m_clrLines=ColorDlg.GetColor(); DrawLines();6) 添加MFC Color Button按钮的事件处理程序。在DlgExe
19、rDlg.cpp文件中找到如下函数:CDlgEx:OnBnClickedMfccolorbutton1(),在对应的地方添加如下代码:void CDlgEx:OnBnClickedMfccolorbutton1() / TODO: 在此添加控件通知处理程序代码 /更新变量 UpdateData(); /获得颜色 m_clrSinCurve=m_clrBtn.GetColor(); /画线 DrawLines();完成以上操作后,运行,界面效果如下:四、添加控件及相关程序实现文件读写1. 首先在DlgExerDlg.h文件中添加CDlgEx类公有成员变量m_nIndex:在资源视图的IDD_DL
20、GEXER_DIALOG对话框下添加Button按钮,在属性中修改Caption为“存储”。右击添加事件处理程序如下:在相应位置处添加事件处理程序代码实现数据文件输出:1) 在DlgExerDlg.cpp文件开始处添加如下代码:2) 在CDlgEx:OnBnClickedButton4()函数下添加如下代码实现数据文件的输出:void CDlgEx:OnBnClickedButton4() using namespace std; / 打开文件流 ofstream OutFile(TextFile.txt,ios:out); if (OutFile) /判断是否打开成功 OutFilem_nIndex m_nIndex; /读取数据 +m_nIndex; InFile.close();完成以上程序后,运行程序,界面如下,点击按钮即可在项目名同名文件夹下生成文件“TextFile.txt”,点击按钮即可读取文件“TextFile.txt”中数据赋值给变量m_nIndex
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1