2021 NKU AI 控制系统可视化编程

第五章,对话框课上习题。我把每一步都记下来,走一下流程。

Step 1 打开 Visual Studio,创建新项目(MFC应用)

  1. 如果没有,则需自行下载。

  2. 用系统默认设置即可。

Step 2 创建对话框模板资源

  1. 打开资源视图(Ctrl+Shift+E,也可以在 视图 菜单栏里面找到),依次展开;
  2. 右键 Dialog文件夹,点击 添加资源,弹出一个对话框,点击 Dialog,点击 新建,可以看到该文件夹目录下出现 IDD_DIALOG1
  3. 修改它的属性,右键这个对话框,点击 属性,修改 IDIDD_MYDIALOG,当然,ID是可以随便取的,自己认得清就好了。

    图片看不清。。。哈

Step 3 添加对话框类

  1. 右键对话框,点击 添加类,弹出对话框,按照如下修改即可。当然,类名自己定;

Step 4 添加菜单项

  1. 打开 资源视图,展开 Menu,双击 IDR_LiTestTYPE
    请在此键入框框里面键入 “操作” 两个字(当然也是自定义的),在此目录下再键入“对话框”;
  2. 右键 “对话框”,修改它的属性(比如改 IDID_OPT_DLG

Step 5 在 CxxView类 中,响应COMMAND消息

  1. 打开 类向导(Ctrl+Shift+X),如图所示,双击 COMMAND,点确定即可。记得在 LiTestView.cpp添加 # include ”MyDlg.h”
    如果现在要运行代码看一下效果,则需要在 LiTestView.cpp 的 OnOptDlg() 函数中添加CMyDlg Dlg;Dlg.DoModal();,但是之后还会在这个函数里面加东西,所以先不用。

Step 6 回到对话框的界面,准备向里面加东西

  1. 点击 视图工具箱对话框编辑器,把需要的控件拖到对话框里面就好了;
  2. 弄成下面这样

Step 7 编辑控件

  1. 修改 ID,右键每一个控件,点击 属性,按照这个表格修改 ID即可;
对话框        IDD_DIALOGCOLOR
矩形单选按钮  IDC_RADIO_RECT
椭圆单选按钮  IDC_RADIO_ELIP
直线单选按钮  IDC_RADIO_LINE
x1示例编辑框  IDC_EDIT_X1
y1示例编辑框  IDC_EDIT_Y1
x2示例编辑框  IDC_EDIT_X2
y2示例编辑框  IDC_EDIT_Y2
实线单选按钮  IDC_RADIO_SOLID
虚线单选按钮  IDC_RADIO_DASH
点划线单选按钮 IDC_RADIO_DASHDOT
画笔宽度旁边的示例编辑框 IDC_EDIT_PEN_WIDTH
R旁边的示例编辑框 IDC_EDIT_PENR
G旁边的示例编辑框 IDC_EDIT_PENG
B旁边的示例编辑框 IDC_EDIT_PENB
颜色设置按钮 IDC_BUTTON_COLOR
画笔宽度静态文本 IDC_STATIC_PEN
  1. 重排控件顺序,ctrl+D,按照这个顺序依次 单击 控件即可
  2. 修改 矩形单选按钮和 实线单选按钮的控件 属性:把 group改为 true,其余不用管;
  3. 为控件与对话框类中的 消息处理函数建立映射,下面列举两种办法,选一种即可:
    一种是直接双击控件,出现函数;
    另一种是右键控件,属性,控件事件,选择需要的 消息函数即可。
    在这里,我们需要响应 颜色设置按钮的 BN_CLICKED消息,实线、虚线、点划线单选按钮的 BN_CLICKED消息;

Step 8 为控件添加控制变量

  1. 打开 类向导,点击 添加变量

    依次设置即可。别忘了,其他选项 里面可以设置最大值和最小值。
    按照下表添加控制变量:
绘图形状:int型变量型成员
绘制位置:四个int型变量型成员,正数
画笔属性:int型变量型成员
画笔宽度:控件型成员/int型变量型成员,正数
画笔颜色:三个int型变量型成员,在0~255之间

  1. 最后添加的变量如图所示,注意:
    三个 单选按钮 只需要1个控制变量(选第一个矩形实线)就可以了;
    IDC_EDIT_PEN_WIDTH 需要添加两个变量,同名,但类型不一样。

Step 9 修改CMyDlg类构造函数

  1. 类向导,找到这个函数,系统已经自动生成了。只需要修改值就好。
CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/): CDialog(IDD_MYDIALOG, pParent), m_nColorB(0), m_nColorG(0), m_nColorR(0), m_nPosX1(20), m_nPosX2(300), m_nPosY1(20), m_nPosY2(300), m_nShape(0), m_nPen(0), m_nPenWidth(1)
{}

