MFC(二)集成基础控件

目录

  • OnCreate
  • CStatic【标签,图片】
  • CEdit【文本框,密码框,数值框,文本区】
  • CButton【按钮,单选按钮,多选按钮】
  • CComboBox【下拉列表,列表】
  • CSliderCtrl【滑动条】
  • CListCtrl【表格】
  • CAnimateCtrl【视频】
  • MessageBox【弹出对话框】
  • CFileDialog【文件选择&保存框】
  • SHBrowseForFolder【文件夹选择框】
  • OnButtonClick【按钮单击事件处理】

OnCreate

控件的动态创建代码可以放在OnCreate函数中,查阅MFC文档可知对应函数
MFC文档下载地址:http://dx.198424.com/soft1/vcmfc.zip

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CStatic【标签,图片】

#include "atlimage.h"CRect getRect(int x, int y, int width, int height) {CRect r(x, y, x + width, y + height);return r;
}int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int labelId = 1, imageViewId = 2;CStatic* label = new CStatic;label->Create(TEXT("标签"), defaultStyle, getRect(10, 10, 40, 30), this, labelId);CImage image;image.Load(TEXT("mfc.png"));HBITMAP hBmp = image.Detach();CStatic* imageView = new CStatic;imageView->Create(NULL, defaultStyle | SS_BITMAP | SS_CENTERIMAGE, getRect(10, 60, 200, 100), this, imageViewId);imageView->SetBitmap(hBmp);return 1;
}

CEdit【文本框,密码框,数值框,文本区】

int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int editStyle = defaultStyle | ES_AUTOHSCROLL | WS_BORDER;int textAreaStyle = defaultStyle | WS_BORDER | ES_MULTILINE | ES_AUTOVSCROLL;int textInputId = 1, passwordInputId = 2, numberInputId = 3, textAreaInputId = 4;CEdit* textInput = new CEdit;textInput->Create(editStyle, getRect(10, 10, 150, 30), this, textInputId);textInput->SetWindowText(TEXT("文本输入框"));// 密码输入框CEdit* passwordInput = new CEdit;passwordInput->Create(editStyle | ES_PASSWORD, getRect(10, 50, 150, 30), this, passwordInputId);// 数值输入框CEdit* numberInput = new CEdit;numberInput->Create(editStyle | ES_NUMBER, getRect(10, 90, 150, 30), this, numberInputId);CEdit* textAreaInput = new CEdit;textAreaInput->Create(textAreaStyle, getRect(10, 130, 150, 100), this, textAreaInputId);textAreaInput->SetWindowText(TEXT("多行文本区"));return 1;
}

CButton【按钮,单选按钮,多选按钮】

int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int pushButtonId = 1, radioButton1Id = 2, radioButton2Id = 3, checkBox1Id = 4, checkBox2Id = 5;CButton* pushButton = new CButton;pushButton->Create(TEXT("按钮"), defaultStyle | BS_PUSHBUTTON, getRect(10, 10, 60, 30), this, pushButtonId);// 单选按钮, 必须设置分组, 处于同一组的按钮, 只能选中其中一个// 处于同一组的按钮, 首个按钮必须添加WS_GROUP风格, 它们的ID往往是连续递增的// 一旦添加具有WS_GROUP风格的按钮, 则代表上一组的成员已经分配完毕, 准备分配下一组的成员CButton* radioButton1 = new CButton;radioButton1->Create(TEXT("男"), defaultStyle | BS_AUTORADIOBUTTON | WS_GROUP, getRect(10, 50, 60, 30), this, radioButton1Id);radioButton1->SetCheck(true);CButton* radioButton2 = new CButton;radioButton2->Create(TEXT("女"), defaultStyle | BS_AUTORADIOBUTTON, getRect(70, 50, 60, 30), this, radioButton2Id);// 多选按钮CButton* checkBox1 = new CButton;checkBox1->Create(TEXT("A"), defaultStyle | BS_AUTOCHECKBOX | WS_GROUP, getRect(10, 90, 60, 30), this, checkBox1Id);checkBox1->SetCheck(true);CButton* checkBox2 = new CButton;checkBox2->Create(TEXT("B"), defaultStyle | BS_AUTOCHECKBOX, getRect(70, 90, 60, 30), this, checkBox2Id);return 1;
}

CComboBox【下拉列表,列表】

int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int comboBoxId = 1, listBoxId = 2;// 下拉列表的高度值最好设大点, 不然下拉框无法显示CComboBox* comboBox = new CComboBox;comboBox->Create(defaultStyle | CBS_DROPDOWNLIST, getRect(10, 10, 100, 100), this, comboBoxId);comboBox->AddString(TEXT("方案1"));comboBox->AddString(TEXT("方案2"));comboBox->AddString(TEXT("方案3"));comboBox->AddString(TEXT("方案4"));comboBox->SetCurSel(0);// 普通列表CListBox* listBox = new CListBox;listBox->Create(defaultStyle | WS_BORDER, getRect(120, 10, 100, 100), this, listBoxId);listBox->AddString(TEXT("方案1"));listBox->AddString(TEXT("方案2"));listBox->AddString(TEXT("方案3"));listBox->AddString(TEXT("方案4"));listBox->SetCurSel(0);return 1;
}

CSliderCtrl【滑动条】

#include <afxcmn.h>int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int sliderId = 1;CSliderCtrl* slider = new CSliderCtrl;slider->Create(defaultStyle | TBS_BOTH | TBS_TOOLTIPS, getRect(10, 10, 180, 50), this, sliderId);slider->SetRange(0, 100);slider->SetPos(50);return 1;
}

CListCtrl【表格】

#include <afxcmn.h>int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int tableViewId = 1, columnNum = 3, columnWidth = 100;CListCtrl* tableView = new CListCtrl;tableView->Create(defaultStyle | WS_BORDER | LVS_REPORT, getRect(10, 10, columnNum * columnWidth, 200), this, tableViewId);tableView->InsertColumn(1, TEXT("学号"), LVCFMT_CENTER, columnWidth);tableView->InsertColumn(2, TEXT("姓名"), LVCFMT_CENTER, columnWidth);tableView->InsertColumn(3, TEXT("性别"), LVCFMT_CENTER, columnWidth);int idx = tableView->InsertItem(0, TEXT("0"));tableView->SetItemText(idx, 1, TEXT("AMC"));tableView->SetItemText(idx, 2, TEXT("男"));idx = tableView->InsertItem(1, TEXT("1"));tableView->SetItemText(idx, 1, TEXT("QAQ"));tableView->SetItemText(idx, 2, TEXT("男"));return 1;
}

CAnimateCtrl【视频】

#include <afxcmn.h>int MyFrame::OnCreate(LPCREATESTRUCT)
{int defaultStyle = WS_CHILD | WS_VISIBLE;int mediaViewId = 1;// 只能播放简单的AVI视频, 绝大部分AVI视频都不符合要求// 它非常不实用, 如果想要测试它, 推荐Window Xp系统自带的clock.aviCAnimateCtrl* mediaView = new CAnimateCtrl;mediaView->Create(defaultStyle | WS_BORDER, getRect(10, 10, 300, 300), this, mediaViewId);mediaView->Open(TEXT("clock.avi"));mediaView->Play(0, -1, -1);return 1;
}

MessageBox【弹出对话框】

int MyFrame::OnCreate(LPCREATESTRUCT)
{// 类型                按钮[返回值]// MB_OK               确认[IDOK]// MB_YESNO            是[IDYES]+否[IDNO]// MB_ABORTRETRYIGNORE 中止[IDABORT]+重试[IDRETRY]+忽略[IDIGNORE]// MB_YESNOCANCEL      是+否+取消[IDCANCEL]// MB_RETRYCANCEL      重试+取消// MB_OKCANCEL         确认+取消// 图标                描述// MB_ICONWARNING      !// MB_ICONASTERISK     i// MB_ICONQUESTION     ?// MB_ICONERROR        Xint result = MessageBox(TEXT("消息内容"), TEXT("对话框标题"), MB_YESNO | MB_ICONQUESTION);CString str;str.Format("返回值: %d", result);MessageBox(str);return 1;
}

CFileDialog【文件选择&保存框】

