基于MFC的对话框程序v2.docx

上传人:b****6 文档编号:5999173 上传时间:2023-01-02 格式:DOCX 页数:24 大小:909.40KB
下载 相关 举报
基于MFC的对话框程序v2.docx_第1页
第1页 / 共24页
基于MFC的对话框程序v2.docx_第2页
第2页 / 共24页
基于MFC的对话框程序v2.docx_第3页
第3页 / 共24页
基于MFC的对话框程序v2.docx_第4页
第4页 / 共24页
基于MFC的对话框程序v2.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于MFC的对话框程序v2.docx

《基于MFC的对话框程序v2.docx》由会员分享,可在线阅读,更多相关《基于MFC的对话框程序v2.docx(24页珍藏版)》请在冰豆网上搜索。

基于MFC的对话框程序v2.docx

基于MFC的对话框程序v2

基于MFC的对话框程序

一、利用AppWizard应用程序向导生成程序框架

新建项目,选择“MFC”模板中的“MFC应用程序”,给项目一个名称,如Figure1所示。

Figure1新建项目

在“MFC应用程序向导”的“应用程序类型”中选择“基于对话框”;在“用户界面功能”中勾选“最小化框”与“最大化框”复选框。

其他,默认。

最后点击完成。

如Figure2,Figure3所示。

Figure2

Figure3

在Figure3中,可在“对话框标题”中更改对话框的标题。

此处采用默认的MyDlg。

生成的初始项目,如Figure4所示。

Figure4

经常用到的菜单、视图等在Figure4中用红框已标出。

接着删掉Figure4中的“确定”与“取消”按钮,在图中已用绿框框出。

然后选中Figure4中的“TODO:

在此放置对话框控件”,右键,选择属性。

在弹出的对话框中找到Caption,将其值改为姓名和学号,同时将该对话框控件移动至顶端,见Figure5。

Figure5

二、添加控件与相关程序

如果当前工作处于设计对话框时,“工具箱”窗口就会给出各种VC++提供的常用控件。

如果找不到“工具箱”,可在“视图”菜单中选择“工具箱”。

(其他视图找不到时,也可按这种方式调出。

)“视图”菜单及“工具箱”窗口,在Figure4中顶端和右端的红框中可见。

如果选择“工具箱”后,看不到任何控件,请看看程序是否处于调试状态;如果处于调试状态,请退出调试状态再试试。

1、添加按钮控件

选择“资源视图”,双击“IDD_MYDLG_DIALOG”,再选择“工具箱”,找到“Button”控件,拖至对话框“MyDlg”的合适位置,如Figure6所示。

“资源视图”可在“视图”菜单中调出,也可在Figure4中低端红框标出的位置找到。

Figure6

更改Button1的按钮标题为“按钮”。

在Button1的“属性”对话框中设置“Caption”的值为“按钮”。

2、添加静态文本控件(StaticText)。

和添加按钮控件一样,在适当的位置添加静态文本控件,将其Caption的值改为空,将其ID改为“IDC_STATIC1”。

(注意。

采用默认的ID——“IDC_STATIC”,将不可以为控件添加一些变量。

3、添加静态文本框变量。

选中上面添加的静态文本框,右键,选择“添加变量”,“添加成员变量向导”如Figure7所示,在类别中选择Value,在变量类型中选择“CString”,再给变量取一个名称,如m_static_str1,最后点击完成。

此时,在“MyDlgDlg.h”文件中,可见CMyDlgDlg类中增加了一个数据成员m_static_str1。

Figure7

4、添加按钮事件处理程序。

选中“按钮”控件,右键,选择“添加事件处理程序”。

在弹出的“事件处理程序向导”界面中,按Figure8设置消息类型为“BN_CLICKED”,类列表为“CMyDlgDlg”,函数处理程序名称为“OnBnClickedButton1”,最后点击“添加编辑”,向导会自动退出,然后转动“MyDlgDlg.cpp”文件中“OnBnClickedButton1()”函数处。

在该函数处内部按Figure9添加代码。

运行程序,点击按钮试试。

注1,当某控件对应的变量值发生变化时,需要用UpdateData(FALSE)更新控件显示内容,否则控件仍为原来的值。

注2,若要删除某个事件函数,选择“项目”菜单中的“类向导”(如果项目菜单中没有类向导,切换到“资源视图”,再选择“项目”即可看到“类向导”),按Figure10中选择想要删除的处理程序。

Figure8

Figure9

Figure10

5、添加编辑框(EditControl)。

仿照3中的说明,给EditControl添加对应的字符串变量m_edit_str1。

接着在按钮按下对应的函数处(双击“按钮”可跳转至该处)按4中添加相应代码,见Figure11。

Figure11

6、添加单选框(RadioButton)。

添加两个RadioButton到对话框中,分别与文本框和静态文本框对齐。

接着添加GroupBox控件,该控件只是为了美观。

按Figure12更改添加控件的Caption。

将第一个单选框的Group的属性为true,同时为其添加bool型变量m_radio_bool,见Figure13。

和Figure11一样,给按钮添加相应的代码,见Figure14。

注1,“UpdateData();”函数的默认参数为TRUE,当为TRUE时,表示从控件传输数据给对应的变量;当为FALSE时,表示从变量传输给对应的控件。

注2,Figure12中顶端红框标出的工具栏可以用于控件的布局,如对齐等。

Figure12

Figure13

Figure14

7、添加多选框(CheckBox)。

更改其Caption为“是否显示按钮”。

添加bool型变量m_check_bool。

在OnBnClickedButton1()函数处添加相应代码,见Figure15。

Figure15

8、添加SliderControl。

更改其AutoTicks和TickMarks的值为True,接着给控件添加整型变量m_slider_int,将在编辑框中显示它的值。

添加编辑框(EditControl)控件,给它添加字符串型变量m_edit_str2,然后给该控件添加事件函数,选择NM_CUSTOMDRAW(当用户拖动滚动条时,该函数响应),函数名默认,给该函数添加相应代码,见Figure17。

Figure16

Figure17

9、添加ComboBox控件

添加完毕后,更改其Data属性的值为“RedDuck;BlackDuck;GreenDuck”。

(以英文分号间隔。

10、添加一些其他控件。

添加完控件后,该对话框如Figure18所示。

Figure18

给ComboBox控件添加整型变量m_combo_int,同时给其消息“CBN_SELCHANGE”添加事件处理函数“OnCbnSelchangeCombo1()”,给该函数添加代码,见Figure19。

Figure19

给新添加的编辑框(EditControl)控件添加整型变量m_edit_int1,给添加的SpinControl控件的“UDN_DELTAPOS”添加处理函数“OnDeltaposSpin1”,添加相应的代码,见Figure20。

Figure20

注1,在运行中ComboBox的控件可能与ComboBox的控件中Data属性的值顺序不一,为了两者一致,可将其Sort属性改为False。

Figure21

三、添加与画图有关的控件及程序

1.在对话框中绘图。

该功能在OnPaint()函数中实现。

比如绘制一个矩形框区域,和绘制一条从坐标点(400,100)到(500,200)的斜线与从坐标点(400,150)到(500,150)的直线,程序如下:

voidCDlgEx:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc()),0);

//使图标在工作区矩形中居中

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//绘制图标

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CPaintDCdc(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_CANVAS

2)添加Button按钮,Caption改为“颜色”,右击添加事件处理程序:

添加

按钮,右击添加Control类型变量,如下:

按钮右击添加事件处理程序:

3)在DlgExerDlg.h文件的类CDlgEx中定义两个COLORREF成员变量,public属性,用于指定直线与正弦曲线的颜色:

4)定义DrawLines()函数用于画框中的线,定义DrawSinFun(CDC*pCanvasDC,constCRect&rect)用于画正弦曲线,注意在DlgExerDlg.h中声明函数,在DlgExerDlg.cpp文件中实现函数,在定义DrawSinFun函数之前先在DlgExerDlg.h文件的开始位置定义如下两个全局变量:

DrawLines函数与DrawSinFun函数实现代码如下:

intCDlgEx:

:

DrawLines()

{

//TODO:

在此添加控件通知处理程序代码

UpdateData();

//获得绘图控件句柄和区域

CWnd*pCanvasWnd=GetDlgItem(IDC_CANVAS);

CDC*pCanvasDC=pCanvasWnd->GetDC();

CRectrect;

pCanvasWnd->GetClientRect(&rect);

//绘制背景

CBrushbr(RGB(200,255,255));

pCanvasDC->FillRect(&rect,&br);

//创建画笔

CPenNewPen;

NewPen.CreatePen(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(200,50));

pCanvasDC->LineTo(rect.BottomRight());

//恢复画笔

pCanvasDC->SelectObject(OldPen);

//创建画笔

CPenSinPen;

SinPen.CreatePen(PS_SOLID,2,m_clrSinCurve);

OldPen=pCanvasDC->SelectObject(&SinPen);

//画出Sin函数

DrawSinFun(pCanvasDC,rect);

//恢复画笔

pCanvasDC->SelectObject(OldPen);

 

//释放资源

pCanvasDC->Detach();

pCanvasWnd->Detach();

UpdateData(FALSE);

return0;

}

