基于MFC的对话框程序v2Word文档格式.docx
- 文档编号:18993105
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:24
- 大小:909.40KB
基于MFC的对话框程序v2Word文档格式.docx
《基于MFC的对话框程序v2Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MFC的对话框程序v2Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
如果选择“工具箱”后,看不到任何控件,请看看程序是否处于调试状态;
如果处于调试状态,请退出调试状态再试试。
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<
WPARAM>
(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
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(&
//绘制背景
CBrushbr(RGB(200,255,255));
pCanvasDC->
FillRect(&
rect,&
br);
//创建画笔
CPenNewPen;
NewPen.CreatePen(PS_SOLID,2,m_clrLines);
CPen*OldPen;
OldPen=pCanvasDC->
SelectObject(&
NewPen);
//画线
MoveTo(rect.TopLeft());
LineTo(rect.TopLeft()+CPoint(100,50));
MoveTo(rect.TopLeft()+CPoint(100,50));
LineTo(rect.TopLeft()+CPoint(200,50));
MoveTo(rect.TopLeft()+CPoint(200,50));
LineTo(rect.BottomRight());
//恢复画笔
SelectObject(OldPen);
CPenSinPen;
SinPen.CreatePen(PS_SOLID,2,m_clrSinCurve);
SinPen);
//画出Sin函数
DrawSinFun(pCanvasDC,rect);
//释放资源
Detach();
UpdateData(FALSE);
return0;
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<
LEN-1;
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);
LineTo(p2);
5)添加颜色按钮的事件处理程序。
在DlgExerDlg.cpp文件中找到如下函数:
CDlgEx:
OnBnClickedButton3(),在对应的地方添加如下代码:
OnBnClickedButton3()
//打开颜色对话框
CColorDialogColorDlg;
if(ColorDlg.DoModal()==IDOK)
m_clrLines=ColorDlg.GetColor();
DrawLines();
6)添加MFCColorButton按钮的事件处理程序。
OnBnClickedMfccolorbutton1(),在对应的地方添加如下代码:
OnBnClickedMfccolorbutton1()
//更新变量
//获得颜色
m_clrSinCurve=m_clrBtn.GetColor();
完成以上操作后,运行,界面效果如下:
四、添加控件及相关程序实现文件读写
1.首先在DlgExerDlg.h文件中添加CDlgEx类公有成员变量m_nIndex:
在资源视图的IDD_DLGEXER_DIALOG对话框下添加Button按钮,在属性中修改Caption为“存储”。
右击添加事件处理程序如下:
在相应位置处添加事件处理程序代码实现数据文件输出:
1)在DlgExerDlg.cpp文件开始处添加如下代码:
2)在CDlgEx:
OnBnClickedButton4()函数下添加如下代码实现数据文件的输出:
OnBnClickedButton4()
usingnamespacestd;
//打开文件流
ofstreamOutFile("
TextFile.txt"
ios:
out);
if(OutFile)//判断是否打开成功
OutFile<
<
m_nIndex<
"
"
m_nIndex+1;
//输出数据
OutFile.close();
2.然后回到资源视图的IDD_DLGEXER_DIALOG对话框,添加Button按钮,在属性中修改Caption为“读取”。
在相应位置处添加事件处理程序代码实现数据文件读取:
1)在CDlgEx:
OnBnClickedButton5()函数下添加如下代码实现数据文件的输出:
OnBnClickedButton5()
//打开文件流
ifstreamInFile("
in);
if(InFile)//判断是否打开成功
InFile>
>
m_nIndex;
//读取数据
++m_nIndex;
InFile.close();
完成以上程序后,运行程序,界面如下,点击按钮
即可在项目名同名文件夹下生成文件“TextFile.txt”,点击按钮
即可读取文件“TextFile.txt”中数据赋值给变量m_nIndex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MFC 对话框 程序 v2