在线客服系统

用VC++6.0为对话框添加最小化按钮和提示条

时间:2015-08-25 09:31 来源:发表吧 作者:发表吧编辑 点击:
  【摘要】本文通过实例介绍了用VC++6.0为对话框添加最小化按钮和提示条的方法和原理
  【关键词】对话框;最小化按钮;提示条
  我们在使用对话框窗体时,会有这样一种感受:当对话框窗体位于其它程序窗口界面上时,单击对话框外区域时,可使对话框窗体最小化;而当对话框窗体位于桌面上时,无论怎样单击对话框外区域,对话框均不能最小化,只能选择关闭。但有时我们在使用对话框时,还希望能根据需要使对话框具有最小化功能。本文的设计思想就是据此提出来的。
  1实例程序设计要点
  ⑴取得对话框标题栏位置和大小,在标题栏的适当位置绘制最小化按钮,并记住按钮的位置。
  ⑵在最小化按钮所在区域检测鼠标是否在该区域内、是否按下,是否发送最小化消息使对话框最小化,否则不变。
  ⑶将最小化按钮矩形区域向工具提示条控件注册,这样当鼠标在最小化按钮矩形区域时,显示提示文本。
  2实例程序实现的步骤及说明
  ⑴准备二个位图,一个位图表示最小化按钮正常显示状态,另一个位图表示最小化按钮被按下时的状态。
  ⑵使用MFCAppWizard(exe)创建工程名为MinButton的对话框窗体,如图所示,将二个按钮位图导入对话框的资源里。
  ⑶在CMinButtonDlg对话框类中进行变量定义和函数声明。
  ⑷利用ClassWizard为对话框类添加消息WM_NCPAINT,WM_ACTIVATE和WM_NCMOUSEMOVE的消息处理函数,在这三个函数中调用成员函数DrawButton()来绘制按钮。
  ⑸利用ClassWizard为最小化按钮关联对应的消息WM_NCLBUTTONDOWN和消息处理函数OnNcLButtonDown(UINTnHitTest,CPointpoint)。
  ⑹函数DrawButton()用于绘制按钮。由于最小化按钮并不是一个真实的按钮控件,而是一个画在标题栏上的位图。因此,为了在对话框窗体标题上绘画,必须创建一个窗口设备环境类(相当于创建一个画布,有了这个画布,才能在画布上绘画,也就是才能在标题栏上绘画。)
  ①调用函数GetWindowDC()取得指向CDC的指针CDC*pDC;
  ②调用函数CreateCompatibleDC(CDC*pDC)创建一个内存设备环境,以便在内存中保存位图,并与指定的窗口设备环境相兼容;
  ③调用函数SelectObject(CBitmap*pBitmap),将位图选入内存设备环境中;
  ④调用函数BitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrc,intxSrc,intySrc,DWORDdwRop)将位图复制到实际设备环境中。其中,参数x,y表示位图目标矩形左上角的x,y逻辑坐标值;nWidth,nHeight表示位图目标矩形的逻辑宽度和高度;pSrc表示源设备环境CDC指针;xSrc,ySrc表示位图源矩形的左上角的x,y逻辑坐标值;dwRop表示显示位图的光栅操作方式。光栅操作方式有多种,这里使用的是SRCCOPY,表示将位图直接复制到目标内存设备环境中。这里要说明一点:函数BitBlt()只能“一比一”的显示位图,如要任意缩放显示位图须使用函数StretchBlt(),该函数的使用方法,请参考相关书籍。
  ⑤位图选入内存环境中显示后,应调用函数SelectObject(CBitmap*pOldBitmap)恢复原来的内存设备环境。
  ⑺提示条实质上是一个小的弹出窗口,在窗口中显示一行文本,用来描述工具(或区域)的用途或其它信息。在MFC中提供了工具提示条控件类CToolTipCtrl,由它来管理提示条。在这里,我们从CToolTipCtrl类派生子类CToolTips。在子类的定义中添加函数BOOLAddToolTip(UINTnID,LPRECTlpRect,LPCTSTRlpszText),该函数用于向工具提示条控件注册按钮区域和提示文本,当鼠标在最小化按钮区域时,显示提示文本。
  3主要的程序代码
  ⑴在对话框类中定义相应的变量和函数声明
  classCMinButtonDlg:publicCDialog
  {
  …………
  public:
  CRectm_rtButtMin;//记录最小化按钮位置
  voidDrawButton();//绘制最小化按钮
  BOOLm_BMPPressed;//最小化按钮状态标志
  CRectm_ButtMinTips;//记录最小化按钮区域
  protected:
  CToolTipsm_ToolTip;//定义工具提示条控件变量
  voidGetMinButRect();//获取最小化按钮所在区域
  //消息处理函数
  afx_msgvoidOnNcLButtonDown(UINTnHitTest,CPointpoint);
  afx_msgvoidOnNcPaint();
  afx_msgvoidOnActivate(UINTnState,CWnd*pWndOther,BOOLbMinimized);
  afx_msgvoidOnNcMouseMove(UINTnHitTest,CPointpoint);
  …………
  };
  ⑵对话框类中三个消息处理函数定义如下:
  //对应消息WM_NCPAINT的消息处理函数
  voidCMinButtonDlg::OnNcPaint()
  {
  CDialog::OnNcPaint();
  DrawButton();//绘制最小化按钮
  }
  //对应消息WM_ACTIVATE的消息处理函数
  voidCMinButtonDlg::OnActivate(UINTnState,CWnd*pWndOther,BOOLbMinimized)
  {
  CDialog::OnActivate(nState,pWndOther,bMinimized);
  DrawButton();//绘制最小化按钮
  }
  //对应消息WM_NCMOUSEMOVE的消息处理函数
  voidCMinButtonDlg::OnNcMouseMove(UINTnHitTest,CPointpoint)
  {
  DrawButton();//绘制最小化按
  CDialog::OnNcMouseMove(nHitTest,point);
  }
  ⑶绘制最小化按钮的函数
  voidCMinButtonDlg::DrawButton()
  {
  CDC*pDC=GetWindowDC();
  CDC*pMemDC=newCDC;
  CBitmap*pBitmap1=newCBitmap;
  CBitmap*pBitmap2=newCBitmap;
  CBitmap*pOldBitmap;
  CRectrtWnd,rtButtons,rtTitle;

www.fabiaoba.com),是一个专门从事期刊推广期刊发表、投稿辅导、发表期刊的网站。
  本站提供如何投稿辅导、发表期刊,寻求论文刊登合作,快速投稿辅导,投稿辅导格式指导等解决方案:省级论文刊登/国家级论文刊登/ CSSCI核心/医学投稿辅导/职称投稿辅导。