Step 10 编写控件的消息处理函数

  1. 颜色设置按钮的 BN_CLICKED消息
    也是用 类向导找,方便一些,代码来自都来自 PPT
void CMyDlg::OnBnClickedButtonColor() {UpdateData();COLORREF color;CColorDialog colorDlg;if(colorDlg.DoModal() == IDOK) {color = colorDlg.GetColor();m_nColorR = GetRValue(color);m_nColorG = GetGValue(color);m_nColorB = GetBValue(color);UpdateData(FALSE);}
}
  1. 实线、虚线、点划线单选按钮的 BN_CLICKED消息,下面的代码意思是使画笔宽度编辑框 消失
void CMyDlg::OnBnClickedRadioSolid()
{GetDlgItem(IDC_STATIC_PEN)->ShowWindow(SW_NORMAL); m_editPenWidth.ShowWindow(SW_NORMAL);
}
void CMyDlg::OnBnClickedRadioDash()
{GetDlgItem(IDC_STATIC_PEN)->ShowWindow(SW_HIDE); m_editPenWidth.ShowWindow(SW_HIDE);
}

Step 11 创建对话框模板并显示对话框

  1. LiTestView.cpp类定义中 添加变量:类向导,点击 添加自定义
  2. LiTestView.cpp类构造函数里面初始化变量:类向导,找到它的构造函数,点击 转到定义
CLiTestView::CLiTestView() noexcept
{// TODO: 在此处添加构造代码m_nShape = 0;// 绘制形状m_nPen = 0;// 画笔类型m_nPenWidth = 0;// 画笔宽度m_isDraw = false;
}
  1. LiTestView.cpp类的 菜单响应函数OnOptDlg()函数)里面添加
