combo box控件用法:

下拉选择控件,首先将控件拖动到你需要使用控件的地方,用ClassWizard为它关联一个变量,我们注意到变量类型是CString型的。右击属性,General中可以设置一般属性类容Data中可以设置该控件下拉选择的内容,Styles中设置combo box控件风格,Extended Styles设置扩展风格,主要的设置在Data中,Data中设置了下拉菜单的所有下拉内容,如图所示。

在Data中每一行作为一个下拉菜单的一行内容,其中要注意的是换行应该用Ctrl+Enter。

在确定按钮添加消息响应函数为

  1. UpdateData(TRUE);
  2. char *   sz   =   m_nihao.GetBuffer(m_nihao.GetLength());
  3. MessageBox(sz,"ss",MB_OK);

Button:

按钮控件是最简单的一个控件,将按钮拖动到要显示的地方,右击属性设置按钮的ID,名称,也可以使用SetDlgItemText来设置按钮的文本,双击拖动好的按钮为按钮添加消息响应函数即可,有一个小窍门,要实现单击按钮后实现按钮文本改变的方法,直接在消息响应函数中添加SetDlgItemText函数即可,在按钮单击时改变按钮的文本。

  1. int ret;
  2. UpdateData(TRUE);
  3. SetDlgItemText(IDOK,"已经按下");
  4. char *   sz   =   m_nihao.GetBuffer(m_nihao.GetLength());
  5. ret=MessageBox(sz,"ss",MB_OK);
  6. if (ret==IDOK)
  7. {
  8. SetDlgItemText(IDOK,"确定");
  9. }

Check Box控件:

Check Box控件是一个多选控件,首先添加一个Check Box控件到你的用户界面,用ClassWizard关联变量时发现这个控件的变量类型是BOOL型变量,那么我们就基本上了解这个控件的用法了,检查这个控件是否被按下的一个简单方法就是判断这个控件的虚拟变量值是TRUE还是FLASE。但是首先需要UpdateData(TRUE);

