实验11 进展条、滚动条和滑动条.doc_第1页
实验11 进展条、滚动条和滑动条.doc_第2页
实验11 进展条、滚动条和滑动条.doc_第3页
实验11 进展条、滚动条和滑动条.doc_第4页
实验11 进展条、滚动条和滑动条.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验11 进展条、滚动条和滑动条实验内容设计一个对话框应用程序Ex_Color,其运行结果如图T11.1所示。操作滚动条、滑动条和进展条控件可以调整RGB颜色的3个颜色分量:R(红色分量)、G(绿色分量)和B(蓝色分量),并根据用户指定的颜色填充控件。实验准备和说明(1) 在学习完第四章内容之后计息本次实验。(2) 构思本次上机所需要的程序。实验步骤1. 创建工作文件夹打开计算机,在”D:Visual C+程序LiMing” 文件夹中创建一个新子文件夹“实验11”。 2. 设计对话框设计对话框的具体步骤如下。(1) 启动Visual C+6.0(2) 创建一个默认的基于对话框应用程序项目Ex_Color ,在“新建”对话框中将项目文件夹定位到D:Visual C+程序LiMing实验11(3) 在打开的对话框资源模板中,将对话框的标题属性改为“控件颜色设置”,删除“取消”按钮,并将“确定”按钮的标题属性改为“退出”。(4) 显示对话框网络,调整对话框的大小,参照如图T11.1所示控件的布局,向对话框添加入表T11.1所示的控件,调整控件的位置。(5) 打开MFC ClassWizard,在MFC ClassWizard 的Menber Variables页面中,确定Class name 中是否已选择了Cex_InputDIg,选中所需的控件ID标识符,双击鼠标或单击Add Variables 按钮。依次为如表T11.2所示的控件增加成员变量。3. 增加成员函数Draw增加成员函数 Draw 的具体步骤如下。(1)展开项目工作区窗口Class View中的Cex_ColorDlg类的所有结点。(2)用鼠标右键单击Cex_ColorDlg 类结点,从弹出的快捷菜单中选择” Add Member Function(增加成员变量),弹出如图T11.2所示的Add Member Function 对话框。(3)在Function Type 框中输入成员函数类型 void ,在Function Declaration 框中输入成员函数声明者Draw(UINT nID)。保留默认的访问方式(Access)为Public,单击“OK”按钮。(4)定位在Draw 函数,添加下列代码:void CEx ColorDlg:Draw(UIN nID)CWnd*pWnd=GetDLGitem(Nid);CDC*Pdc=pWnd-GetDC();/ 获得窗口当前的设备环境指针CBrush drawBrush;/定义画刷变量drawBrush.CrenateSolidBrush(RGB(m_nRValue,m_nGValue,m_nBValue);/创建一个填充色画刷。RGB是一个颜色宏,用于将指定的红、绿、蓝3种颜色分量转换成一个32位的RGB颜色值CBrush*pOldBrush=pDC-SlelectObject(&drawBrush);CRect rcClient;pWnd-GetClientRect(rcClient);/获取当前控件的客房区大小PDC-Rectangle(rcClient);/用当前画刷填充指定的矩形框PDC-SelectObject(pOldBrush );恢复原来的画刷 4.添加初始化代码添加初始化代码的具体步骤如下。(1) 在CEx_ColorDlg:OnInitDialog中添加下列代码:BOOL CEx_ColorDlg:OnInitDialog ()CDialog: OnInitDialog();/设置滚动条、滑动条、进展条、旋转按钮的范围和当前位置m_Scroll.SetScrollRange(0,255);m_Scroll.SetScrollPos(m_nRValue);m_Slider.SetRange(0,255);m_Slider.SetPos(m_nGValue);m_Progress.SetRange(0,255);m_Progress.SetPos(m_nBValue);m_Spin.SetRange(0,255);m_Spin.SetPos(m_nBValue);return TRUE; /return TRUE unless you set the focus to a control(2)编译运行。 5完善代码完善代码的具体步骤如下。(1) 用MFC ClassWizard 在CEX_ColorDlg 类中为编辑框IDC_EDIT_R、IDC_EDIT_G和IDC_EDIT_B添加EN_CHANGE的消息映射,使用它们的消息映射函数名都设为OnChangeEdit,并增加下列代码:void CEx ColorDlg:OnChangeEdit()UpdateData();m_Scroll.SetScrollPos(m_nRValue);m_Slider.SetPos(m_nGValue);m_Progress.SetPos(m_nBValue);m_Spin.SetPos(m_nBValue);Draw(IDC_DRAW);(2)用MFC ClassWizard 在CEX_ColorDlg 中为旋转按钮控件 IDC_SPIN 添加 UDN_DELTAPOS消息映射,并在映射函数中添加下列代码: void CEx ColorDlg:OnDeltaposSpin1(NMHDR*PNMHDR,LRESULT*pResult)NM_NPDOWN*pNMUpDown=(NM_UPDOWN*)PNMHDR;UpdateData(TRUE);/将控件的内容保存到变量中m_nBValue+=pNMUpDown-iDelta;if(m_nBValue255) m_nBValue=255;UpdateData(FALSE);OnChangeEdit();*pResult=0;(3)用MFC Class Wizar 在CEx_ColorDlg 中为添加WM_HSCROLL消息映射,并的映射函数中添加下列代码: void CEx ColorDlg:OnHScroll(UINT nSBCode,UINT nPos, CScrollBar*pScrollBar)int nID=pScrollBAR-GetDlgCtrllD(); if ( nID=IDC_SLIDER1) /是滑动条产生水平滚动消息M_nGValue=m_Slider.GetPos();/获得滑动条当前的位置if ( nID=IDC_SCROLLBAR1) /是滚动条产生水平滚动消息switch(nSBCode)case SB_LINELEFT: m_nRValue;/单击滚动条左边箭头 break; case SB_LINERIGHT: m_nRValue+; break; /单击滚动条右边箭头 case SB_PAGELEFT: m_nRValue-=10; break; case SB_PAGERIGHT: m_nRVaue+=10; break; case SB_THUMBTRACK: m_nRValue=nPos; break; if (m_nRValue255) m_nRValue=255; m_Scroll.SetScrollPos(m_nRValue); UpdateData(FALSE); OnChangeEdit(); Cdialog:OnHScroll(nSBCode,nPos,pScrollBar);(4)编译运行并测试,如图T11.1所示。但若用另一个窗口去遮挡Ex_Color对话框时,静态文本控件中的颜色又变成了默认的灰色,这是因为当一个对话框被遮挡时,系统认为此时对话框窗口无效,会自动调用OnPaint函数进行刷新。因此,需要再OnPaint函数中调用前面添加的Draw函数,如下列代码:void Cex_ColorDlg:OnPaint() if (IsIconic() else Cdialog:OnPaint(); CWnd*pWnd=GetDlgItem(IDC_DRAW); pWnd-UpdateWindow(); Draw(IDC_DRAWJ); 需要说明的是; 当需要更新或重新绘制窗口的外观时,应用程序会发送WM_PAINT消息。用MFCClassWizard在对话框中映射WM_PAINT消息的目的是执行用户自己的绘图代码。但基于对话框应用程序的框架中,WM_PAINT消息映射已自动添加过了。 在对话框中的空间惊醒绘画时,为了防止Windows用系统默认的颜色向对话框进行重复绘制,用户须调用UpdateWindow(更新窗口)函数来达到这一效果。UpdateWindow是CWnd的一个无参数的成员函数,其目的是绕过系统的消息列队,而直接发送或停止发送WM_PAINT消息,当窗口没有需要更新的区域时,就停止发送。这样,当用户绘制完图形时,由于没有WM_PAINT消息的发生,系统也就不会用默认的颜色对窗口进行重复绘制。 像所有的窗口一样,如果对话框中的任何部分变为无效(即需要更新)时,对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论