mfc绘图控件,mfc绘图教程

  mfc绘图控件,mfc绘图教程

  首先感谢大家对第一帖的支持。应部分网友的强烈要求,这里对上一篇帖子做一些补充和说明(老鸟可以忽略)。

  本帖是给不知道实战理论第一帖的人看的。先看第一篇帖子:

  http://topic . . net/u/2011 07 10/19/5209 f358-31 c8-4057-b108-02155 a 417 FD 0 . html

  1).添加一个高级重载函数PreSubclassWindow()。我的理解是允许用户在子类化之前做一些额外的处理。这个重载函数也非常重要,应该引起足够的重视。您可以更改大小、位置、窗口样式、字体等。这里的控制.你能想到的任何东西都可以在这里改变。

  2).关于Edit的补充说明:我最初的自绘方法是利用WM_NCPAINT中处理的非客户区自行绘制边界,从而实现悬停和离开的不同边界。但是我后来发现非客户端区域的边界只有2个像素,因为太小了。如果鼠标快速移动,有时系统无法检测到鼠标的当前状态,所以程序中的编辑是在OnPaint中绘制的,但是有一个核心API——Default()。参见下面的代码。

  void CEditEx:OnPaint()

  {

  默认();//键

  如果(!m_bHover)

  draw boder();//划清自己的界限

  },这是程序中自绘编辑使用的方法。

  3).对于控件的悬停和离开效果,简单来说,悬停是指鼠标现在悬浮在控件上,离开是指鼠标离开控件。那么如何才能达到这种效果呢?我直接给出源代码。

  以编辑控件为列

  添加到头文件。

  afx _ msg void OnMouseMove(UINT nFlags,c point point);

  afx _ msg LRESULT OnMouseLeave(WPARAM WPARAM,LPARAM LPARAM);

  afx _ msg LRESULT OnMouseHover(WPARAM WPARAM,LPARAM LPARAM);

  添加到CPP:

  BEGIN_MESSAGE_MAP(CEditEx,CEdit)

  ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)

  ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)

  ON_WM_MOUSEMOVE()

  END_MESSAGE_MAP()

  注意:ON_WM_MOUSEMOVE()可以使用类向导添加,但是OnMouseLeave和OnMouseHover需要手动添加。

  然后在CPP中定义:

  void CEditEx:OnMouseMove(UINT nFlags,CPoint)

  {

  如果(!m_bHover)

  {

  TRACKMOUSEEVENT tme

  tme . CB size=sizeof(tme);

  tme.hwndTrack=m _ hWnd

  tme . dw flags=TME _离开 TME _哈弗;

  tme . dwhover time=1;

  m _ BH over=_ track mouse event(tme);//m _ BH over:bool类型的成员变量

  }

  CEdit:OnMouseMove(nFlags,point);

  }

  LRESULT CEditEx:OnMouseLeave(WPARAM WPARAM,LPARAM lParam)

  {

  m _ bHover=false

  //

  做相应的操作。

  //

  返回0;

  }

  LRESULT CEditEx:OnMouseHover(WPARAM WPARAM,LPARAM lParam)

  {

  //

  做相应的操作。

  //

  返回0;

  }

  大多数控件都可以使用这种方法,但是有些控件可能需要你在OnMouseMove中完全模拟悬停和离开,比如程序中的TabCtrl。

  4).我把之前看过的帖子整理了一下,供大家参考(很多帖子由于时间太久已经忘记了):

  自画进度条:http://www.codeproject.com/kb/miscctrl/cprogresstrlst.aspx(附项目源代码)

  透明控件(多控件)实现:http://www.codeguru.com/CPP/controls/buttonctrl/advanced按钮/article . PHP/c 15603/general-solution-for-a-transparent-control . htm(附项目源代码)

  透明窗体:3358msdn.microsoft.com/en-us/library/ms997507(菜单、窗体、Combobox都可以引用这个方法实现任何透明,我也引用这个方法)

  不规则按钮的实现:http://www.codeguru.com/CPP/controls/buttonctrl/non-rectangular按钮/article . PHP/c 2085/universal-button-beauty-of-hrgn . htm

  自画按钮2贴:

  http://www.vckbase.com/document/viewdoc/?id=551

  http://www.vckbase.com/document/viewdoc/?id=561

  自定义绘制和业主绘制的区别(都是英文的,但是如果你看了,对你画出自己的想法很有帮助,有时间可以翻译给我们看):

  http://blog..net/xiexievv/article/details/6279219

  WM_DRAWITEM和DRAWITEM()的讨论对控制自绘很有帮助:

  http://blog..net/xiexievv/article/details/6259194

  仔细阅读下面的帖子会有意想不到的收获,不仅仅是自画控件,我们对MFC的整体理解也会提升一个层次。

  MFC中OnDraw和OnPaint的区别:

  http://blog..net/xiexievv/article/details/6271153

  深层消息反射机制分析:

  http://blog..net/xiexievv/article/details/6282205

  预传输消息和翻译信息区别:

  http://blog..net/xiexievv/article/details/6299027

  窗口进程和执行内定的消息处理的区别:

  http://blog..net/xiexievv/article/details/6299016

  拥塞窗口中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别:

  http://blog..net/xiexievv/article/details/6233423

  同时推荐几个很好的学习网站:

  http://www.codeproject.com(英文)

  http://www.codeguru.com(英文)

  http://www.pudn.com

  http://www.vckbase.com/document/index.asp

  就写这么多吧,个人觉得最有用的资料还是微软官方当然还有强大CSDN,每个控件的自绘都不是固定有规律可循的,不要硬搬乱套,要活学活用。也许你现在才开始学,完全看不懂,没关系大家都是那么过来的啦。

  来自:http://博客。。net/xiexiyvv/article/details/6598696

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: