MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)
简介
- 本文章主要介绍下MFC常用控件的使用,包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)、树控件(Tree Control)的使用。
创建项目
- 我们选择 文件->新建->新建项目,选择MFC程序

- 选择基于对话框,点击完成。

- 创建完成后,我们选择左下角的资源视图。然后点击Dialog下的IDD_CSTATIC_DIALOG,就可以看到MFC自动创建好的对话框界面。

静态文本框 Static Text
- 我们点击左边的工具箱,有的可能在右边。选择Static Text,就会放置到界面上。我们点击输入文字,可以直接修改显示内容。

- 我们常用的功能可能是需要在代码中去获取和设置静态文本框的显示内容。点击静态文本框,属性,可以先修改下ID,便于我们区分

- 然后选择静态文本框,右击,选择添加变量。可以设置变量类型等信息。

- 然后选择类视图,可以在对话框初始化接口中,设置文本框的显示内容

- 运行效果

- 获取文本框显示内容。可直接使用如下代码
-
CString str;m_textShow.GetWindowTextW(str);
编辑框 Edit Control
- 选择工具箱,把Edit Control拖到界面上,运行后,我们可以直接在编辑框中输入内容

- 如果想要输入多行内容,右击控件选择属性,将Multiline和Want Return属性改为true,输入一行再回车,就可以输入多行内容。

- 默认垂直方向输入是有限的,我们将Auto VScroll改为true,垂直方向也可以一直输入。
- 将Horizontal Scroll和Vertical Scroll改为true,可以给编辑框加上水平和垂直滚动条


- 如果要在代码里设置和获取编辑框内容,选择编辑框,右击,添加变量

- 在对话框初始化函数中去设置和获取文本框内容

- 刚才添加变量时,类别选的是Control,我们也可以指选择Value,这时候变量类型有很多,可以选择一个字符串类型

- 在代码里设置和获取编辑框内容
-
//设置内容m_editStr = TEXT("this is value MFC");//将变量内容同步到控件中UpdateData(FALSE);//将控件内容同步到变量中UpdateData(TRUE);//获取内容MessageBox(m_editStr);
下拉框 Combo Box
- 在工具栏选择 Combo Box

- 右击控件选择属性,可以在Data属性中写入下拉框要显示的内容,中间用分号分隔


- 默认是可以进行编辑的。如果不想编辑,可以将属性中的Type属性改为Drop List,有的这块显示的是中文,那可以选择下拉列表。这样下拉框就无法编辑了。
- 下拉列表的显示项,默认是按ASCII码排序。如果不想让自动排序,就按我们输入的顺序显示,可以将属性Sort设置为False
- 一般也都是在代码中添加显示内容,因此,先添加变量。

- 常用功能介绍
-
//添加显示内容m_ComBoxText.AddString(TEXT("C++"));m_ComBoxText.AddString(TEXT("JAVA"));m_ComBoxText.AddString(TEXT("PYTHON"));m_ComBoxText.AddString(TEXT("SHELL"));//设置默认选项m_ComBoxText.SetCurSel(0);//插入m_ComBoxText.InsertString(2, TEXT("PHP"));//删除m_ComBoxText.DeleteString(3);//获取索引对应的值CString comStr;m_ComBoxText.GetLBText(1, comStr); - 还有个常用功能,就是我们选择下拉框中某一项时,要获取到选择的具体是哪一个
- 选择控件属性,选择控件事件,选择CBN_SELCHANGE, 点击添加

- 就会自动生成一个事件函数,下拉框选择项改变时,就会触发该事件,可以在事件函数中获取当前选中的内容

列表 List Control
- 在工具栏中选择List Control控件,放到界面上。一般修改属性View为Report(报表模式)

- 添加一个变量

- 可以在初始化代码中设置数据和属性
-
CString strList[] = { TEXT("NAME"), TEXT("SEX"), TEXT("AGE") };//设置表头for (int i = 0; i < 3; i++) {//参数1:索引; 参数2:显示内容; 参数3:对齐方式; 参数4:列宽m_listControl.InsertColumn(i, strList[i], LVCFMT_LEFT, 100);}//设置数据CString strNameList[] = { TEXT("tom"), TEXT("jack"), TEXT("mary") };CString strSexList[] = { TEXT("boy"), TEXT("boy"), TEXT("girl") };CString strAgeList[] = { TEXT("18"), TEXT("20"), TEXT("17") };for (int i = 0; i < 3; i++) {//插入姓名m_listControl.InsertItem(i, strNameList[i]);//插入性别和年龄m_listControl.SetItemText(i, 1, strSexList[i]);m_listControl.SetItemText(i, 2, strAgeList[i]);}//设置行选择和网格线m_listControl.SetExtendedStyle(m_listControl.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); - 效果

树控件 Tree Control
- 在工具栏中选择Tree Control,拖拽到界面上

- 属性中可以设置 Has Lines为True,可以有线。设置Has Buttons为True,可以有折叠按钮。根节点之间要有线,可设置Lines At Root为True。
- 设置完可以看下效果

- 添加变量,在代码中写逻辑

- 可以先在初始化接口中设置节点

-
//设置节点HTREEITEM root = m_treeControl.InsertItem(TEXT("ROOT"), 0, 0, NULL);HTREEITEM parent = m_treeControl.InsertItem(TEXT("PARENT"), 1, 1, root);HTREEITEM sub1 = m_treeControl.InsertItem(TEXT("SUB1"), 2, 2, parent);HTREEITEM sub2 = m_treeControl.InsertItem(TEXT("SUB2"), 3, 3, parent);//设置默认选项m_treeControl.SelectItem(sub1); - 效果

- 常用的一个功能是我们需要知道选择的是哪一个。选择属性,在控件事件中选择TVN_SELCHANGE,添加事件

- 这个时候只有选中项改变,就会触发该事件,我们可以在对应的事件函数中完成相关操作

