VC6 MFC Dialog as apllication 编程

MFC框架虽然古老,但编程还是方便多了,在操控界面控件的基础上,平时在Console模式习练的类可以融入到MFC中,开发应用程序还是比较方便的。下图是习练程序的界面。

说明:

一个EDIT框,一个Label框; 当点击 Execute钮时显示 Hello World!

一个ProgressBAR,程序把它放了一个固定位置。

一个ComboBox,一个ListBox,当Execute时加入Hello World n

二个水平滚动条,点击或改变时在下部的EDIT框中显示POS数值

一个SPIN,点击时在其下面显示改变的数值

几个CheckBox和Radio button,Execute时放在固定位置。

一个EDIT用于显示对DLL的调用。

步骤一:File -> New 一个MFC新程序

选择 Dialog based 应用程序模板,其它页面用默认值。

步骤二:在Dialog页面上摆控件

步骤三:Dialog或控件上右键,进入ClassWizard

进入后是 message map页

它旁边是member页

左侧的ID,在右侧有Control类的成员名 m_Edit1Ctrl,也可设数据变量名m_Edit1Val。在WIN32SDK编程时通过ID得到控件的handle,然后操作控件。现在则通过 m_Edit1Ctrl 成员名,操作它映身的左侧的那个ID的控件,具体找某个ID控件的事情交给MFC去做。在程序代码中是下面的样子:

void CMyMFC1Dlg::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyMFC1Dlg)DDX_Control(pDX, IDC_EDIT7, m_Edit7Ctrl);DDX_Control(pDX, IDC_EDIT4, m_Edit4);DDX_Control(pDX, IDC_SPIN2, m_Spin2);DDX_Control(pDX, IDC_EDIT3, m_Edit3);DDX_Control(pDX, IDC_SCROLLBAR1, m_Scroll1);DDX_Control(pDX, IDC_LIST1, m_List1);DDX_Control(pDX, IDC_COMBO1, m_Combo1);DDX_Control(pDX, IDC_PROGRESS1, m_Pbar1);DDX_Control(pDX, IDC_EDIT1, m_Edit1);DDX_Control(pDX, IDC_STATIC1, m_Label1);DDX_Text(pDX, IDC_EDIT2, m_Edit2val);DDX_Text(pDX, IDC_EDIT3, m_Edit3val);DDX_Text(pDX, IDC_EDIT4, m_Edit4val);DDX_Text(pDX, IDC_EDIT7, m_Edit7Val);//}}AFX_DATA_MAP
}

在上面代码的下方是消息映射代码

BEGIN_MESSAGE_MAP(CMyMFC1Dlg, CDialog)//{{AFX_MSG_MAP(CMyMFC1Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_WM_HSCROLL()ON_BN_CLICKED(IDC_BUTTON2, OnButton2)//}}AFX_MSG_MAP
END_MESSAGE_MAP()

工具箱中的控件基本上都映射好的,但ScrollBAR没有,要自己做映射、写代码,不明白微软为什么要把它单独空出来啥都不做。

在消息映射下面的OnInitDialog中把EDIT4设为SPIN的密友,让密友控件显示Spin的变化。然后创建二个滚动条的指针,并设定它们可变化的范围。Edit2和Edit3初始显示 0 值。

	m_Spin2.SetBuddy(GetDlgItem(IDC_EDIT4));m_Spin2.SetRange(0,255);  // TODO: Add extra initialization here//pScrollBar 为指向滚动条控件的指针CScrollBar* pScrollBar=(CScrollBar*)GetDlgItem(IDC_SCROLLBAR1);CScrollBar* pScrollBar2=(CScrollBar*)GetDlgItem(IDC_SCROLLBAR2);//设置滚动条的滚动范围和当前位置pScrollBar->SetScrollRange(0,100);pScrollBar->SetScrollPos(0);pScrollBar2->SetScrollRange(0,100);pScrollBar2->SetScrollPos(0);//将文本编辑框的值初始化为0SetDlgItemInt(IDC_EDIT2,0,TRUE);SetDlgItemInt(IDC_EDIT3,0,TRUE);

