第8章 常用控件

来源:互联网 发布:驱动精灵 for linux 编辑:程序博客网 时间:2024/06/01 14:41

按钮

单选按钮、普通按钮、复选按钮

void CButtonDlg::OnButton1() {    // TODO: Add your control notification handler code here    CString str = "";    if(m_radio1.GetCheck() == 1)        str += "年龄为大于30岁";    else if(m_radio2.GetCheck() == 1)        str += "年龄为15到30岁之间";    else if(m_radio3.GetCheck() == 1)        str += "年龄为小于15岁";    else        str += "年龄未知";    str += "爱好包括:";    if(m_check1.GetCheck() == 1)        str += "聊天交友,";    if(m_check2.GetCheck() == 1)        str += "查阅资料,";    if(m_check3.GetCheck() == 1)        str += "打游戏,";    if(m_check4.GetCheck() == 1)        str += "进论坛。";    m_button.SetWindowText("您已经按下确定按钮");    AfxMessageBox(str);}

滚动条

  • 对话框放置一个滚动条
  • 设置滚动条控制变量m_test,注意是控制变量,非value、int
  • 在函数OnInitDialog中对m_test初始化,在return true之前
    // TODO: Add extra initialization here    m_test.SetScrollRange(0,100);//0-100范围    m_test.SetScrollPos(10);//当前位置初始化为10
  • 对CTestDlg添加类向导,OnVScroll事件,添加消息响应函数:
void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {    // TODO: Add your message handler code here and/or call default    int n = m_test.GetScrollPos();    if(pScrollBar == &m_test)    switch(nSBCode)    {    case SB_THUMBTRACK:        m_test.SetScrollPos(nPos); break;    case SB_LINEDOWN:        m_test.SetScrollPos(n + 1); break;    case SB_LINEUP:        m_test.SetScrollPos(n - 1); break;    case SB_PAGEDOWN:        m_test.SetScrollPos(n + 3); break;    case SB_PAGEUP:        m_test.SetScrollPos(n - 3); break;    }    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);}

静态文本控件

若需要改变静态文本的内容,添加控制性变量,设置name以示区别,调用SetWindowText进行改变。

列表框控件

  • 属性中single表示单选,multiple表示多选,extended表示能拖动多选
  • 为列表框建立控制型变量m_list,注意是控制性,非value型
  • 在CTestDlg::OnInitDialog中添加如下:
    // TODO: Add extra initialization here    m_list.AddString("唱歌");    m_list.AddString("绘画");    m_list.AddString("篮球");    m_list.AddString("足球");    m_list.AddString("写作");    m_list.InsertString(1,"看电影");    m_list.InsertString(3,"上网");    m_list.InsertString(0,"逛街");
  • 添加确定按钮消息响应函数:
void CTestDlg::OnOK() {    // TODO: Add extra validation here    CString message = "您的爱好有:";    CString str;    int num = m_list.GetSelCount();    int m[10];    for(int i=0;i<10;i++ )        m[i] = -1;    m_list.GetSelItems(num,m);    for(i = 0;i < 10;i++)    {        if(m[i] != -1)        {            m_list.GetText(m[i],str);            message += str;        }    }    AfxMessageBox(message);//  CDialog::OnOK();}
  • 为列表框添加一个双击某个选项的消息响应函数
void CTestDlg::OnDblclkList1() {    // TODO: Add your control notification handler code here    AfxMessageBox("请进行单击选择");}

列表视图

  • 属性中LVS_ICON表示大图标显示,LVS_SMALLICON表示小图标显示,还有列表显示和详细报表显示
  • 创建一个详细报表列表,添加控制性变量m_list
  • 在CTestDlg::OnInitDialog函数中编写代码如下:
    // TODO: Add extra initialization here    m_list.SetBkColor(RGB(0,0,0));//背景颜色    m_list.SetTextBkColor(RGB(255,0,0));//字体背景色    m_list.SetTextColor(RGB(255,255,0));//字体颜色    m_list.InsertColumn(0,"日期");    m_list.InsertColumn(1,"天气");    //获取列表宽度    RECT rect;    m_list.GetWindowRect(&rect);    int wid = rect.right - rect.left;    //为每列设置列宽    m_list.SetColumnWidth(0,wid/4);    m_list.SetColumnWidth(1,3*wid/4);    m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP);    for(int i=0;i<7;i++)    {        CString str;        str.Format("星期%d",i+1);        m_list.InsertItem(0,"aa");        m_list.SetItemText(0,0,str);        m_list.SetItemText(0,1,(i%2==0)?"晴":"多云");    }

树视图控件的构成

  • 创建一个树视图,属性中选择Styles标签,选择其中的has buttons、has lines和lines at root复选框。
  • 在资源编辑器中添加三个图标IDI_ICON1,2,3
  • CTestDlg类中添加数据成员CImageList m_imageList
class CTestDlg : public CDialog{// Constructionpublic:    CImageList m_imageList;//++++++++++++++++++++++++++++
  • 在CTestDlg::OnInitDialog中添加代码如下:
    // TODO: Add extra initialization here    HICON hIcon[3];         //图标数组    int n;    m_imageList.Create(32,32,0,16,16);    hIcon[0] = AfxGetApp()->LoadIcon(IDI_ICON1);    hIcon[1] = AfxGetApp()->LoadIcon(IDI_ICON2);    hIcon[2] = AfxGetApp()->LoadIcon(IDI_ICON3);    for(n = 0;n < 3;n++)    {        m_imageList.Add(hIcon[n]);    }    CTreeCtrl * pTree = (CTreeCtrl *)GetDlgItem(IDC_TREE1);    pTree->SetImageList(&m_imageList,TVSIL_NORMAL);    TV_INSERTSTRUCT tvinsert;    tvinsert.hParent = NULL;    tvinsert.hInsertAfter = TVI_LAST;    tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE| TVIF_TEXT;    tvinsert.item.hItem = NULL;    tvinsert.item.state = 0;    tvinsert.item.stateMask = 0;    tvinsert.item.cchTextMax = 6;    tvinsert.item.iSelectedImage = 1;    tvinsert.item.cChildren = 0;    tvinsert.item.lParam = 0;    //第一层    tvinsert.item.pszText = "学校";    tvinsert.item.iImage = 0;    HTREEITEM hDad= pTree ->InsertItem(&tvinsert);    //第二层    tvinsert.hParent = hDad;    tvinsert.item.pszText = "自动化学院";    tvinsert.item.iImage = 1;    HTREEITEM hDad21=pTree->InsertItem(&tvinsert);      //第二层两个项目    tvinsert.item.pszText = "通信学院";    HTREEITEM hDad22=pTree->InsertItem(&tvinsert);    //第三层    //第二层第一个项目的两个子项目    tvinsert.hParent = hDad21;    tvinsert.item.pszText = "电气工程专业";    tvinsert.item.iImage = 2;    pTree->InsertItem(&tvinsert);    tvinsert.item.pszText = "自动化专业";    pTree->InsertItem(&tvinsert);    //第二层第二个项目的两个子项目    tvinsert.hParent = hDad22;    tvinsert.item.pszText = "通信工程";    tvinsert.item.iImage = 2;    pTree->InsertItem(&tvinsert);    tvinsert.item.pszText = "电气信息";    pTree->InsertItem(&tvinsert);

编辑框

  • 创建对话框应用程序,两个编辑框,一个按钮
  • 设置编辑框属性:多行,水平滚动、垂直滚动、需要返回,边界
  • 添加控制性变量m_edit1、m_edit2
  • 为按钮添加消息响应函数:
void CTestDlg::OnButton1() {    // TODO: Add your control notification handler code here    m_edit2.SetSel(0,-1);    m_edit2.ReplaceSel("");     //清除编辑框2的内容    m_edit1.SetSel(0,-1);       m_edit1.Copy();             //将编辑框1内的内容复制到剪贴板    m_edit1.ReplaceSel("");     //清除编辑框1的内容    m_edit2.Paste();            //将剪贴板内容粘贴到编辑框2中}

组合框

  • 类型:简单类型没有三角符号、下拉和下拉列表有三角符号,下拉还可以在编辑框中输入。
  • 属性、数据中输入列表选项,一行一项,ctrl+enter换行
  • 建立消息响应函数

属性页

  • 创建对话框程序
  • 添加属性页控件IDC_TAB
  • 利用类向导,添加控制变量CTabCtrl m_tab
  • 利用资源管理器添加两个对话框资源dialog1、dialog2,设置其属性为child下层,取消title
  • 利用类向导为两个对话框添加类CDialog1、CDialog2
  • 在CTestDlg类的声明文件中包含头文件
#include "Dialog1.h"#include "Dialog2.h"
  • 在CTestDlg类中添加两个成员变量
public:    CTestDlg(CWnd* pParent = NULL); // standard constructor    CDialog1 dlg1;//+++++++++++++++++++++++++++    CDialog2 dlg2;//++++++++++++++++++++++++++++
  • 在CTestDlg::OnInitDialog中添加属性页控件的初始化语句
    // TODO: Add extra initialization here    m_tab.InsertItem(0,"对话框1");    m_tab.InsertItem(1,"对话框2");    //创建两个以IDC_TAB为父窗口的属性页    dlg1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB));    dlg2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB));    //显示区域    RECT rect;    m_tab.GetClientRect(&rect);    rect.top += 30;    rect.left += 5;    rect.right -= 5;    rect.bottom -= 5;    dlg1.MoveWindow(&rect);    dlg2.MoveWindow(&rect);    dlg1.ShowWindow(TRUE);    dlg2.ShowWindow(FALSE);    m_tab.SetCurSel(0);
  • 为了响应切换属性页的消息,利用类向导添加TCN_SELCHANGE和TCN_SECHANGING消息,前者是切换回发出的消息,后者是切换中发出的消息
  • 利用类向导添加TCN_SELCHANGE,函数如下:
void CTestDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) {    int num = m_tab.GetCurSel();    if(num == 0)    {        dlg1.ShowWindow(TRUE);        dlg2.ShowWindow(FALSE);    }    else    {        dlg1.ShowWindow(FALSE);        dlg2.ShowWindow(TRUE);    }    *pResult = 0;}

进度条

在使用过程中可以在对话框中添加一个进度条控件,然后创建一个指向该进度条的对象指针。在应用程序中可以利用类中的函数对进度条控件进行操作。进度条控件的使用一般需要一个时间定时来实现进度条的前进。

滑块

当利用鼠标拖动滑块控件时,可以添加消息响应函数来处理。

IP Address控件

在网络类应用程序中,经常需要对IP地址进行处理,而IP地址控件是一个四段型的标准IP地址的形式,用户可以以点分十进制形式输入IP地址。IP地址是一个32位的二进制数据,实际中常用的形式是点分十进制形式,例如119.255.33.44。

时间控件

用来接收时间的输入和输出。

应用实例

进度条、滑块操作
- 创建对话框程序
- 放入进度条、按钮、滑块、编辑框(只读)
- 在类向导中对进度条和滑块添加变量

CSliderCtrl m_SliderCtrl;CProgressCtrl m_progressCtrl;
  • 添加单击按钮控件的消息映射,编写函数体如下:
void CTestDlg::OnButton1() {    // TODO: Add your control notification handler code here    m_progressCtrl.SetRange(0,100);//1-100    for(int i=0;i<=100;i++)    {        m_progressCtrl.SetPos(i);        Sleep(100);//100ms    }    AfxMessageBox("进度条到达终点");}
  • 利用类向导,添加滑块的消息映射,需要注意的是,横向滑块移动的消息映射是WM_HSCROLL消息,而垂直的滑块的消息映射是WM_VSCROLL消息。
void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {    // TODO: Add your message handler code here and/or call default    m_SliderCtrl.SetRange(0,100);    CString str;    str.Format("%d",m_SliderCtrl.GetPos());    SetDlgItemText(IDC_EDIT1,str);    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}

时间控件应用实例

  • 创建一个对话框
  • 在资源编辑器中分别添加Date Time Picker控件和MonthCalendar
  • 利用类向导分别为两个控件添加变量CdateTimeCtrl m_date和CmonthCalCtrl m_time
  • 利用类向导添加再日历控件上选择日期时的消息映射,即添加消息MCN_SELECT的响应函数
void CTestDlg::OnSelectMonthcalendar1(NMHDR* pNMHDR, LRESULT* pResult) {    // TODO: Add your control notification handler code here    CString str;    SYSTEMTIME time;    m_time.GetCurSel(&time);                //得到选中的日期    str.Format("%d%d%d 日  星期%d",time.wYear,time.wMonth,time.wDay,     time.wDayOfWeek);    AfxMessageBox(str);                     //弹出消息框    *pResult = 0;}
  • 利用类向导为时间控件添加消息映射DTN_CLOSEUP
void CTestDlg::OnCloseupDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) {    // TODO: Add your control notification handler code here    CString str;    SYSTEMTIME time;                //结构体变量    m_date.GetTime(&time);          //得到选中日期    str.Format("%d%d%d 日  星期%d",time.wYear,time.wMonth,time.wDay,     time.wDayOfWeek);    m_time.SetCurSel(&time);        //设置日期    AfxMessageBox(str);             //弹出消息框    *pResult = 0;}
  • 在Release版本下运行程序,否则消息框时间混乱!
原创粉丝点击