VC6 MFC Dialog as apllication 编程

news/2024/5/19 22:42:26/文章来源:https://blog.csdn.net/weixin_45707491/article/details/133613026

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.luyixian.cn/news_show_367971.aspx

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

相关文章

【C++】指针与引用(学习笔记)

一、左值与右值 左值:编译器为其单独分配了一块存储空间,可以取其地址的,可以放在赋值运算符左边 右值:数据本身。不能取到其自身地址,只能赋值运算右边 左值最常见的情况如西数和数据成员的名字 右值是没有标识符、…

云数据库保护需要注意哪些事项?

云数据库保护是在云计算环境中对数据库进行保护和安全管理的重要措施。随着云计算的普及和应用,云数据库的保护也变得尤为重要。以下是安策分享的关于云数据库保护需要注意的一些事项。 云数据库的访问控制是保护数据库的首要任务。只有授权的用户或应用程序才能访问…

3分钟基于Chat GPT完成工作中的小程序

1. 写在前面 GPT自从去年爆发以来,各大公司在大模型方面持续发力,行业大模型也如雨后春笋一般发展迅速,日常工作中比较多的应用场景还是问答模式,作为写程序的辅助也偶尔使用。今天看到一篇翻译的博客“我用 ChatGPT,…

java socket实现代理Android App

实现逻辑就是转发请求和响应。 核心代码 // 启动代理服务器private void startProxyServer() {new Thread(new ProxyServer()).start();}// 代理服务器static class ProxyServer implements Runnable {Overridepublic void run() {try {// 监听指定的端口int port 8098; //一…

如何优雅构建自定义 Spring Boot 验证器,让你的代码更加丝滑!

作为一名开发人员,你应该知道确保应用程序中流动的数据的准确性和完整性是多么重要。Spring Boot提供了强大的验证功能,但有时我们需要额外的验证,创建适合特定需求的自定义验证器。 接下来,我们来介绍下如何完整的创建一个自定义…

Covert Communication 与选择波束(毫米波,大规模MIMO,可重构全息表面)

Covert Communication for Spatially Sparse mmWave Massive MIMO Channels 2023 TOC abstract 隐蔽通信,也称为低检测概率通信,旨在为合法用户提供可靠的通信,并防止任何其他用户检测到合法通信的发生。出于下一代通信系统安全链路的强烈…

揭开黑客的神秘面纱:黑客文化、技术手段与防御策略

目录 1. 引言1.1 黑客的定义与起源1.2 黑客文化的形成与传承 2. 黑客的分类与目标2.1 道德黑客与恶意黑客2.2 黑客攻击的目标与动机解析 3. 黑客的技术手段3.1 网络入侵与渗透测试3.2 社会工程学与钓鱼攻击3.3 恶意软件与病毒传播3.4 数据泄露与身份盗窃 4. 防御黑客攻击的策略…

第2章 Micro SaaS 的优势

本章内容: 1.让您的努力产生更多成果2.可预测的经常性收入带来的财务安全3.最小的启动成本4.与您的用户直接联系5.能够构建一次但将其出售给许多人6.时间自由7.位置自由8.技术自由9.财务自由10.完全自营企业最后的想法 现在我们知道什么是 Micro SaaS,让…

U盘作为启动盘安装苹果OS X操作系统

如何制作 macOS USB启动盘?如何创建可引导的 macOS 安装器?接下来就为大家带来可引导的苹果电脑 macOS 系统U盘启动盘制作教程。U盘是我们在工作和生活中的好帮手,能储存和传递数据文件,重要的是,U盘还可以制作成苹果电…

Cocos Creator3.8 项目实战(七)Listview 控件的实现和使用

滚动列表在游戏中也很常见,比如排行榜 、充值记录等,在这些场景中,都有共同的特点, 那就是:数据量大 , 结构相同。 在cocoscreator 中,没有现成的 Listview 控件, 无奈之下&#xff…

水土保持方案编制丨点型项目、市政工程、线型工程、矿山工程、水利工程、取土场/弃渣场、补报项目、水土保持监测验收等

目录 专题一 点型水土保持方案编制方法及案例分析 专题二 市政工程水土保持方案编制方法及案例分析 专题三 线型工程水土保持方案编制方法及案例分析 专题四 矿山工程水土保持方案编制方法及案例分析 专题五 水利工程水土保持方案编制方法及案例分析 专题六 取土场、弃渣…

BootstrapBlazor企业级组件库:前端开发的革新之路

作为一名Web开发人员,开发前端我们一般都是使用JavaScript,而Blazor就是微软推出的基于.Net平台交互式客户Web UI 框架,可以使用C#替代JavaScript,减少我们的技术栈、降低学习前端的成本。 而采用Blazor开发,少不了需…

VMware Workstation Pro详解

零、文章目录 VMware Workstation Pro详解 1、虚拟机介绍 (1)介绍 VMware Workstation Pro 是行业标准桌面 Hypervisor,使用它可在 Windows 或 Linux 桌面上运行 Windows、Linux 和 BSD 虚拟机。VMware官网地址:https://www.v…

redis命令学习

redis命令学习 redis的类型分为: string类型hash类型list类型set类型sortedset类型 string类型命令 set key value 设置值,key是键 value是值get key 根据键获取值setex key second value 设置值有效时间 second 是时间setnx key value 只有key不存在…

CUDA 安装

查看自己电脑的cuda版本:见文章 查看CUDA版本 我的是: 他的意思就是说:俺的显卡支持的cuda版本是12.0的(向下兼容) 然后我的项目tensorflow-gpu版本是1.13.2版本的,对应的cuda为10: &#xff…

picodet onnx转其它芯片支持格式时遇到

文章目录 报错信息解决方法两模型精度对比 报错信息 报错信息为: Upsample(resize) Resize_0 not support attribute coordinate_transformation_mode:half_pixel. 解决方法 整个模型转换过程是:paddle 动态模型转成静态,再用paddle2onnx…

1700*D. Flowers(DP前缀和预处理打表)

Problem - 474D - Codeforces 题意: 有白花和红花两种,把 x 朵花排成一排,要求白花必须连续 k 个一块放置,则有 cnt 种情况。给出 a 和 b,计算a到b之间的 x 对应的 cnt 总和,并且对1e97取模。 解析&#x…

Kafka 简介之(学习之路)

正文 一、简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务…

日期相关工具类

日期相关工具类 【一】介绍【1】SimpleDateFormat 为什么是线程不安全【2】解决 SimpleDateFormat 线程不安全的方法 【二】LocalDate API【三】LocalTime API【四】LocalDateTime API【五】转换关系【1】LocalDateTime 与 LocalDate 之间的转换【2】LocalDateTime 与 Date 之间…

PHP 个人愿望众筹网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 个人愿望众筹网站系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php 个人愿望众筹网站 代码 https://download.csdn.net/download/qq_41221322/8…