【MFC】VisuaC++ 对话框和控件案例
用单文档实现在对话框中输入终点的坐标,在客户区显示当前位置到输入终点的直线
题目具体如下:
(1)执行“编辑|输人数据(I)…"菜单命令打开一个标题为“输人数据”的对话框,通
过该对话框输人X和Y坐标值,要求输人值在0~600。
(2)在视图类中定义两个成员变量,单击对话框的“确定”按钮时接收输人数据,并
赋值给视图对象的两个成员变量,调用Invalidate()函数刷新窗口。
(3)在OnDraw()函数中添加代码,画一条从当前位置到输人坐标的直线。
实现步骤
1、建一个单文档应用程序
2、在资源中添加对话框资源(Ctrl+R)
3、鼠标左键双击空白处添加对话框类(在MFC中对资源的操作一般是通过类实现的)
这里可以看出CDialog是和窗口相关的类(主要是在屏幕上显示对话框)
这里命名为CTestDlg
4、增加菜单项
把消息响应在VIEW中实行(增加函数,编辑代码)
5、模态对话框的创建
关于模态对话框的说明
记得在VIEW中添加头文件
#include "TestDlg.h"
编写响应函数的代码
void CMyDialog_1View::OnDialog()
{
// TODO: Add your command handler code here
CTestDlg dlg;
dlg.DoModal();
}
此时就已经完成了模态对话框的创建(当对话框出现时其他菜单项显灰)
6、完善对话框界面,添加静态文本框、编辑框控件
将编辑框数据关联整形的成员变量
成员变量范围在(0~600)
7、接收终点坐标并画图
VIEW中增加成员变量
在之前模态对话框的创建的函数中继续完善
void CMyDialog_1View::OnDialog()
{
// TODO: Add your command handler code here
CTestDlg dlg;
if(dlg.DoModal()==IDOK){
m_ptEnd.x=dlg.m_x;
m_ptEnd.y=dlg.m_y;
Invalidate();
}
}
在OnDraw函数中绘制直线
void CMyDialog_1View::OnDraw(CDC* pDC)
{
CMyDialog_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->LineTo(m_ptEnd);
// TODO: add draw code for native data here
}
8、成果展示
在实现该案例中遇到的困难以及解决办法
1)ClassView中的类视图不见了
解决办法:先保存workspace,然后关闭工程,删除此工程目录中的.ncb文件,重新打开workspace