CMyDlg Dlg;
if( Dlg.DoModal() == IDOK) {m_isDraw = true;m_nShape = Dlg.m_nShape;    // 绘制形状m_nPen   = Dlg.m_nPen;  // 画笔类型rect.left = Dlg.m_nPosX1;  rect.right = Dlg.m_nPosX2;rect.top = Dlg.m_nPosY1;  rect.bottom = Dlg.m_nPosY2;if(m_nPen == 0)      // 实线画笔m_nPenWidth = Dlg.m_nPenWidth;elsem_nPenWidth = 1;color = RGB(Dlg.m_nColorR,Dlg.m_nColorG,Dlg.m_nColorB);Invalidate();}
  1. LiTestView.cpp类OnDraw()函数里面添加
CPen newPen; CPen * pOldPen;
switch(m_nPen) {case 0: newPen.CreatePen(PS_SOLID,m_nPenWidth,color); break;
case 1: newPen.CreatePen(PS_DASH,m_nPenWidth,color);  break;
case 2:  newPen.CreatePen(PS_DASHDOT,m_nPenWidth,color);break;
}
pOldPen = pDC->SelectObject(&newPen);
switch(m_nShape) {case 0:pDC->Rectangle(rect);   break;case 1:pDC->Ellipse(rect); break;case 2: pDC->MoveTo(CPoint(rect.left,rect.top));pDC->LineTo(CPoint(rect.right,rect.bottom));  break;
}
pDC->SelectObject(pOldPen);

OK,整完了,虽然操作流程熟悉了,但还是要知道每一步的意义啊。

个人作业,转载需注明网址。谢谢。
https://blog.csdn.net/Wolf_AgOH/article/details/118661530

【MFC】对话框练习相关推荐

  1. 使用VC++6.0创建MFC对话框程序

    使用VC++6.0创建MFC对话框程序

  2. MFC对话框中的工具栏、状态栏设计小结

    对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...

  3. CEF:MFC 对话框 Demo(VS2013)

    原文链接:https://blog.csdn.net/blackwoodcliff/article/details/74276848 随着 HTML5 的崛起和 IE 的淘汰,微软 Web Brows ...

  4. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  5. MFC对话框动态刷新图片(仿照全屏屏保)

    最近做MFC对话框工程 用到全屏刷新图片的功能,由于功能实现比较简单,便使用CImage类配合定时器制作,下面贴上实现方式: 增加消息响应事件: //在对话框属性的消息中 添加WM_PAINT与WM_ ...

  6. MFC对话框自适应大小(四舍五入)高精度版本

    最近写MFC对话框项目需要控件自适应窗口的大小-,使用以前用过的方法经过多次测试发现对话框内的部件"每经过一次拉伸或收缩都会有一定比例的缩小(控件朝左上方向缩小)":   为了解决 ...

  7. BCGControlBar MFC对话框换肤 续

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  8. 在MFC对话框中显示html网页

    最近在写一个小软件,想在MFC对话框中显示帮助文档,都是html格式的,上网找了好多资料,用一个CHtmlCtrl类的东西,但是网上找的这个类放在VS2005下编译不过去,老是提示错误.于是几经修改, ...

  9. MFC对话框动态背景(定时器)

    MFC对话框动态背景 一.创建对话框 二.添加背景图片 三.加载图片到对话框 四.添加定时器并初始化 五.运行结果 一.创建对话框 1.打开VS(这里是VS2017),文件->新建->项目 ...

  10. 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)

    科学计算器(简化版) 最终界面: 全部源代码下载地址: 链接: http://download.csdn.net/detail/u012339743/8198227 详细编写过程: 1.    打开V ...

最新文章

  1. iis上实现虚拟目录
  2. LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法
  3. 【案例分析】android广播接收不到原因分析
  4. 5G研发大幕开启 终端硝烟已燃
  5. mysql待办事项表名_Activiti中彻底解决待办事项列表查询复杂、API不友好的设计方案...
  6. layui表格展示数据时:返回的数据不符合规范,正确的成功状态码应为:code: 0
  7. 应对全场景AI框架部署挑战,MindSpore“四招”让你躺平
  8. abap 创建出口历程_SAP ABAP第一,两,三代出口型BADI实现 解释的概念
  9. 转载---安装mysql5.7,遇到的问题
  10. csdn 不登录浏览全文 chrome 浏览器
  11. 巧用FineReport搭建成本管控监测系统
  12. 笔记本电脑投屏到电视_电脑怎么投屏到电视?掌握这3个方法就够了
  13. 空间怎么不能设置html,空间首页登陆 登陆QQ空间怎么将主页设置为首页?
  14. 常用保险术语256条
  15. ccf 节日 java 思路
  16. wim工具扫描linux磁盘,[V1.30.2011.501版]WimTool -- Wim文件的图形视窗处理工具[无忧首发]...
  17. 自学简单编程可行吗?
  18. Sketch及其相关插件介绍
  19. Excel怎么换行?简单!Excel大神教会了我N种换行方法
  20. 百度地图POI数据获取

热门文章

  1. 在Gmail改造之后,Outlook推出了专注于商业用户的新功能
  2. sourcetree 卡顿_Dolphin模拟器声音卡顿怎么解决 一个设置搞定-
  3. 【英语小结】四月小结
  4. Apollo:参考线ReferenceLine是如何定义的
  5. 阿里云服务器需要安装杀毒软件吗?
  6. 关于三大运营商的流量卡介绍以及选择方法
  7. 商业智能BI和数据可视化的区别
  8. 干涉测量中的衍射效应
  9. 重读《人人都是产品经理》6产品经理的自我修养
  10. Boomerang: a Metadata-Free Architecture for Control Flow Delivery