相关文章:
MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)
简介 本文章主要介绍下MFC常用控件的使用,包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)、树控件(Tree Control)的使用。 创建项目 我们选择 文件->新建->新建项目,选择MFC程序 选择基于对话…...
13 node 程序后台执行加上 tail 命令, 中断 tail 命令, 同时也中断了 node 程序
前言 呵呵 最近帮朋友解决问题[2022.09.08] 需要启动一个 node 程序, 然后 需要一个 startUp.sh 脚本 然后 反手写了一个过去, 按道理 来说 应该是 后台启动了对应的 node 程序, 然后将 标准输出, 错误输出 输出到 logs/nohup.log 日志文件中, 然后基于 tail 命令 来查看 …...
52癫痫发作预测的有效双自注意力残差网络
Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一,引起了众多研究者的广泛关注。癫痫发作预测,可以在许多方面大大提高患者的生活质量࿰…...
【计算机网络】Tcp IP 面试题相关
互联网协议群(TCP/IP):多路复用是怎么回事? 1.【问题】IPv4 和 IPv6 有什么区别? IPv4 是用 32 位描述 IP 地址,理论极限约在 40 亿 IP 地址; IPv6 是用 128 位描述 IP 地址,IPv6 可…...
【MySQL】MySQL的存储引擎
目录 概念 分类 操作 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查 询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在 许多不同的数据库管理系统…...
es6动态模块import()
目录 一、语法说明 二、适用场合 三、注意点 四、示例代码 五、效果 一、语法说明 import命令会被 JavaScript 引擎静态分析,先于模块内的其他语句执行(import命令叫做“连接” binding 其实更合适)。 // 报错 if (x 2) {import MyMod…...
【Flask】Jinja2模板(十四)
Jinja2是一个单独的Python包,Flask依赖Jinja2,安装Flask时会自动安装Jinja2。Jinja2可以将数据和模板结合在一起生成动态文本。 一、引入 来看一个最简单的视图函数: app.route(/) def hello_world():return Hello World! 这个…...
Mr. Cappuccino的第49杯咖啡——冒泡APP(升级版)之基于Docker部署Gitlab
冒泡APP(升级版)之基于Docker部署Gitlab基于Docker安装Gitlab登录Gitlab创建Git项目上传代码使用Git命令切换Git地址使用IDE更换Git地址基于Docker安装Gitlab 查看beginor/gitlab-ce镜像版本 下载指定版本的镜像 docker pull beginor/gitlab-ce:11.3.0…...
《机器学习》基础概念之【P问题】与【NP问题】
《机器学习》基础概念之【P问题】与【NP问题】 这里写目录标题《机器学习》基础概念之【P问题】与【NP问题】一、多项式&时间复杂度1.1. 多项式1.2.时间复杂度二、P问题 & NP问题2.1. P问题2.2.NP问题2.3.举例理解NP问题-TSP旅行商推销问题三、NP-hard问题&NP-C问题…...
WinRAR安装教程
文章目录WinRAR安装教程无广告1. 下载2. 安装3. 注册4. 去广告WinRAR安装教程无广告 1. 下载 国内官网:https://www.winrar.com.cn/ 2. 安装 双击,使用默认路径: 点击“安装”。 点击“确定”。 点击“完成”。 3. 注册 链接ÿ…...
C++:vector和list的迭代器区别和常见迭代器失效问题
迭代器常见问题的汇总vector迭代器和list迭代器的使用vector迭代器list迭代器vector迭代器失效问题list迭代器失效问题vector和list的区别vector迭代器和list迭代器的使用 学习C,使用迭代器和了解迭代器失效的原因是每个初学者都需要掌握的,接下来我们就…...
SpringSecurity如何实现前后端分离
前后端分离模式是指由前端控制页面路由,后端接口也不再返回html数据,而是直接返回业务数据,数据一般是JSON格式。Spring Security默认的表单登录方式,在未登录或登录成功时会发起页面重定向,在提交登录数据时ÿ…...
为ubuntu 18.04添加蓝牙驱动
目录背景方法背景 从网上买的能直接插ubuntu 1804的usb蓝牙太少了,而且还贵。我就直接从JD下单的一个便宜的USB蓝牙,结果插上机器没有驱动起不来。我的PC是个3年前的老机器,实在是不想升级系统,于是捣鼓半天捣鼓好了,…...
Stable Diffusion Prompt用法
Stable Diffusion可以根据你输入的提示词(prompt)来绘制出想象中的画面。 1、正向提示词(Prompt): 提高图像质量的prompt: prompt用途HDR, UHD, 64K(HDR、UHD、4K、8K和64K)这样的质量词可以带来巨大的差异提升照片…...
jenkins问题
目录 python 不是内部或外部命令,也不是可运行的程序 ‘cmd’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 git 不是内部或外部命令,也不是可运行的程序或批处理文件。 pywintypes.com_error: (-2147024891, ‘拒绝访问。’, None,…...
阅读笔记DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks
zi,t∈Rz_{i,t}\in \mathbb{R}zi,t∈R表示时间序列iii在ttt时刻的值。给一个连续时间段t∈[1,T]t\in [1, T]t∈[1,T],将其划分为context window[1,t0)[1,t_0)[1,t0)和prediction window[t0,T][t_0,T][t0,T]。用context window的时间序列预测prediction window…...
01.Java的安装
1.JDK&JREJDK : Java SE Development Kit--Java开发工具JRE : Java Runtime Environment--Java运行环境Java编程,需要安装JDK;如果仅仅是运行一款Java程序则只需要运行JREJava的安装包分为两类:一类是JRE--是一个独立的Java运行环境; 一类…...
【C语言深度剖析】关键字(全)
文章目录一.存储类型关键字前言补充1:内存思考:补充2:变量与内存的关系补充3:变量的分类补充4:存储类补充5:删除数据是怎么删除的?1.auto2.register3.static4.extern基本用法:基本功能5.typedef…...
English Learning - L2 语音作业打卡 双元音 [aʊ] [əʊ] Day15 2023.3.7 周二
English Learning - L2 语音作业打卡 双元音 [aʊ] [əʊ] Day15 2023.3.7 周二💌发音小贴士:💌当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 /eɪ…...
记第一次面试的过程(C++)
说实话三月份上旬过得很充实,而且感觉蛮值,但还有不足的地方,今晚特地看完资料分析来复盘复盘。 时间还要回到3.2中午13.35(别问我为什么那么准确,刚刚掏手机看的),我正在吃着饭看着王者荣耀的直…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
