




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual C+编程技巧之四25、如何获取有关窗口正在处理的当前消息的信息 调用CWnd: : GetCurrentMessage可以获取一个MSG指针。例如,可以使用ClassWizard将几个菜单项处理程序映射到一个函数中,然后调用GetCurrentMessage来确定所选中的菜单项。viod CMainFrame : : OnCommmonMenuHandler ( ) /Display selected menu item in debug window . TRACE (Menu item %u was selected . n ,GetCruuentMessage ( ) wParam );26、如何创建一个不规则形状的窗口可以使用新的SDK函数SetWindowRgn。该函数将绘画和鼠标消息限定在窗口的一 个指定的区域,实际上使窗口成为指定的不规则形状。 使用AppWizard创建一个基于对的应用程序并使用资源编辑器从主对话资源中删 除所在的缺省控件、标题以及边界。给对话类增加一个CRgn数据成员,以后要使用该数据成员建立窗口区域。 Class CRoundDlg : public CDialogprivate :Crgn m_rgn : / window region ;修改OnInitDialog函数建立一个椭圆区域并调用SetWindowRgn将该区域分配给窗口:BOOL CRoundDlg : : OnInitDialog ( )CDialog : : OnInitDialog ( ) ;/Get size of dialog .CRect rcDialog ;GetClientRect (rcDialog );/ Create region and assign to window .m_rgn . CreateEllipticRgn (0 , 0 , rcDialog.Width ( ) , rcDialog .Height ( ) );SetWindowRgn (GetSafeHwnd ( ) , (HRGN) m_ rgn , TRUE );return TRUE ;通过建立区域和调用SetWindowRgn,已经建立一个不规则形状的窗口,下面的例 子程序是修改OnPaint函数使窗口形状看起来象一个球形体。 voik CRoundDlg : : OnPaint ( )CPaintDC de (this) ; / device context for painting ./draw ellipse with out any borderdc. SelecStockObject (NULL_PEN);/get the RGB colour components of the sphere colorCOLORREF color= RGB( 0 , 0 , 255);BYTE byRed =GetRValue (color);BYTE byGreen = GetGValue (color);BYTE byBlue = GetBValue (color);/ get the size of the view windowCrect rect ;GetClientRect (rect);/ get minimun number of unitsint nUnits =min (rect.right , rect.bottom ); /calculate he horiaontal and vertical step size float fltStepHorz = (float) rect.right /nUnits ; float fltStepVert = (float) rect.bottom /nUnits ;int nEllipse = nUnits/3; / calculate how many to drawint nIndex ; / current ellipse that is being drawCBrush brush ; / bursh used for ellipse fill colorCBrush *pBrushOld; / previous brush that was selected into dc/draw ellipse , gradually moving towards upper-right cornerfor (nIndex = 0 ; nIndes GetDescendantWindow(AFX_IDW_STUTUS_BAR);/Get pointer to toolbar .CToolBar * pToolBar =(CToolBar * ) AfxGetMainWnd ( ) GetDescendantWindow (AFX_IDW_TOOLBAR);28、如何使能和禁止工具条的工具提示如果设置了CBRS_TOOLTIPS风格位,工具条将显示工具提示,要使能或者禁止 工具提示,需要设置或者清除该风格位。下例通过调用CControlBar : : GetBarStyle和CControlBar : : SetBarStyle建立一个完成此功能的成员函数: void CMainFrame : : EnableToolTips ( BOOL bDisplayTips )ASSERT_VALID (m_wndToolBar);DWORD dwStyle = m _wndToolBar.GetBarStyle ( ) ; if (bDisplayTips)dwStyle=CBRS_TOOLTIPS ;elsedwStyle & = CBRS_TOOLTIPS ;m_wndToolBar.SetBarStyle (dwStyle );29、如何设置工具条标题工具条是一个窗口,所以可以在调用CWnd : : SetWindowText来设置标题,例子如下: int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreateStruct )/ Set the caption of the toolbar .m_wndToolBar.SetWindowText (_T Standdard);30、如何创建和使用无模式对话框MFC将模式和无模式对话封装在同一个类中,但是使用无模式对话需要几 个对话需要几个额处的步骤。首先,使用资源编辑器建立对话资源并使用 ClassWizard创建一个CDialog的派生类。模式和无模式对话的中止是不一样的: 模式对话通过调用CDialog : : EndDialog来中止,无模式对话则是调用CWnd: : DestroyWindow来中止的,函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数。void CSampleDialog : : OnOK ( )/ Retrieve and validate dialog data .if (! UpdateData (TRUE) )/ the UpdateData rountine will set focus to correct itemTRACEO ( UpdateData failed during dialog termination .n) ;return ;/Call DestroyWindow instead of EndDialog . DestroyWindow ( ) ;void CSampleDialog : : OnCancel ( )/Call DestroyWindow instead of EndDialog . DestroyWindow ( ) ;其次,需要正确删除表示对话的C+对象。对于模式对来说,这很容易,需要创建函数返回后即可删除C+对象;无模式对话不是同步的,创建函数调用后立即返回,因而用户不知道何时删除C+对象。撤销窗口时工作框调用CWnd : : PostNcDestroy,可以重置该函数并执行清除操作,诸如删除this指针。void CSampleDialog : : PostNcDestroy ( )/ Declete the C+ object that represents this dialog .delete this ;最后,要创建无模式对话。可以调用CDialog : : DoModal创建一个模式对放, 要创建一个无模式对话则要调用CDialog: : Create。下面的例子说明了应用程序是如何创建无模式对话的: void CMainFrame : : OnSampleDialog ( )/Allocate a modeless dialog object .CSampleDilog * pDialog =new CSampleDialog ; ASSERT_VALID (pDialog) ;/Create the modeless dialog .BOOL bResult = pDialog Creste (IDD_IDALOG) ;ASSERT (bResult ) ;31、如何在对话框中显示一个位图这要归功于Win 32先进的静态控件和Microsoft的资源编辑器, 在对话框中显示位图是很容易的, 只需将图形控件拖到对话中并选择适当属性即可,用户也可以显示图标、位图以及增强型元文件。 32、如何改变对话或窗体视窗的背景颜色调用CWinApp : : SetDialogBkColor可以改变所有应用程序的背景颜色。第一个参数指定了背景颜色,第二个参数指定了文本颜色。下例将应用程序对话设置为蓝色背景和黄色文本。 BOOL CSampleApp : : InitInstance ( )/use blue dialog with yellow text .SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;需要重画对话(或对话的子控件)时,Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子,也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤。 首先,给对话基类增加一人成员变量CBursh :class CMyFormView : public CFormViewprivate :CBrush m_ brush ; / background brush ;其次, 在类的构造函数中将刷子初始化为所需要的背景颜色。CMyFormView : : CMyFormView ( )/ Initialize background brush .m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) ) 最后,使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数,所以要检测nCtlColor参量。HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor )/ Determine if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品注册审评员考核试题及答案
- 电梯安全管理人员月考试题库加答案
- 2025年度委托担保合同适用范围与条件
- 2025年度智能新能源汽车出租车运营合作协议书
- 2025年出租车夜班运营权承租及紧急救援服务合作协议
- 2025年度家庭装修半包装修服务协议范本
- 2025年度企业内部培训师认证授权培训合同范本
- 2025版教育培训课程体系订购协议
- 2025年度信息技术咨询与售后服务合同
- 2025版挖掘机销售与地下管网施工承包合同
- 2025年六安市裕安区石婆店镇公开招考村级后备干部8名笔试备考试题及答案解析
- 公司领导财务知识培训课件
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 子痫患者护理查房
- 2024仁爱科普版八年级英语上册 Unit 1 Healthy Mind and Body(知识梳理与考点训练)解析版
- 医疗护理员职业技能竞赛试题及答案
- 出货标签管理办法
- 2025全国农业(水产)行业职业技能大赛(水生物病害防治员)选拔赛试题库(含答案)
- 旅游相册:宁夏旅游课件
- 药物化学(全套课件)
- 污水站沉淀池清淤及清洗工作施工方案
评论
0/150
提交评论