那么我们就为OnOK这个按钮添加消息响应函数:

  1. UpdateData(TRUE);
  2. if (m_check==TRUE)
  3. {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()中添加如下代码设置空间风格:

  1. DWORD dwStyle=GetWindowLong(m_CtrList.GetSafeHwnd(),GWL_STYLE);
  2. dwStyle&=~LVS_TYPEMASK;
  3. dwStyle|=LVS_REPORT;
  4. SetWindowLong(m_CtrList.GetSafeHwnd(),GWL_STYLE,dwStyle);

最后插入想要输入的列名:

  1. m_CtrList.InsertColumn(0,"数据",LVCFMT_LEFT,525);
  2. m_CtrList.InsertColumn(0,"目的端口",LVCFMT_LEFT,60);
  3. m_CtrList.InsertColumn(0,"源端口",LVCFMT_LEFT,50);
  4. m_CtrList.InsertColumn(0,"协议",LVCFMT_LEFT,40);
  5. m_CtrList.InsertColumn(0,"目的IP地址",LVCFMT_LEFT,100);
  6. m_CtrList.InsertColumn(0,"源IP地址",LVCFMT_LEFT,100);

这个基本上控件就设置好了,下面说明如何显示需要输出的文本:

假设每一列的数据都依次在S[3],port1,port2,date中,都是字符串

  1. index=m_CtrList.InsertItem(0,s1);//创建一行
  2. m_CtrList.SetItemText(index,1,s2);
  3. m_CtrList.SetItemText(index,2,s3);
  4. m_CtrList.SetItemText(index,3,port1);
  5. m_CtrList.SetItemText(index,4,port2);
  6. m_CtrList.SetItemText(index,5,date);

这样就可以显示出正确的文本了。

Edit Box:

这个控件是MFC的主要输入控件,从英文名称就可以看出来。

这个控件的使用也相当简单,用鼠标拖动控件到想要使用的地方,打开ClassWizard为其关联虚拟变量,关联的时候可以选择这个变量的类型,有INT,CString,UINT。。。。等等N多种类型,几乎涵盖了所有常用变量类型。关联好变量之后就可以使用了。

  1. UpdateData(TRUE);
  2. char *   sz   =m_edit.GetBuffer(m_edit.GetLength());
  3. MessageBox(sz,"ss",MB_OK);

另外用Edit Box控件输出一些内容也是可以的,只需要把要输出的内容直接赋值给这个控件的关联变量即可,最后刷新数据。

  1. void CAaDlg::OnOK()
  2. {
  3. // TODO: Add extra validation here
  4. m_edit="你好";
  5. UpdateData(FALSE);//注意这里UpdateData的参数是FALSE,至于参数问题,可以自行查找MSDN
  6. }

Process:

进度条控件也是一个常用控件,当我们将进度条拖动到界面上时为其添加一个消息响应函数,我们会看到消息响应函数的类型是CProcessCtrl,我们通过查询MSDN不难发现,微软为我们提供了很多进度条函数。最常用的就是三个函数。

SetRange    设置进度条最大最小值

SetStep      设置进度条步长

StepIt       增加一个步长

至于进度条的风格,可以右击进度条属性设置,也可以CProcessCtrl类中的成员函数。

首先和List Box控件一样,我们需要在C***Dlg::OnInitDialog()函数中设置好进度条的最大最小值,以及步长等一些必要属性,包括进度条风格等等。

然后就要在需要的时候增加步长,我们还以上面网络嗅探器为例,,我们循环500次,嗅探500个网络数据包,那么设置进度条最小值为0最大值为500,步长为1,那么每次循环增加一次步长就可以了,这个很好理解。

  1. C***Dlg::OnInitDialog()中添加如下代码:
  2. m_process.SetRange(0,500);//设置进度条进度范围
  3. 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的消息。我们在我们的“注册”按钮的消息响应函数中添加如下代码:

  1. WORD virtualcode,modifiers;
  2. m_Hotkey.GetHotKey(virtualcode,modifiers);            //接收热键信息存储下来
  3. if (!RegisterHotKey(this->m_hWnd,100,modifiers,virtualcode))     //注册热键
  4. {
  5. MessageBox("热键设置冲突","错误",MB_OK);
  6. }
  7. else
  8. MessageBox("热键设置成功","成功",MB_OK);

3.填写消息映射:

到这一步我们的热键已经注册成功了,但是我们按下热键时,时没有反应的,因为我们并没有告诉计算机,按下热键以后干什么。MFC是一个基于消息驱动的框架代码。所以我们要为我们要就收WM_HOTKEY的窗口添加消息映射,使得当窗口接收到WM_HOTKEY消息的时候能够执行我们的热键函数。打开ClassWizard

我们在其中并没有发现WM_HOTKEY消息,微软并没有为我们封装,所以我们只有自己动手了。

在***Dlg.cpp文件中找到如下代码:

  1. BEGIN_MESSAGE_MAP(CMFCHotKeyDlg, CDialog)
  2. //{{AFX_MSG_MAP(CMFCHotKeyDlg)
  3. ON_WM_SYSCOMMAND()
  4. ON_WM_PAINT()
  5. ON_WM_QUERYDRAGICON()
  6. ON_BN_CLICKED(IDOK, OnSet)
  7. //}}AFX_MSG_MAP
  8. END_MESSAGE_MAP()

这是MFC自定义的一个消息映射处理代码,在其中添加ON_MESSAGE(WM_HOTKEY,MyHotKey),这里的MyHotKey是我们等会需要定义的自定义热键处理函数。

4.填写热键响应函数:

找到***Dlg.h的头文件,在窗口类的protected中添加一个消息响应函数申明afx_msg void MyHotKey(WPARAM wp,LPARAM lp);

然后再***Dlg.cpp文件中添加消息响应函数的定义:

  1. void CMFCHotKeyDlg::MyHotKey(WPARAM wp,LPARAM lp)
  2. {
  3. MessageBox("热键运行成功","SUCCESS",MB_OK);
  4. }

这样基本上就可以了。

IP Address:

IP控件也是常用的控件之一,也是最简单的一个控件,MFC对他的封装无非就是一个字符串的处理。使用起来也相当简便。

首先拖动控件到指定的地方,用ClassWizard为其关联一个变量,我们看到变量的类型任然是一个类,IPAddressCtrl的类,下面介绍几种常用的操作:

1,  将IP地址输出到Ip控件显示:只需要短短两行代码,假定要显示的IP地址是192.168.1.1,则在确定的消息相应函数添加

  1. CString a="192.168.1.1";
  2. m_ip.SetWindowText(a);

2.     将IP地址输入到程序中:

  1. BYTE a1,a2,a3,a4;
  2. m_ip.GetAddress(a1,a2,a3,a4);
  3. CString str;
  4. str.Format("%d.%d.%d.%d",a1,a2,a3,a4);//这里的nf得到的值是IP值了.
  5. MessageBox(str);

MFC 控件使用教程的更多相关文章

  1. MFC控件的SubclassDlgItem

    MFC控件的SubclassDlgItem 要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派 ...

  2. [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧

     前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...

  3. Qt报表控件NCReport教程:添加报表字段

    NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 在前面的文章<报表控件NCRepor ...

  4. C#WebBrowser控件使用教程与技巧收集--苏飞收集

    C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System. ...

  5. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

  6. MFC 控件编程之水平滚动条跟垂直滚动条

    MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...

  7. MFC控件编程之组合框跟列表框

    MFC控件编程之组合框跟列表框 一丶简介 如果要使用组合框跟列表框.那么就要知道.组合框列表框是最核心的东西就是索引. 索引是从0开始的. 二丶组合框列表框常用的方法 AddString(字符串) 添 ...

  8. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

  9. MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

    MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...

随机推荐

  1. Red Hat OpenShift

    Core Concepts 基本概念 Master Master监控其他Node和Pod 提供Web Console Node Node是k8s的工作机器 Node中运行Pod,pod可以在node中 ...

  2. mysql不存在插入否则更新

    1.如果存在就更新,没有就插入,相当于三目运算 CREATE UNIQUE INDEX xxx ON t_msg_user_view(USER_ID); INSERT INTO xxx(user_id ...

  3. java int and Integer

    本文转自:https://www.cnblogs.com/guodongdidi/p/6953217.html int和Integer的区别 1.Integer是int的包装类,int则是java的一 ...

  4. css中权重与继承

    出处:http://blog.csdn.net/xf616510229/article/details/53613212

  5. ElasticSearch(六)底层索引控制

    相似度算法 涉及到了ES的底层,首先讲一下ES的底层核心,相似度模型,ES的查询和传统的数据库查询最大的差别就在相似度查询(之前讲过,索引存储的最大差别就是讲非结构化数据转化为结构化),ES里面会给文 ...

  6. log4j.properties配置说明学习网址

    https://blog.csdn.net/wangzhaotongalex/article/details/51308802

  7. 会话状态Session

    一.会话状态Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端) ...

  8. sparkSQL以JDBC为数据源

    一.环境准备 安装oracle后,创建测试表.数据: create table test ( username varchar2(32) primary key , password varchar2 ...

  9. 教你用CMD命令查询域名的DNS解析记录:A,NS,MX,CNAME,TXT

    1.查询域名的A记录 nslookup -qt=A qqgzs.com 当然查询A记录你直接用ping命令来ping域名也可以获得A记录. 2.查询域名的NS记录 nslookup -qt=NS qq ...

  10. sql日期操作

    日期格式化函数 ), ): :57AM ), ): ), ): ), ): ), ): ), ): ), ): ), ): , ), ): :: ), ): :::827AM ), ): ), ): ...