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. mysql再探

    select子句及其顺序 select from where group by having order by limit 创建表 create table student(id int not nu ...

  2. 迭代器和增强型for循环

    ★迭代器: Java集合框架的集合类,我们有时候称之为容器.容器的种类有很多种,比如ArrayList.LinkedList.HashSet...,每种容器都有自己的特点,ArrayList底层维护的 ...

  3. mvn+spring+webapp模板

    idea新建项目,选择maven-archetype-webapp 在main目录下创建java  resource 文件夹,赋予特殊文件夹 pom.xml 添加 <!--Spring框架核心库 ...

  4. ubuntu忘记登录密码解决方法

    1.重启系统,长按Shift键,直到出现下面菜单.选择recovery mode(恢复模式).2.接下来会进入如下界面,选择Drop to root shell prompt ,也就是获取root权限 ...

  5. 使用JMeter进行RESTful API测试

    使用JMeter进行RESTful API测试 在哪里设置实现最优脚本重用的属性 由于支持云的应用程序通常可以轻松.快速地进行复制和部署,所以可以在多种环境中对其进行测试.如果您需要在多个环境中测试和 ...

  6. windbg 如何再内核模式调试用户空间的程序

    1:使用!process 0 0 获取用户空间的所有的进程的信息 !process 0 0 **** NT ACTIVE PROCESS DUMP ****    PROCESS 80a02a60   ...

  7. WINSCP传输文件自动赋予777权限

    WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 为了复制到Linux的文件具有777 ...

  8. jersey2+freemarker+spring3的集成

    由于即将开始的新项目,是一个对外网开放访问权限的web应用.所以,公司技术管理层不允许使用struts以及spring mvc这一套.所以,我们开始转战曾经用作REST API的框架jersey及其周 ...

  9. 【转】jumpserver 堡垒机环境搭建(图文详解)

    jumpserver 堡垒机环境搭建(图文详解)   摘要: Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装ag ...

  10. DOM 讲解

    DOM,全称documention,文档意思 ,就是把整个html文档当成一个对象来操作,里面有很多方法,如getElementByid(),getElementByid().innerText(); ...