#include <afxdlgs.h>
//#include <vector>int MyFrame::OnCreate(LPCREATESTRUCT)
{// 打开 or 保存BOOL open = TRUE;// 默认打开的文件, 有\\后缀表示文件夹LPCTSTR defaultFile = TEXT("D:\\Soft\\");// 类型说明和扩展名用|分割, 同种扩展名用;分割// 不同文件类型用|分割, 末尾用||指明LPCTSTR filter = TEXT("文本|*.txt|图片|*.bmp;*.jpg;*.png|所有文件|*.*||");// 如果想要打开多个文件, 可添加风格: OFN_ALLOWMULTISELECTCFileDialog fileDialog(open, NULL, defaultFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, filter);if (fileDialog.DoModal() == IDOK){CString path = "你选择的路径是: " + fileDialog.GetPathName();MessageBox(path);// 打开多个文件, 需要使用以下代码//std::vector<CString> fileNames;//POSITION pos = fileDialog.GetStartPosition();//while (pos != NULL)//{//	CString strFile = fileDialog.GetNextPathName(pos);//	fileNames.push_back(strFile);//}}return 1;
}

SHBrowseForFolder【文件夹选择框】

#include <shlobj.h>
#pragma comment(lib,"shell32.lib")int MyFrame::OnCreate(LPCREATESTRUCT)
{TCHAR path[MAX_PATH];BROWSEINFO bi;LPITEMIDLIST lp;bi.hwndOwner = NULL;bi.pidlRoot = NULL;bi.pszDisplayName = path;bi.lpszTitle = TEXT("请选择文件夹");bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;// 如果想要定制化功能, 可以了解以下2个参数bi.lpfn = NULL;bi.lParam = NULL;if ((lp = SHBrowseForFolder(&bi)) != NULL && SUCCEEDED(SHGetPathFromIDList(lp, path))){MessageBox(path);}return 1;
}

OnButtonClick【按钮单击事件处理】

// 用户按钮处理函数, 可查文档
// 映射入口                               函数原型 
// ON_BN_CLICKED( <id>, <memberFxn> )    afx_msg void memberFxn( ) // mfc.h
class MyFrame : public CFrameWnd
{
public:MyFrame();DECLARE_MESSAGE_MAP()afx_msg int OnCreate(LPCREATESTRUCT);afx_msg void OnClickByOpenButton();
};// mfc.cpp
int IDC_OPENBUTTON = 1;BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)ON_WM_CREATE()ON_BN_CLICKED(IDC_OPENBUTTON, &MyFrame::OnClickByOpenButton)
END_MESSAGE_MAP()int MyFrame::OnCreate(LPCREATESTRUCT)
{CButton* openButton = new CButton;openButton->Create(TEXT("OPEN"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 10, 70, 40), this, IDC_OPENBUTTON);return 1;
}void MyFrame::OnClickByOpenButton()
{MessageBox(TEXT("我点击了打开按钮"));
}

以上代码创建了一个id=1的按钮,它的单击事件处理函数是OnClickByOpenButton
函数名是可以自定义的,它的声明写到MyFrame中即可
需要注意映射入口,需要填写按钮id和对应的处理函数

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

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

相关文章

时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测

时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测&#xff08;完整源码…

Mysql数据库:MHA高可用架构

目录 前言 一、MHA概述 1、什么是MHA 2、MHA的特点 3、MHA的组成 4、MHA的工作原理 5、故障切换备选主库的算法 二、部署MHA高可用架构 1、环境部署 2、部署主从同步 2.1 修改主配置文件并创建软链接 2.1.1 master 修改主配置文件并创建软连接 2.1.2 slave1 修改主…

【JavaSE】类和对象详解(下)

前言 面向对象程序的三大特性&#xff1a;封装、继承、多态~ 书接上回 类和对象&#xff08;上&#xff09;~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 封装 private public 快速生成可访问封装的方法 包…

rocketmq管理工具rocketmq-console安装

rocketmq-console是一个图形化管理控制台&#xff0c;提供Broker集群状态查看&#xff0c;Topic管理&#xff0c;Producer、Consumer状态展示&#xff0c;消息查询等常用功能&#xff0c;这个功能在安装好RocketMQ后需要额外单独安装、运行。 中文文档地址&#xff1a;https:/…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A&#xff0c;请你先从小到大输出它的每个元素&#xff0c;再从大到小输出他的每个元素。 输入描述&#xff1a; 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an&#xff0c;表…

生成 SSH 公钥

Windows 用户建议使用 Windows PowerShell 或者 Git Bash&#xff0c;在 命令提示符 下无 cat 和 ls 命令。 1、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型 -C 注释 输出&#xff0c;如&#xff1a; 中间…

蓝桥杯嵌入式学习笔记(6):IIC程序设计

目录 前言 1. IIC基本原理 2. 电路原理 3. 代码编程 3.1 预备工作 3.2 AT24C02写读功能编写 3.2.1 AT24C02写操作实现 3.2.2 AT24C02读操作实现 3.3 MCP4017写读功能编写 3.3.1 MCP4017写操作实现 3.3.2 MCP4017读操作实现 3.4 main.c编写 3.4.1 头文件引用 3.4.…

Spring实战:采用Spring配置文件管理Bean

文章目录 一、Spring框架概述二、实战&#xff1a;采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Jakarta EE项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&…

Chrome浏览器隐藏的截图功能配置及使用

来自实用又方便&#xff0c;轻松打开Chrome浏览器隐藏的截图功能&#xff01;​​​​​​​ 一、通过谷歌Chrome浏览器 现在直接通过谷歌Chrome浏览器内置功能&#xff0c;免安装扩充插件也可以实现Chrome的截图和长截图功能了&#xff01; 也不需要额外安装任何截图工具 &a…

数据链路层之信道:数字通信的桥梁与守护者

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Adaboost集成学习 | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测) 单变量时间序列单步预测。 ELM(Extreme Learning Machine,极限学习机)和AdaBoost(Adaptive Boosting,自适应提升)都是机…

基于 FFmpeg 和 SDL 的音视频同步播放器

基于 FFmpeg 和 SDL 的音视频同步播放器 基于 FFmpeg 和 SDL 的音视频同步播放器前置知识音视频同步简介复习DTS、PTS和时间基 程序框架主线程解复用线程音频解码播放线程视频解码播放线程 音视频同步逻辑源程序结果工程文件下载参考链接 基于 FFmpeg 和 SDL 的音视频同步播放器…

【Java 多线程】从源码出发,剖析Threadlocal的数据结构

文章目录 exampleset(T value)createMap(t, value);set(ThreadLocal<?> key, Object value)ThreadLocalMap和Thread的关系 全貌 ThreadLocal是个很重要的多线程类&#xff0c;里面数据结构的设计很有意思&#xff0c;很巧妙。但是我们平时使用它的时候常常容易对它的使用…

24年大一训练一(东北林业大学)

前言&#xff1a; 周五晚上的训练赛&#xff0c;以后应该每两周都会有一次。 正文&#xff1a; Problem:A矩阵翻转&#xff1a; #include<bits/stdc.h> using namespace std; int a[55][55]; int main(){int n,m;while(cin>>n>>m){for(int i1;i<n;i){for…

2024.3.30学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p295-p314 super关键字 super代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器 super细节和语法 访问父类的属性&#xff0c;但不能访问父类的private属性 super.属性名 访问父类的…

CubeIDE 下如何将版本号和日期关联。

1. 使用__DATE__ 和__TIME__获取编译日期和时间。 2. 将__DATE__ 和__TIME__转换成UINT 3. 将转换后的数赋值给版本号。 4. 设置工程保证每次都会重新编译对应文件。 对应函数如下&#xff1a; uint8_t VER_MAIN; uint8_t VER_SUB; uint8_t VER_MIN; #include <stdlib.…

蓝桥杯刷题第四天

思路&#xff1a; 这道题很容易即可发现就是简单的暴力即可完成题目&#xff0c;我们只需满足所有数的和为偶数即可保证有满足条件的分法&#xff0c;同时也不需要存下每个输入的数据&#xff0c;只需要知道他是偶数还是奇数即可&#xff0c;因为我们只需要偶数个奇数搭配在一块…

使用通用内部函数对代码进行矢量化

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 目标 本教程的目标是提供使用通用内…

[flask]请求全局钩子

flask从入门到精通之钩子、异常、context、jinjia模板、过滤器 - 异步非阻塞 - 博客园 (cnblogs.com) 参考的这个博客&#xff0c;但有一个需要注意的是&#xff0c;最新版本的flask不知道是不是更新了还是怎么了&#xff0c;他的before_first_request不见了&#xff0c;如果继…

《极客时间TonyBai go语言第一课》学习笔记

文章目录 前置篇显式组合 大纲 前置篇 显式 在 C 语言中&#xff0c;下面这段代码可以正常编译并输出正确结果&#xff1a; #include <stdio.h> int main() { short int a 5; int b 8; long c 0; c a b; printf("%ld\n", c); }我们看到在上面这段代码中…