MFC 控件使用教程
combo box控件用法:
下拉选择控件,首先将控件拖动到你需要使用控件的地方,用ClassWizard为它关联一个变量,我们注意到变量类型是CString型的。右击属性,General中可以设置一般属性类容Data中可以设置该控件下拉选择的内容,Styles中设置combo box控件风格,Extended Styles设置扩展风格,主要的设置在Data中,Data中设置了下拉菜单的所有下拉内容,如图所示。
在Data中每一行作为一个下拉菜单的一行内容,其中要注意的是换行应该用Ctrl+Enter。
在确定按钮添加消息响应函数为
- UpdateData(TRUE);
- char * sz = m_nihao.GetBuffer(m_nihao.GetLength());
- MessageBox(sz,"ss",MB_OK);
Button:
按钮控件是最简单的一个控件,将按钮拖动到要显示的地方,右击属性设置按钮的ID,名称,也可以使用SetDlgItemText来设置按钮的文本,双击拖动好的按钮为按钮添加消息响应函数即可,有一个小窍门,要实现单击按钮后实现按钮文本改变的方法,直接在消息响应函数中添加SetDlgItemText函数即可,在按钮单击时改变按钮的文本。
- int ret;
- UpdateData(TRUE);
- SetDlgItemText(IDOK,"已经按下");
- char * sz = m_nihao.GetBuffer(m_nihao.GetLength());
- ret=MessageBox(sz,"ss",MB_OK);
- if (ret==IDOK)
- {
- SetDlgItemText(IDOK,"确定");
- }
Check Box控件:
Check Box控件是一个多选控件,首先添加一个Check Box控件到你的用户界面,用ClassWizard关联变量时发现这个控件的变量类型是BOOL型变量,那么我们就基本上了解这个控件的用法了,检查这个控件是否被按下的一个简单方法就是判断这个控件的虚拟变量值是TRUE还是FLASE。但是首先需要UpdateData(TRUE);
那么我们就为OnOK这个按钮添加消息响应函数:
- UpdateData(TRUE);
- if (m_check==TRUE)
- {MessageBox("Check Box按下",NULL,MB_OK);}
就能实现我们的功能。
Radio Button:
这个按钮实现的目的和Check Box差不多但是不同的是Check Box控件是在最终我们需要执行的消息响应函数中才检查这个选项是否被选中,而Radio Button是按下后,界面立即响应,执行这个按钮的消息响应函数,所以这个控件没有虚拟变量,而是直接为这个控件添加消息响应事件,和按钮的添加方法相同,不做过多赘述。
List Control:
List Control这个控件比较有意思,我对这个控件使用的也比较少,这里只提供一种使用方法,这里以我做过的一个网络嗅探器为例:
这里以***代表工程名,如sniffer。
首先拖动控件到你需要使用控件的地方,打开ClassWizard,为其关联一个变量,如:m_CtrList。然后找到***Dlg.cpp文件,在对话框函数中(文档工程也许不同,但都在主窗口函数中)BOOL C***Dlg::OnInitDialog()中添加如下代码设置空间风格:
- DWORD dwStyle=GetWindowLong(m_CtrList.GetSafeHwnd(),GWL_STYLE);
- dwStyle&=~LVS_TYPEMASK;
- dwStyle|=LVS_REPORT;
- SetWindowLong(m_CtrList.GetSafeHwnd(),GWL_STYLE,dwStyle);
最后插入想要输入的列名:
- m_CtrList.InsertColumn(0,"数据",LVCFMT_LEFT,525);
- m_CtrList.InsertColumn(0,"目的端口",LVCFMT_LEFT,60);
- m_CtrList.InsertColumn(0,"源端口",LVCFMT_LEFT,50);
- m_CtrList.InsertColumn(0,"协议",LVCFMT_LEFT,40);
- m_CtrList.InsertColumn(0,"目的IP地址",LVCFMT_LEFT,100);
- m_CtrList.InsertColumn(0,"源IP地址",LVCFMT_LEFT,100);
这个基本上控件就设置好了,下面说明如何显示需要输出的文本:
假设每一列的数据都依次在S[3],port1,port2,date中,都是字符串
- index=m_CtrList.InsertItem(0,s1);//创建一行
- m_CtrList.SetItemText(index,1,s2);
- m_CtrList.SetItemText(index,2,s3);
- m_CtrList.SetItemText(index,3,port1);
- m_CtrList.SetItemText(index,4,port2);
- m_CtrList.SetItemText(index,5,date);
这样就可以显示出正确的文本了。
Edit Box:
这个控件是MFC的主要输入控件,从英文名称就可以看出来。
这个控件的使用也相当简单,用鼠标拖动控件到想要使用的地方,打开ClassWizard为其关联虚拟变量,关联的时候可以选择这个变量的类型,有INT,CString,UINT。。。。等等N多种类型,几乎涵盖了所有常用变量类型。关联好变量之后就可以使用了。
- UpdateData(TRUE);
- char * sz =m_edit.GetBuffer(m_edit.GetLength());
- MessageBox(sz,"ss",MB_OK);
另外用Edit Box控件输出一些内容也是可以的,只需要把要输出的内容直接赋值给这个控件的关联变量即可,最后刷新数据。
- void CAaDlg::OnOK()
- {
- // TODO: Add extra validation here
- m_edit="你好";
- UpdateData(FALSE);//注意这里UpdateData的参数是FALSE,至于参数问题,可以自行查找MSDN
- }
Process:
进度条控件也是一个常用控件,当我们将进度条拖动到界面上时为其添加一个消息响应函数,我们会看到消息响应函数的类型是CProcessCtrl,我们通过查询MSDN不难发现,微软为我们提供了很多进度条函数。最常用的就是三个函数。
SetRange 设置进度条最大最小值
SetStep 设置进度条步长
StepIt 增加一个步长
至于进度条的风格,可以右击进度条属性设置,也可以CProcessCtrl类中的成员函数。
首先和List Box控件一样,我们需要在C***Dlg::OnInitDialog()函数中设置好进度条的最大最小值,以及步长等一些必要属性,包括进度条风格等等。
然后就要在需要的时候增加步长,我们还以上面网络嗅探器为例,,我们循环500次,嗅探500个网络数据包,那么设置进度条最小值为0最大值为500,步长为1,那么每次循环增加一次步长就可以了,这个很好理解。
- C***Dlg::OnInitDialog()中添加如下代码:
- m_process.SetRange(0,500);//设置进度条进度范围
- m_process.SetStep(1);//设置进度条步长
循环部分添加如下代码:
每一次循环中m_process.StepIt();
Hot Key:
热键是MFC中非常重要的一个控件之一,热键可以轻松实现一个甚至多个组合键的热键,如果没有热键,假使你要用动态链接库dll或者其他什么全局钩子的方法实现热键功能的话可谓相当麻烦,甚至很难解决数量不定的多个组合键的热键,所以掌握好热键可以帮助我们很多事情。
MFC封装的热键使得我们编程起来也是相当容易。步骤大概就是输入热键->注册热键->填写消息映射->填写热键响应函数,这里有两个小细节。
1. 根据资料,注册热键之后有两种方法实现热键,此处写的是RegisterHotKey方法实现的热键。
2. 根据网上的资料,MFC的热键的宏定义和API函数RegisterHotKey的宏定义是有误差的,这算是一个BUG,导致CTRL和Shift键相互颠倒,但是不幸的是我在写程序的时候并没有遇到这种情况,也不能妄下定论。
下面我们来看看Hot Key控件时如何使用的。
1.首先按照步骤输入热键:
拖动一个Hot Key控件到想设置的地方,用ClassWizard为其关联一个变量,比如m_Hotkey,这样就可以接受到输入的热键了。
2.注册热键:
这一步的目的是为了向窗口注册一个热键,当热键来到的时候向窗口发送WM_HOTKEY的消息。我们在我们的“注册”按钮的消息响应函数中添加如下代码:
- WORD virtualcode,modifiers;
- m_Hotkey.GetHotKey(virtualcode,modifiers); //接收热键信息存储下来
- if (!RegisterHotKey(this->m_hWnd,100,modifiers,virtualcode)) //注册热键
- {
- MessageBox("热键设置冲突","错误",MB_OK);
- }
- else
- MessageBox("热键设置成功","成功",MB_OK);
3.填写消息映射:
到这一步我们的热键已经注册成功了,但是我们按下热键时,时没有反应的,因为我们并没有告诉计算机,按下热键以后干什么。MFC是一个基于消息驱动的框架代码。所以我们要为我们要就收WM_HOTKEY的窗口添加消息映射,使得当窗口接收到WM_HOTKEY消息的时候能够执行我们的热键函数。打开ClassWizard
我们在其中并没有发现WM_HOTKEY消息,微软并没有为我们封装,所以我们只有自己动手了。
在***Dlg.cpp文件中找到如下代码:
- BEGIN_MESSAGE_MAP(CMFCHotKeyDlg, CDialog)
- //{{AFX_MSG_MAP(CMFCHotKeyDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDOK, OnSet)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
这是MFC自定义的一个消息映射处理代码,在其中添加ON_MESSAGE(WM_HOTKEY,MyHotKey),这里的MyHotKey是我们等会需要定义的自定义热键处理函数。
4.填写热键响应函数:
找到***Dlg.h的头文件,在窗口类的protected中添加一个消息响应函数申明afx_msg void MyHotKey(WPARAM wp,LPARAM lp);
然后再***Dlg.cpp文件中添加消息响应函数的定义:
- void CMFCHotKeyDlg::MyHotKey(WPARAM wp,LPARAM lp)
- {
- MessageBox("热键运行成功","SUCCESS",MB_OK);
- }
这样基本上就可以了。
IP Address:
IP控件也是常用的控件之一,也是最简单的一个控件,MFC对他的封装无非就是一个字符串的处理。使用起来也相当简便。
首先拖动控件到指定的地方,用ClassWizard为其关联一个变量,我们看到变量的类型任然是一个类,IPAddressCtrl的类,下面介绍几种常用的操作:
1, 将IP地址输出到Ip控件显示:只需要短短两行代码,假定要显示的IP地址是192.168.1.1,则在确定的消息相应函数添加
- CString a="192.168.1.1";
- m_ip.SetWindowText(a);
2. 将IP地址输入到程序中:
- BYTE a1,a2,a3,a4;
- m_ip.GetAddress(a1,a2,a3,a4);
- CString str;
- str.Format("%d.%d.%d.%d",a1,a2,a3,a4);//这里的nf得到的值是IP值了.
- MessageBox(str);
MFC 控件使用教程的更多相关文章
- MFC控件的SubclassDlgItem
MFC控件的SubclassDlgItem 要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派 ...
- [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...
- Qt报表控件NCReport教程:添加报表字段
NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 在前面的文章<报表控件NCRepor ...
- C#WebBrowser控件使用教程与技巧收集--苏飞收集
C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System. ...
- MFC控件编程进度条编写
MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl 进度条编程也很简单. 封装的方法也就那个那几个. GetPos() 获 ...
- MFC 控件编程之水平滚动条跟垂直滚动条
MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...
- MFC控件编程之组合框跟列表框
MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添 ...
- MFC控件编程之复选框单选框分组框
MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...
- MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.
MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...
随机推荐
- 裴(pei)蜀定理 知识点
在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理.裴蜀定理得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a.b和它们的最大公约数d,关于未知数x和y的线性丢番图方程(称为裴蜀等式): ax ...
- #366 A-C
A. Hulk 题意是给你一个n 输出一个英文字符串,找下规律就发现 当(i!=n&&i%2==1) 输出的是 I hate that (注意大写) 当(i!=n&&i ...
- Redis(一)入门
最近,学习了一下,Redis 这个Nosql数据库,从安装到基本语法,作为入门.下面,整理一下基本知识. 参考的地址如下: http://www.runoob.com/redis/redis-java ...
- 编写一个漂亮的网站 第一课堂 基于vs编辑
前台代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"& ...
- day 4 Socket 和 NIO Netty
Scoket通信--------这是一个例子,可以在这个例子的基础上进行相应的拓展,核心也是在多线程任务上进行修改 package cn.itcast.bigdata.socket; import j ...
- 拷贝某个区间(copy,copy_back)
copy 为outputIterator中的元素赋值而不是产生新的元素,所以outputIterator不能是空的 如要元素安插序列,使用insert成员函数或使用copy搭配insert_itera ...
- MySQL 数据类型对比:char 与 varchar;varchar 与 text;datetime 与 timestamp;blob 与 text;
char 与 varchar char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉.所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此. char(n) 固 ...
- Hanlp在java中文分词中的使用介绍
项目结构 该项目中,.jar和data文件夹和.properties需要从官网/github下载,data文件夹下载 项目配置 修改hanlp.properties: 1 #/Test/src/han ...
- chmod命令详解
Linux chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有者.群组.其他.利用 chmod 可以藉以控制文件如何被他人所调用. 使用权限 : 所有使用者 语法: chmod ...
- 让shell脚本中的echo输出带颜色
转载自:http://www.linuxidc.com/Linux/2014-12/110463.htm 让echo输出带颜色的方法有两种 1.在shell脚本中定义颜色变量,使用echo -e调用变 ...