投稿邮箱:fabiaoba365@126.com
 在线咨询: 投稿辅导275774677投稿辅导1003180928
 在线咨询: 投稿辅导610071587投稿辅导1003160816
 联系电话:13775259981

联系方式
李老师QQ:发表吧客服610071587 陈老师QQ:发表吧客服275774677 刘老师QQ:发表吧客服1003160816 张老师QQ:发表吧客服1003180928 联系电话:18796993035 投稿邮箱:fabiaoba365@126.com
期刊鉴别
  • 刊物名称:
  • 检索网站:
热门期刊
发表吧友情提醒

近来发现有些作者论文投稿存在大量剽窃、抄袭行为,“发表吧”对此类存在大量剽窃、抄袭的论文已经停止编辑、推荐。同时我们也提醒您,当您向“发表吧”投稿时请您一定要保证论文的原创性、唯一性,这既是对您自己负责,更是对他人的尊敬。

此类投稿的论文如果发表之后,对您今后的人生和事业将造成很大的麻烦,后果不堪设想,请您一定要慎重,三思而后行。

如因版权问题引起争议或任何其他原因,“发表吧”不承担任何法律责任,侵权法律责任概由剽窃、抄袭者本人承担。

 
QQ在线咨询
陈老师:275774677
张老师:1003180928
李老师:610071587
刘老师:1003160816
论文刊登热线:
137-7525-9981
微信号咨询:
fabiaoba-com

友情链接

申请链接