第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版本下运行程序,否则消息框时间混乱!
阅读全文
0 0
- 第8章 常用控件
- 第一行笔记-常用控件
- 第8章-常用优先级和css3
- 第8章 常用实用类
- Android学习第三天:页面布局和常用控件
- Android学习第12课—常用控件(二)
- Android学习第13课—常用控件(三)
- 【EASY ANDROID】第4节:常用的基本控件 发布
- 第14章 用户控件
- 第16章、上传控件
- 第54章、TreeView控件
- 第三章 常用界面控件
- 第7章 常用类
- 常用控件
- 常用控件
- 常用控件
- 常用控件
- 常用控件
- idea 创建maven webapp 项目
- MVP
- Fragment滑动
- NOIP复赛复习(十二)数论算法巩固与提高
- Linux slub分配器
- 第8章 常用控件
- 添加状态栏
- Tomcat7.0.42源码研读之类加载器(五)
- mysql 触发器
- 无人机驾驶员培训学习记录(九)
- 实验测试1《C++ Primer》第五版——第八章 IO类
- Hive SQL的编译过程
- Samba 玩起来
- D