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.hqwc.cn/news/127744.html

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

相关文章

【小沐学前端】Windows下搭建WordPress(nginx1.25、PHP8.2、WordPress6.3、MySQL5.7)

文章目录 1、简介1.1 Nginx1.2 PHP1.3 WordPress1.4 MySQL 2、下载2.1 Nginx2.2 PHP2.3 WordPress2.4 MySQL 3、搭建环境3.1 Nginx3.2 PHP3.3 WordPress3.4 MySQL 4、配置WordPress4.1 选择语言4.2 配置数据库4.3 登录界面4.4 常规设置4.5 写作操作 结语 1、简介 WordPress是基…

科技云报道:押注向量数据库,为时过早?

科技云报道原创。 在大模型的高调火热之下,向量数据库也获得了前所未有的关注。 近两个月内,向量数据库迎来融资潮,Qdrant、Chroma、Weaviate先后获得融资,Pinecone宣布1亿美元B轮融资,估值达到7.5亿美元。 东北证券…

论文阅读-- A simple transmit diversity technique for wireless communications

一种简单的无线通信发射分集技术 论文信息: Alamouti S M. A simple transmit diversity technique for wireless communications[J]. IEEE Journal on selected areas in communications, 1998, 16(8): 1451-1458. 创新性: 提出了一种新的发射分集方…

Antv/s2 明细表 透视表实现和性能优化(一)

前言 以我实际项目环境为准,vuets为技术框架,代码如果有什么不懂欢迎留言评论我会回复的 透视表 定义文件 class PivotTableControl extends BaseControl {type pivotTable;label controls.chart.pivotTable;icon tc-color-pivot-table;widget () &…

7344-2015 交流伺服电动机通用技术条件

声明 本文是学习GB-T 7344-2015 交流伺服电动机通用技术条件.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了交流伺服电动机的分类、技术要求和试验方法、检验规则、交付准备。 本标准适用于两相交流伺服电动机(以下简称电机…

【FISCO-BCOS】十七、角色的权限控制

目录 一、角色定义 二、账户权限控制 1.委员新增、撤销与查询 2.委员权重修改 3.委员投票生效阈值修改 4. 运维新增、撤销与查询 一、角色定义 分为治理方、运维方、监管方和业务方。考虑到权责分离,治理方、运维方和开发方权责分离,角色互斥。 治理…

[每周一更]-(第65期):Docker容器监控工具推荐

Docker 容器化监控工具用于监视和管理 Docker 容器的性能、资源使用情况、日志、事件和状态等。以下是一些常用的 Docker 容器监控工具: Docker 自带的监控功能: Docker Stats: Docker 内置的命令,用于实时显示运行中容器的资源使用情况,包括…

8 个 Promise 高级用法

在 js 项目中,promise 的使用应该是必不可少的,但我发现在同事和面试者中,很多中级或以上的前端都还停留在promiseInst.then()、promiseInst.catch()、Promise.all等常规用法,连async/await也只是知其然,而不知其所以然…

完美解决 flex 实现一行三个,显示多行,左对齐

效果图 代码 <body><section class"content"><div class"item">元素</div><div class"item">元素</div><div class"item">元素</div><div class"item">元素</di…

用于现场仪表过程控制的多协议配置工具

一 挑战 在现代生产环境中&#xff0c;我们会使用各种现场设备来记录过程数据&#xff08;从温度传感器到压力、液位和流量计&#xff09;&#xff0c;而这些数据需要通过多种通信协议来进行传输&#xff0c;例如HART、FOUNDATION Fieldbus或PROFIBUS PA。为此&#xff0c;每个…

701. 二叉搜索树中的插入操作

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能存在多种有效的插入方式&a…

Jenkins配置钉钉通知

Jenkins 作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知&#xff0c;其主要通过 Ding…