实验四:列
框和组合框之间的数据交换 程序运行结果如图: 编程思路: (1) 为了使组合框和列表框在程序启动时有一个默认选项,可以使用函数SetCurSel设置默认选中项 (2) 列表框中单机某列表项后背景变为深蓝色则表示该项被选中 (3) 由于对列表框和组合框操作的函数为控件类的成员函数,因此必须分别为列表框和组合框关联控件类型的成员变量 操作步骤: (1) 新建MFC对话框应用程序“LCExchange” (2) 按上图完成界面
(3) 修改各控件的ID及按钮的标题,组合框对应的ID为IDC_COMBO,列表框对应的ID为IDC_LIST,向右的按钮的ID为IDC_TORIGHT,向左的按钮对应的ID为IDC_TOLEFT。 (4) 分别为组合框和列表框关联控件类型的变量m_combo和m_list,然后在 (5) 组合框属性对话框中为组合框添加数据
如下图: (6) 添加下面的代码: BOOL CLCExchangeDlg::OnInitDialog() {。。。。。。。 // TODO: Add extra initialization here //向列表框中添加数据记录 m_list.AddString("远芳侵古道"); m_list.AddString("晴翠接三城"); m_list.AddString("又送王孙去"); m_list.AddString("凄凄离别情"); //设置列表框和组合框的默认选项 m_list.SetCurSel(0); m_combo.SetCurSel(0); return TRUE; // return TRUE unless you set the focus to a control } (7) 双击向右按钮添加BN_CLICKED消息函数OnToright并加入如下代码: void CLCExchangeDlg::OnToright() { // TODO: Add your control notification handler code here int nSel=m_combo.GetCurSel();//取得当前选项的序号 if(nSel>=0) //如果组合框的列表项非空 { CString rString; m_combo.GetLBText(nSel,rString); m_combo.DeleteString(nSel); if(m_combo.GetCount()>0)//如果组合框的列表项非空 m_combo.SetCurSel(0); m_list.AddString(rString); } else AfxMessageBox("当前组合框中没有选项!"); } (8) 双击向左按钮添加BN_CLICKED消息函数OnToleft并加入如下代码: void CLCExchangeDlg::OnToleft() { // TODO: Add your control notification handler code here int nSel=m_list.GetCurSel();//取得当前选项的序号 if(nSel>=0) //如果组合框的列表项非空 { CString rString; m_list.GetText(nSel,rString); m_list.DeleteString(nSel); if(m_list.GetCount()>0)//如果组合框的列表项非空 m_list.SetCurSel(0); m_combo.AddString(rString); } else AfxMessageBox("当前列表框中没有选项!"); } (8)运行程序 实验五 颜色渐变器 程序运行结果如下 图: 编程思路: (1) 颜色用RGB()函数来设置 (2) 为了使进度条对应的值能逐渐增加,在程序中设置TIMER控件 操作步骤: (1) 创建一个MFC对话框应用程序“Color” (2) 按上图进行界面设计 (3) 进度条ID:IDC_PROGRESS_RED 滚动条ID:IDC_SCROLLBAR_GREEN (4) 滑动条ID:IDC_SLIDER_BLUE (5) 分别为进度条、滚动条和滑动条关联控件类型变量m_progressRed、m_scrollbarGreen和m_sliderBlue。 (6) 为对话框类CcolorDlg添加3个int型成员变量m_nRed,m_nGreen,m_nBlue,分别用来保存进度条、滚动条和滑动条的当前位置。在构造函数中添加初始化代码: CColorDlg::CColorDlg(CWnd* pParent /*=NULL*/) : CDialog(CColorDlg::IDD, pParent) { 。。。。。。。。。 m_nRed=m_nGreen=m_nBlue=0; } (7) 添加代码: BOOL CColorDlg::OnInitDialog() {。。。 // TODO: Add extra initialization here //设置进度条、滚动条以及滑动条的范围 m_progressRed.SetRange(0,255); m_scrollbarGreen.SetScrollRange(0,255); m_sliderBlue.SetRange(0,255); //设置进度条、滚动条以及滑动条的初始位置 m_progressRed.SetPos(m_nRed); m_scrollbarGreen.SetScrollPos(m_nGreen); m_sliderBlue.SetPos(m_nBlue); SetTimer(0,100,NULL); return TRUE; // return TRUE unless you set the focus to a control } (8) 为对话框类CcolorDlg映射WM_TIMER消息函数OnTimer,添加如下代码: void CColorDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default m_nRed++; if(m_nRed>255)//如果进度条值大于255,则将其重置为0 m_nRed=0; m_progressRed.SetPos(m_nRed); Invalidate(); //重画 CDialog::OnTimer(nIDEvent); } (9)为对话框类CcolorDlg映射WM_HSCROLL消息函数OnHScroll,添加如下代码: void CColorDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default int nID=pScrollBar->GetDlgCtrlID(); //取得对话框上的控件 if(nID==IDC_SCROLLBAR_GREEN)//如果是滚动条 { switch(nSBCode)//滚动条通告消息 { case SB_LINELEFT:m_nGreen--;break; case SB_LINERIGHT:m_nGreen++;break; case SB_PAGELEFT:m_nGreen-=10;break; case SB_PAGERIGHT:m_nGreen+=10;break; case SB_THUMBTRACK:m_nGreen=nPos;break; } if(m_nGreen<0) m_nGreen=0; if(m_nGreen>255) m_nGreen=255; m_scrollbarGreen.SetScrollPos(m_nGreen); } if(nID==IDC_SLIDER_BLUE)//如果是滑动条 { switch(nSBCode)//滑动条通告消息 { case TB_LINEUP:m_nBlue--;break; case TB_LINEDOWN:m_nBlue++;break; case TB_PAGEUP:m_nBlue-=10;break; case TB_PAGEDOWN:m_nBlue+=10;break; case TB_THUMBTRACK:m_nBlue=nPos;break; } if(m_nBlue<0) m_nBlue=0; if(m_nBlue>255) m_nBlue=255; m_sliderBlue.SetPos(m_nBlue); } Invalidate();//重画 CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } (10)在对话框类的OnPaint()中添加如下代码: void CColorDlg::OnPaint() { if (IsIconic()) {。。。。。 } else { CPaintDC dc(this); //填充矩形区域 dc.FillSolidRect(13,140,454,145,RGB(m_nRed,m_nGreen,m_nBlue)); CDialog::OnPaint(); } } (11)运行程序