vc常用控件学习之路

来源:互联网 发布:超牛数据恢复官网 编辑:程序博客网 时间:2024/05/19 00:48

一.组合框控件(类为CComboBox)

1、如何添加/删除Combo Box内容

(1)在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。

(2)在程序初始化时动态添加
例如:

CString strTemp;
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容
for(int i=1;i<=100;i++)
{
   strTemp.Format("%d",i);
   ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
}
(3)删除
DeleteString( UINT nIndex )//删除指定行,
(4)插入
InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置
(5)查找
FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以选中包含指定字符串的行

2、如何控制Combo Box的下拉长度

首先要知道两点:一就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。
二是属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。

3、选择其中的某行
(1)选中:
int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//当前选中的行。
(2)设置
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//设置第n行内容为显示的内容。

4、取得Combo Box框内容
(1)取当前内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);
(2)取其他行内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);

5、组合框几种常用的消息映射宏
ON_CBN_DBLCLK 鼠标双击
ON_CBN_DROPDOWN 列表框被弹出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
ON_CBN_SELCHANGE 列表框中选择的行发生改变
ON_CBN_EDITUPDATE 输入框中内容被更新

6、组合框几种常用的风格

CBS_DROPDOWN 下拉式组合框
CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入
CBS_SIMPLE 输入框和列表框同时被显示
LBS_SORT 所有的行按照字母顺序进行排序


如果combo box的风格为Drop List ,那么可以关联 int类型,表示选择的序号
如果是Drop down风格,那么可以关联CString类型,表示框中的字符串内容

 

要立即响应选择框的改变(即选择框一改变选项,就立刻将结果传递进去)!
响应他的哪个消息比较好?

   如果是只能选择的响应ON_CBN_SELCHANGE
   如果是可以编辑的,那么要立刻响应编辑就是ON_CBN_EDITCHANGE

 

 

二 Tab Control控件

   使用例子

1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl。

2、创建两个新的对话框资源,其属性作如下修改:
Border:none //边界为空,这样它就没了标题栏
Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。
   其它如果没有必要,就不用改了。
在上面加一些控件什么的,具体操作跟普通对话框没有区别。
完成后从这两个对话框模板生成两个新的对话框类。
3、在主对话框中为新添加进来的两个类增加两个变量:
如:CDialog1 m_mm1;
CDialog2 m_mm2;
4、在主对话框的OnInitDialog()函数中添加如下类似的代码:
    TCITEM item;
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)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。
在事件处理中添加如下代码,如下例:
void CtabdialogDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
CRect r;
m_tabctrl.GetClientRect (&r);

switch(m_tabctrl.GetCurSel())
{
case 0:
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;
case 1:
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() 函数。为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。

或者:

    m_Tab.InsertItem(0,"第一页");
    m_Tab.InsertItem(1,"第二页");
    m_Tab.InsertItem(2,"第三页");
    m_Tab.InsertItem(3,"第四页");


    m_PageA.Create(IDD_PROPPAGE_A,&m_Tab);
    m_PageB.Create(IDD_PROPPAGE_B,&m_Tab);
    m_PageC.Create(IDD_PROPPAGE_C,&m_Tab);
    m_PageD.Create(IDD_PROPPAGE_D,&m_Tab);

    m_PageA.ShowWindow(SW_SHOW);
    m_PageB.ShowWindow(SW_HIDE);
    m_PageC.ShowWindow(SW_HIDE);
    m_PageD.ShowWindow(SW_HIDE);