基于对话框的简单双缓冲绘图框架

本文介绍了一个基于对话框的简单双缓冲绘图框架,通过C++实现,允许在对话框上进行平滑绘图,避免了非双缓冲绘图时的闪烁问题。详细代码展示了如何处理鼠标事件,绘制直线,并利用GDI+填充线性渐变画刷。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

作者:朱金灿
来源:http://blog.csdn.net/clever101/


     基于文档视图结构程序的双缓冲绘图框架比较多,那么如何在对话框上绘图呢?以前通常的做法是拖一个静态文本控件或其它控件当作绘图区域或者在这个区域上创建一个视图出来。看了微软的一个示例程序DrawCli(一个绘图的单文档程序),产生了一些灵感,决心把它移植到对话框绘图上,摸索了一下,搞了一个基于对话框的简单双缓冲绘图框架。


     具体代码如下,对话框头文件代码:


    

  1. #include <vector>  
  2. //@brief 直线结构体  
  3. struct stLine  
  4. {  
  5.     stLine(CPoint &Begin,CPoint &End)  
  6.     {  
  7.         m_Begin = Begin;  
  8.         m_End = End;  
  9.     }  
  10.     //@brief 起点  
  11.     CPoint m_Begin;  
  12.     //@brief 终点  
  13.     CPoint m_End;  
  14. };  
  15. class CDoubleBufDrawDlg : public CDialog  
  16. {  
  17.     DECLARE_DYNAMIC(CDoubleBufDrawDlg)  
  18. public:  
  19.     CDoubleBufDrawDlg(CWnd* pParent = NULL);   // 标准构造函数  
  20.     virtual ~CDoubleBufDrawDlg();  
  21. // 对话框数据  
  22.     enum { IDD = IDD_DIALOG_GDIPLUS };  
  23. protected:  
  24.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持  
  25.     DECLARE_MESSAGE_MAP()  
  26. public:  
  27.     virtual BOOL OnInitDialog();  
  28.     afx_msg void OnBnClickedDrawPoint();  
  29.     afx_msg void OnBnClickedDrawLine();  
  30.     afx_msg void OnSize(UINT nType, int cx, int cy);  
  31.     void AdjustControls();  
  32.     afx_msg void OnPaint();  
  33. protected:  
  34.     //   
  35.     void InitDrawPara();  
  36. protected:  
  37.     //@brief 上一个点  
  38.     CPoint m_PrePt;  
  39.     //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值