当点按Execute按钮Button1时,在OnButton1()中执行如下代码。如果将每个控件看成一个Class,那这个Class的右边即是它的方法,比如AddString, SetWindowText等。

void CMyMFC1Dlg::OnButton1() 
{// TODO: Add your control notification handler code herem_Edit1.SetWindowText(_T("Hello World!"));m_Label1.SetWindowText(_T("Hello World!"));m_Pbar1.SetRange(0, 100); m_Pbar1.SetPos(25);m_Combo1.AddString("Hello world 1");m_Combo1.AddString("Hello world 2");m_Combo1.AddString("Hello world 3");m_Combo1.AddString("Hello world 4");m_Combo1.AddString("Hello world 5");m_Combo1.SelectString(1, "Hello world 5");m_List1.AddString("Hello World 1");m_List1.AddString("Hello World 2");m_List1.AddString("Hello World 3");m_List1.AddString("Hello World 4");m_List1.AddString("Hello World 5");m_Scroll1.SetScrollRange(1,100,true);m_Scroll1.SetScrollPos(50, true);CheckDlgButton(IDC_CHECK1, 1);CheckDlgButton(IDC_CHECK2, 1);CheckRadioButton(IDC_RADIO1, IDC_RADIO4, IDC_RADIO2);
}

对滚动条的处理是在CSDN网友代码基础上修改的,他直接将代码写在了程序里,没有单独创建新类。还有对SPIN的代码处理,那些代码是工作的,但如果给Spin SetBuddy密友控件直接就可显示的。

接下来的代码是对 MFC DLL 的调用

void CMyMFC1Dlg::OnButton2() 
{// TODO: Add your control notification handler code herechar mystring[25];itoa(fnMFC_dll(), mystring, 10);//m_Edit6.SetWindowText(mystring);m_Edit7Ctrl.SetWindowText(mystring);
}

在调用前,先包含它的H文件,再LINK时把它的LIB文件包括进去。

MFC暂时习练到此。那个DLL的编写,基本上MFC编写DLL生成的,生成后加了个返回42如下。

MFC_DLL_API int fnMFC_dll(void)
{
    return 42;
}

如果要计算,括号中的void可以是int等传送的变量,计算后再return。还可以增加新方法,实现真实有用的功能。MFC有些图表界面库挺不错的,如果开发图表类软件,可用界面库简化操作。感谢CSDN朋友们的代码示范!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/152673.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python海洋专题十四】读取多个盐度nc数据画盐度季节变化图

本期内容 读取多个盐度文件;拼接数据在画盐度的季节分布图Part01. 使用数据 IAP 网格盐度数据集 数据详细介绍: 见文件附件: pages/file/dl?fid378649712527544320 全球温盐格点数据.pdf IAP_Global_ocean_gridded_product.pdf 全球温…

第三课-软件升级-Stable Diffusion教程

前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…

linux centos Python + Selenium+Chrome自动化测试环境搭建?

在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境,需要执行以下步骤: 1、安装 Python CentOS 7 自带的 Python 版本较老,建议使用 EPEL 库或源码安装 Python 3。例如,使用 EPEL 库安装 Python 3: sud…

Pytorch笔记之回归

文章目录 前言一、导入库二、数据处理三、构建模型四、迭代训练五、结果预测总结 前言 以线性回归为例,记录Pytorch的基本使用方法。 一、导入库 import numpy as np import matplotlib.pyplot as plt import torch from torch.autograd import Variable # 定义求…

「专题速递」AR协作、智能NPC、数字人的应用与未来

元宇宙是一个融合了虚拟现实、增强现实、人工智能和云计算等技术的综合概念。它旨在创造一个高度沉浸式的虚拟环境,允许用户在其中交互、创造和共享内容。在元宇宙中,人们可以建立虚拟身份、参与虚拟社交,并享受无限的虚拟体验。 作为互联网大…

Prompt-Tuning(一)

一、预训练语言模型的发展过程 第一阶段的模型主要是基于自监督学习的训练目标,其中常见的目标包括掩码语言模型(MLM)和下一句预测(NSP)。这些模型采用了Transformer架构,并遵循了Pre-training和Fine-tuni…

