常用控件类的函数.docx

上传人:b****6 文档编号:5874967 上传时间:2023-01-01 格式:DOCX 页数:12 大小:25.92KB
下载 相关 举报
常用控件类的函数.docx_第1页
第1页 / 共12页
常用控件类的函数.docx_第2页
第2页 / 共12页
常用控件类的函数.docx_第3页
第3页 / 共12页
常用控件类的函数.docx_第4页
第4页 / 共12页
常用控件类的函数.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

常用控件类的函数.docx

《常用控件类的函数.docx》由会员分享,可在线阅读,更多相关《常用控件类的函数.docx(12页珍藏版)》请在冰豆网上搜索。

常用控件类的函数.docx

常用控件类的函数

常用控件总结

一:

MFC中DLALOG下的RADIO控件在MFC中radiobutton的用法:

先为对话框加上2个radiobutton,分别是Radio1和Radio2。

问题1:

如何让Radio1或者Radio2默认选上?

如何知道哪个被选上了?

关键是选上,“默认”只要放在OnInitDialog()即可。

三种方法可以让它选上,

第一种:

((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上

((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上

((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck();返回1表示选上,0表示没选上

第二种:

关联一个congtrol型变量(子类化),好ctrl+W(即打开classwizard),点开MemberVariables,咦?

怎么没有IDC_RADIO1这个ID?

原来是没有分组。

因为radiobutton通常都是成组使用的,在一组里面是互斥的。

取消,回到对话框资源面板,右键Radio1查看属性把Group选上,那么,Radio1和Radio2就是一组了(怎么知道他们是一组的?

后面说)。

此时,就可以为Radio1增加一congtrol型变量m_ctrlRadio1了。

如下:

m_ctrlRadio1.SetCheck(TRUE);

同样可以使用GetCheck()获取状态。

第三种:

关联一个int型变量(同样需要先分组)m_nRadio1,打开对话框构造函数,你会发现有:

m_nRadio1=-1;m_nRadio1别赋值-1表示哪个都没有选上。

如果你把-1改成0,就会发现Radio1默认被选上了,依此类推,m_nRadio1的值为1就是第二个被选上了(这里同样有问题,哪个是第一个?

哪个是第二个?

)。

获取状态很简单,UpdateData(TRUE)后判断m_nRadio1的值即可。

问题2:

如何使用多组?

多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。

再为对话框添加Radio3和Radio4。

很简单,先为这些RadioButton排个顺序(这个必须要做,比如你的一组控件有Radio1,Radio2,Radio3,就把它们的TAB顺序分别设为1,2,3,并将Radio1的Group属性设为True,这样,当选中Radio1的时候和它关联的变量就是0,当选中Radio2的时候和它关联的变量就是1,依此类推),就是排列他们的TABORDER。

在对话框资源面板上Ctrl+D,然后按你自己的理想顺序用鼠标逐个点击就可以了。

不妨假设Radio1、Radio2、Radio3、Radio4分别是1、2、3、4。

Radio1和Radio3都选上Group属性,那么,1、2是一组,3、4是另外一组,因为分组的原则是在选上Group属性的这一个开始直到碰到下一个选上Group属性的。

你不妨再Ctrl+D,令Radio1、Radio2、Radio3、Radio4分别是1、3、2、4,那么Radio1和Radio3是一组,如果m_nRadio1=1,此时是Radio3被选上而不是Radio2被选上。

二单选按钮控件(RadioButton)的使用

对单选按钮进行分组:

每组的第一个单选按钮设置属性:

Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。

如:

Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组

设定Radio1属性:

Group,Tabstop,Auto

设定Radio2属性:

Tabstop,Auto

设定Radio3属性:

Tabstop,Auto

设定Radio4属性:

Group,Tabstop,Auto

设定Radio5属性:

Tabstop,Auto

用ClassWizard为单选控件定义变量,每组只能定义一个。

如:

m_Radio1、m_Radio4。

用ClassWizard生成各单选按钮的单击消息函数,并加入内容:

voidCWEditView:

:

OnRadio1()

{

m_Radio1=0;//第一个单选按钮被选中

}

voidCWEditView:

:

OnRadio2()

{

m_Radio1=1;//第二个单选按钮被选中

}

voidCWEditView:

:

OnRadio3()

{

m_Radio1=2;//第三个单选按钮被选中

}

voidCWEditView:

:

OnRadio4()

{

m_Radio4=0;//第四个单选按钮被选中

}

voidCWEditView:

:

OnRadio5()

{

m_Radio4=1;//第五个单选按钮被选中

}

设置默认按钮:

在定义控件变量时,ClassWizard在构造函数中会把变量初值设为-1,只需把它改为其它值即可。

如:

//{{AFX_DATA_INIT(CUnitBlockTypeFlankPublicAdd)

m_Radio1=0;//初始时第一个单选按钮被选中

m_Radio4=0;//初始时第四个单选按钮被选中

//}}

//RadioButton使用

使用方法一:

在工程中添加控件后,直接在控件的Click事件中写入需要的代码即可

使用方法二:

1.建立一个基于对话框的用用程序,在其中加入三个RadioButton,ID分别为:

IDC_RADIO1,IDC_RADIO2,IDC_RADIO3

2.控件的初始化:

在对话框类的OnInitDialog中加入代码:

CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO3);//第一个参数为该组的第一个单选按钮的ID

//第二个参数为该组的最后一个单选按钮的ID

//第三个参数为该组中被选中的单选按钮的ID

3.在加入一个Button控件,并为其写入Click事件代码:

intiRadioButton;

iRadioButton="GetCheckedRadioButton"(IDC_RADIO1,IDC_RADIO3);

if(iRadioButton==IDC_RADIO1)

MessageBox("ClickButton1");

if(iRadioButton==IDC_RADIO2)

MessageBox("ClickButton2");

if(iRadioButton==IDC_RADIO3)

MessageBox("ClickButton3");

其他说明:

RadioButton成组使用时,只需保证在添加控件时资源号连续,并且第一个RadioButton的属性中Group被选中即可.

这样就可以给这一组控件添加成员变量使用

例:

1.建立一个基于对话框的应用程序,添加三个RadioButton,和一个Button

选中第一个RadioButton属性中的Group

2.在Button的Click事件中添加代码:

UpdateData(TRUE);

if(m_radio==0)

MessageBox("0");

if(m_radio==1)

MessageBox("1");

if(m_radio==2)

MessageBox("2");

UpdateData(false);

三:

MFC里CHECKBOX用法

可以对变量进行get或者set之类的操作来设置或者判断复选框的选择状态。

得到复选框状态的函数:

CButton*pBtn=(CButton*)GetDlgItem(IDC_CHECK);

           intstate=pBtnNONE->GetCheck();

           当state==1时表示该复选框没有被选中;

           当state==0时表示该复选框被选中

设置复选框状态的函数:

CButton*pBtn=(CButton*)GetDlgItem(IDC_CHECK);

           pBtnNONE->SetCheck

(1);

           SetCheck

(1)表示设置复选框为“选中”状态;

           SetCheck(0)表示设置复选框为“未选中”状态;

四:

在MFC中CComboBox(组合框)使用技巧

1.CComboBox风格

CBS_AUTOHSCROLL//自动水平滚动条

CBS_DISABLENOSCROLL//选中时始终显示滚动条

CBS_DROPDOWN//下拉式

CBS_DROPDOWNLIST//下拉列表

CBS_HASSTRINGS//为字符串提供GetText()函数

CBS_LOWERCASE//转换为小写

CBS_NOINTEGRALHEIGHT//指定组合框由应用程序来指定大小的

CBS_OEMCONVERT//OEM字符集转换

CBS_OWNERDRAWFIXED//所有项目的高度是一样的

CBS_OWNERDRAWVARIABLE//指定单一项目的高度

CBS_SIMPLE//简单风格

CBS_SORT//排序

CBS_UPPERCASE//转换为大写

2.初始化数据

1).在ComboBox控件属性的Data标签里面添加,一行表示ComboBox下拉列表中的一行。

换行用ctrl+回车。

2).在程序初始化时动态添加

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);//strTemp为CString

3.删除指定行

DeleteString(UINTnIndex)//删除指定行

4.插入指定位置

InsertString(intnIndex,LPCTSTRlpszItem)//将行插入到指定位置

5.删除所有项

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除ID为IDC_COMBO_CF现有所有内容

6.查找指定字符串

FindString(intnStartAfter,LPCTSTRlpszItem)//可以在当前所有行中查找指定的字符串的位置,nStartAfter指明从那一行开始进行查找。

SelectString(intnStartAfter,LPCTSTRlpszItem)//可以选中包含指定字符串的行

7.选择其中某行

//

(1)选中:

intiPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。

//

(2)设置

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。

8.获取总行数

intGetCount()//得到当前列表框中行的数量

9.取得ComboBox框内容

/*

(1)取当前内容*/

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);//将获取的值存放到CString类型变量strTemp中。

//如果定义了关联的变量,例如m_combo,可以直接获取:

m_combo->GetWindowText(strTemp);

/*

(2)取其他行内容*/

((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);//其中n为从0开始的索引值

10.获得焦点

通常要判断控件是否获得了焦点,可以用GetFocus()函数

例如:

if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。

但是combobox的焦点不同,因为它是由edit和listbox两部分组成的,所以获得焦点要用GetParent():

if((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

11.改变下拉框大小

在设计界面里,点击一下ComboBox的下拉箭头,此时出现的调整框就是ComboBox的下拉调整框

12.常用消息映射宏

ON_CBN_DBLCLK鼠标双击

ON_CBN_DROPDOWN列表框被弹出

ON_CBN_KILLFOCUS/ON_CBN_SETFOCUS在输入框失去/得到输入焦点时产生

ON_CBN_SELCHANGE列表框中选择的行发生改变

ON_CBN_EDITUPDATE输入框中内容被更新

使用以上几种消息映射的方法为定义原型如:

afx_msgvoidmemberFxn();的函数,并且定义形式如ON_Notification(id,memberFxn)的消息映射。

如果在对话框中使用组合框,ClassWizard会自动列出相关的消息,并能自动产生消息映射代码。

常用的函数:

GetCount()函数功能:

用以获得列表框中的选项数目.

GetCurSel()函数功能:

用以得到用户选中下拉列表框中数据的索引值.返回的值是重0开始的,如果没有选择任何选项将会返回-1

SetCurSel函数功能:

选取列表框中的一个选项,索引从0开始,-1为什么都不选.当你需要把列表框中已经选取的内容清空时就可以使用这个函数;

SetEditSel函数功能:

设置编辑区中蓝色选中字段的长度原型:

BOOLSetEditSel(intnStartChar,intnEndChar);

说明:

nStartChar是起始的位置,当设置为-1时为不选择任何字段,nEndChar是结束位置.还有一个对应的函数GetEditSel是取得其位置,在此不详解.

Clear()Cut()Paste()Copy()

这四个函数我放在一起说,因为他们都是针对编辑框中选定的文字进行编辑的函数,很多初学者很不明白这4个函数,使用这些函数没有作用,其实不然,这些函数对于在编辑框中的内容不进行处理,他真正处理的是你用鼠标选中的内容,对于Clear()函数很多书中解释都是有误的,很多书中对他的解释是清除当前选中的文本,我认为这样的解释是有歧异的,真正的解释是把你刚选中的文本释放掉,也就是不选,而不是把选中的删除,真正的删除选中的文本的函数是Cut(),Copy()是复制选中的文本,Paste()是粘贴到光标处.其演示就不写在程序中,有兴趣的朋友可以自己试试.

LimitText()函数功能:

其作用是限制在编辑框中键入的文本长度原型:

BOOLLimitText(intnMaxChars);

说明:

当nMaxChars为0时,不是不能输入,而是长度最大化为65535字节

GetLBText()函数原型:

voidGetLBText(intnIndex,CString&rString).说明:

nIndex为列表框中数据的索引值,rString为字符串,其作用就是把索引号为nIndex的数据放到rString变量中.与其对应的GetLBTextLen(intnIndex)函数就是得到索引号为nIndex中数据的长度

AddString()DeleteString()InsertString()ResetContent()四个函数放在一起,他们都是针对下拉列表框的处理函数,

AddString(LPCTSTRlpszString)是在列表框的尾巴添加一条数据,参数为字符串.

DeleteString(UINTnIndex)为删除指定索引为nIndex的数据.InsertString(intnIndex,LPCTSTRlpszString)在索引nIndex处插入IpszString的内容.

ResetContent()是清除列表框中所有的内容.

SetDroppedWidth(UINTnWidth)函数.用于设定下拉列表框的最小宽度,当下拉列表框中的数据很长不能完全显示时,我们可以使用这个函数把列表框的宽度设置的大些.同样GetDroppedWidth()是返回列表框的宽度.

五:

在MFC中TabControl(选项卡)的使用

1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个TabControl控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,

将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl

2、创建两个新的对话框资源,其属性作如下修改:

Border:

none//边界为空,这样它就没了标题栏

Style:

Child//这样这个模板就可以当作另一个窗口的子窗口了。

其它如果没有必要,就不用改了。

在上面加一些控件什么的,具体操作跟普通对话框没有区别。

完成后从这两个对话框模板生成两个新的对话框类。

3、在主对话框中为新添加进来的两个类增加两个变量:

如:

CDialog1m_mm1;

CDialog2m_mm2;

4、在主对话框的OnInitDialog()函数中添加如下类似的代码:

TCITEMitem;

item.mask=TCIF_TEXT;

item.pszText="第一页";

m_tabctrl.InsertItem(0,&item);

item.pszText="第二页";

m_tabctrl.InsertItem(1,&item);

m_mm1.Create(IDD_DIALOG1,&m_tabctrl);

m_mm2.Create(IDD_DIALOG2,&m_tabctrl);

m_mm1.SetWindowPos(NULL,10,30,400,100,SWP_SHOWWINDOW);

m_mm2.SetWindowPos(NULL,10,30,400,100,SWP_HIDEWINDOW);

解释如下:

两个InsertItem函数的调用是为了给标签控件增加两个标签页面,文本是标题。

SetWindowPos()函数设置这两个对话框在Z顺序中的位置,显示或隐藏状态.。

5、在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。

在主对话框的编辑界面右击标签控件

,选择添加一个事件可以完成这个操作。

在事件处理中添加如下代码,如下例:

voidCtabdialogDlg:

:

OnTcnSelchangeTab1(NMHDR*pNMHDR,LRESULT*pResult)

{

CRectr;

m_tabctrl.GetClientRect(&r);

switch(m_tabctrl.GetCurSel())

{

case0:

m_mm1.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_SHOWWINDOW);

m_mm2.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_HIDEWINDOW);

break;

case1:

m_mm1.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_HIDEWINDOW);

m_mm2.SetWindowPos(NULL,10,30,r.right-20,r.bottom-40,SWP_SHOWWINDOW);

break;

}

*pResult=0;

}

要想知道用户选择那个标签页,要通过m_tabctrl.GetCurSel()函数。

为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面

的尺寸。

五:

在MFC中Slider(滑块控件)的使用

主要要方法有:

1、设置、取得滑动范围:

voidSetRange(intnMin,intnMax,BOOLbRedraw=FALSE);

voidGetRange(int&nMin,int&nMax)const;

2、设置、取得按下左右箭头滑动间隔:

intSetLineSize(intnSize);

intGetLineSize()const;

3、设置、取得按下PgUp、PgDown时滑动间隔:

intSetPageSize(intnSize);

intGetPageSize()const;

4、设置、取得滑块位置:

voidSetPos(intnPos);

intGetPos()const;

5、设置滑动条刻度的频度:

voidSetTicFreq(intnFreq);

实例:

在对话框中放一个Slider控件,添加相应的Ctrl型变量为m_slider。

在对话框初始化函数OnInitDialog()中添加:

BOOLCDlgSetup:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//TODO:

Addextrainitializationhere

m_slider.SetRang(0,100);//设置滑动范围

m_slider.SetTicFreq(10);//每10个单位画一刻度

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//EXCEPTION:

OCXPropertyPagesshouldreturnFALSE

}

Slider控件本身并没有响应滑动的消息函数,但可以通过主窗体的OnHScroll()响应。

在类向导中为对话框添加WM_HSCROLL消息,在响应函数中添加:

voidCDlgSetup:

:

OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CSliderCtrl*pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);

m_int=pSlidCtrlHue->GetPos();//取得当前位置值

CDialog:

:

OnHScroll(nSBCode,nPos,pScrollBar);

}

//m_int即为当前滑块的值。

注意:

设置最大值和最小值

过函数SetRange来完

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1