voidCDlgEx:

:

DrawSinFun(CDC*pCanvasDC,constCRect&rect)

{

//根据画布规定起始点和放大倍数

intBaseY=rect.TopLeft().y+rect.Height()/2;

intBaseX=rect.TopLeft().x;

intyScale=rect.Height()/2;

intxScale=rect.Width()/7;

//计算sin(x),并画出离散的直线

doublex[LEN];

for(inti=0;i

{

//计算sin(x),根据画布调整位置

x[i]=2*PIE/LEN*i;

x[i+1]=2*PIE/LEN*(i+1);

CPointp1,p2;

p1.x=(int)(BaseX+x[i]*xScale);

p1.y=(int)(BaseY-sin(x[i])*yScale);

p2.x=(int)(BaseX+x[i+1]*xScale);

p2.y=(int)(BaseY-sin(x[i+1])*yScale);

//画直线

pCanvasDC->MoveTo(p1);

pCanvasDC->LineTo(p2);

}

}

5)添加颜色按钮的事件处理程序。

在DlgExerDlg.cpp文件中找到如下函数:

CDlgEx:

:

OnBnClickedButton3(),在对应的地方添加如下代码:

voidCDlgEx:

:

OnBnClickedButton3()

{

//TODO:

在此添加控件通知处理程序代码

//打开颜色对话框

CColorDialogColorDlg;

if(ColorDlg.DoModal()==IDOK)

{

m_clrLines=ColorDlg.GetColor();

}

DrawLines();

}

6)添加MFCColorButton按钮的事件处理程序。

在DlgExerDlg.cpp文件中找到如下函数:

CDlgEx:

:

OnBnClickedMfccolorbutton1(),在对应的地方添加如下代码:

voidCDlgEx:

:

OnBnClickedMfccolorbutton1()

{

//TODO:

在此添加控件通知处理程序代码

//更新变量

UpdateData();

//获得颜色

m_clrSinCurve=m_clrBtn.GetColor();

//画线

DrawLines();

}

完成以上操作后,运行,界面效果如下:

四、添加控件及相关程序实现文件读写

1.首先在DlgExerDlg.h文件中添加CDlgEx类公有成员变量m_nIndex:

在资源视图的IDD_DLGEXER_DIALOG对话框下添加Button按钮,在属性中修改Caption为“存储”。

右击添加事件处理程序如下:

在相应位置处添加事件处理程序代码实现数据文件输出:

1)在DlgExerDlg.cpp文件开始处添加如下代码:

2)在CDlgEx:

:

OnBnClickedButton4()函数下添加如下代码实现数据文件的输出:

voidCDlgEx:

:

OnBnClickedButton4()

{

usingnamespacestd;

//打开文件流

ofstreamOutFile("TextFile.txt",ios:

:

out);

if(OutFile)//判断是否打开成功

{

OutFile<

}

OutFile.close();

}

2.然后回到资源视图的IDD_DLGEXER_DIALOG对话框,添加Button按钮,在属性中修改Caption为“读取”。

右击添加事件处理程序如下:

在相应位置处添加事件处理程序代码实现数据文件读取:

1)在CDlgEx:

:

OnBnClickedButton5()函数下添加如下代码实现数据文件的输出:

voidCDlgEx:

:

OnBnClickedButton5()

{

//TODO:

在此添加控件通知处理程序代码

usingnamespacestd;

//打开文件流

ifstreamInFile("TextFile.txt",ios:

:

in);

if(InFile)//判断是否打开成功

{

InFile>>m_nIndex;//读取数据

++m_nIndex;

}

InFile.close();

}

完成以上程序后,运行程序,界面如下,点击按钮

即可在项目名同名文件夹下生成文件“TextFile.txt”,点击按钮

即可读取文件“TextFile.txt”中数据赋值给变量m_nIndex

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1