上班第一天同事让我下载个小乌龟,我就去百度小乌龟。。。。

记得那会儿是刚毕业,去上班第一天,管我的那个上级说让我下载个小乌龟,等下把代码拉一下,我那是一脸懵逼啊,我在学校只学过git啊,然后开始磨磨蹭蹭吭吭哧哧的不知所措,之后我想也许百度能救我&am…

C语言内存函数

目录 memcpy(Copy block of memory)使用和模拟实现memcpy的模拟实现 memmove(Move block of memory)使用和模拟实现memmove的模拟实现: memset(Fill block of memory)函数的使用扩展 memcmp(Compare two blocks of memory)函数的使用 感谢各位大佬对我的支持,如果我的文章对你有…

PSN 两步验证解除2023.10.9经验贴

背景 本人10月1号收到Sony邮件,说是不规律登录,需修改密码后登录,然后我10月8日登录PS4的时候,提示两步验证。当时就想坏了,然后找B站相关经验贴,10月9号电话香港客服,解除了两步验证&#xff0…

Windows10打开应用总是会弹出提示窗口的解决方法

用户们在Windows10电脑中打开应用程序,遇到了总是会弹出提示窗口的烦人问题。这样的情况会干扰到用户的正常操作,给用户带来不好的操作体验,接下来小编给大家详细介绍关闭这个提示窗口的方法,让大家可以在Windows10电脑中舒心操作…

计算机网络八股

1、请你说说TCP和UDP的区别 TCP提供面向连接的可靠传输,UDP提供面向无连接的不可靠传输。UDP在很多实时性要求高的场景有很好的表现,而TCP在要求数据准确、对速度没有硬件要求的场景有很好的表现。TCP和UDP都是传输层协议,都是为应用层程序服…

大数据——Spark Streaming

是什么 Spark Streaming是一个可扩展、高吞吐、具有容错性的流式计算框架。 之前我们接触的spark-core和spark-sql都是离线批处理任务,每天定时处理数据,对于数据的实时性要求不高,一般都是T1的。但在企业任务中存在很多的实时性的任务需求&…

超大视频如何优雅切片

背景 有一次录屏产生了一个大小为33G的文件, 我想把他上传到B站, 但是B站最大只支持4G. 无法上传, 因此做了一个简单的探索. 质疑与思考 a. 有没有一个工具或一个程序协助我做分片呢? 尝试 a. 必剪 > 有大小限制, 添加素材加不进去(而且报错信息也提示的不对) b. PR &…

C++设计模式_07_Bridge 桥模式

文章目录 1. 动机(Motivation)2. 代码演示Bridge 桥模式2.1 基于继承的常规思维处理2.2 基于组合关系的重构优化2.3 采用Bridge 桥模式的实现 3. 模式定义4. 结构(Structure)5. 要点总结 与上篇介绍的Decorator 装饰模式一样&…

从零开始读懂相对论:探索爱因斯坦的科学奇迹

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 阿尔伯特爱因斯坦…

竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…

Transformer预测 | Pytorch实现基于Transformer 的锂电池寿命预测(CALCE数据集)

文章目录 效果一览文章概述模型描述程序设计参考资料效果一览 文章概述 Pytorch实现基于Transformer 的锂电池寿命预测,环境为pytorch 1.8.0,pandas 0.24.2 随着充放电次数的增加,锂电池的性能逐渐下降。电池的性能可以用容量来表示,故寿命预测 (RUL) 可以定义如下: SOH(t…

flutter开发实战-video_player插件播放抖音直播实现(仅限Android端)

flutter开发实战-video_player插件播放抖音直播实现(仅限Android端) 在之前的开发过程中,遇到video_player播放视频,通过查看video_player插件描述,可以看到video_player在Android端使用exoplayer,在iOS端…

workerman的基本用法(示例详解)

workerman是什么? Workerman是一个异步事件驱动的PHP框架,具有高性能,可轻松构建快速,可扩展的网络应用程序。支持HTTP,Websocket,SSL和其他自定义协议。支持libevent,HHVM,ReactPH…

el-table 设置最大高度且能刚好撑满

max-height"calc(90vh - 120px)"90vh视口高度的90%自行调整即可