本文简要讲解在VS2010中怎样实现自定义MFC控件的知识,以下是分步骤说明。

一、自定义一个空白控件

 1、先创建一个MFC工程

NEW Project-->MFC-->MFC Application-->name:  “CustomCtr”-->Application Type选择“Dialog based”。

 2、在窗口中添加一个自定义控件

Toolbox-->“Custom Control”-->属性-->class随便填写一个控件类名“CMyWin”, 这个名字用于以后注册控件用的,注册函数为RegisterWindowClass()。

3、创建一个类

在窗口中,右击custom control 控件-->ClassWizard-->ClassWizard-->Add Class-->类名CMyTest(以C开头)-->Base class:CWnd。

4、注册自定义控件MyWin

在MyTest类.h文件中声明注册函数BOOL   RegisterWindowClass(HINSTANCE hInstance = NULL)。

C++代码
  1. BOOL CMyTest::RegisterWindowClass(HINSTANCE hInstance)
  2. {
  3. LPCWSTR className = L"CMyWin";//"CMyWin"控件类的名字
  4. WNDCLASS windowclass;
  5. if(hInstance)
  6. hInstance = AfxGetInstanceHandle();
  7. if (!(::GetClassInfo(hInstance, className, &windowclass)))
  8. {
  9. windowclass.style = CS_DBLCLKS;
  10. windowclass.lpfnWndProc = ::DefWindowProc;
  11. windowclass.cbClsExtra = windowclass.cbWndExtra = 0;
  12. windowclass.hInstance = hInstance;
  13. windowclass.hIcon = NULL;
  14. windowclass.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
  15. windowclass.hbrBackground=\'#\'" >
  16. windowclass.lpszMenuName = NULL;
  17. windowclass.lpszClassName = className;
  18. if (!AfxRegisterClass(&windowclass))
  19. {
  20. AfxThrowResourceException();
  21. return FALSE;
  22. }
  23. }
  24. return TRUE;
  25. }

5、在MyTest类的构造器中调用 RegisterWindowClass()。

C++代码
  1. CMyTest::CMyTest()
  2. {
  3. RegisterWindowClass();
  4. }

 6、控件与对话框数据交换

在CustomCtrDlg.h中定义一个变量:

CMyTest    m_draw;

在对话框类的CustomCtrDlg.cpp的DoDataExchange函数中添加DDX_Control(pDX,IDC_CUSTOM1,m_draw)。

C++代码
  1. void CCustomCtrDlg::DoDataExchange(CDataExchange* pDX)
  2. {
  3. CDialogEx::DoDataExchange(pDX);
  4. DDX_Control(pDX,IDC_CUSTOM1,m_draw);
  5. }

以上是自定义一个空白控件。
 
       二、在控件上绘图

1、在CMyTest类中添加一个绘图消息

在VS2010最左侧Class View中右击CMyTest类-->ClassWizard-->Messages-->WM_PAINT-->双击,开发环境自动添加OnPaint()函数及消息队列。

 2、编写OnPaint()函数

例如:画一条直线

C++代码
  1. void CMykk::OnPaint()
  2. {
  3. CPaintDC dc(this); // device context for painting
  4. // TODO: Add your message handler code here
  5. // Do not call CWnd::OnPaint() for painting messages
  6. CRect rect;
  7. this->GetClientRect(rect);
  8. dc.MoveTo(0,0);
  9. dc.LineTo(rect.right,rect.bottom);
  10. }

来自:http://6208051.blog.51cto.com/6198051/1058634

转自:http://www.jizhuomi.com/software/181.html

VS2010中如何实现自定义MFC控件的更多相关文章

  1. 设置VS2010中自带的ActiveX控件测试容器TstCon

    ActiveX控件:可以看做一个极小的服务器应用程序,他不能单独运行,需要嵌入到某个程序中才可以运行,我们可以自己写一个程序来测试自己写的程序(具体方法在下一篇文章阐述),第二种方法是利用VS(本人编 ...

  2. asp.net中自定义验证控件

    在windows2003中,可能iis版本太底,不支持TextBox的类型设为Number类型,所以会报错,所以去掉后直接用验证控件来控制必须输入数字好了. <asp:RegularExpres ...

  3. Android中自定义组合控件

    Android中自定义控件的情况非常多,一般自定义控件可以分为两种:继承控件及组合控件.前者是通过继承View或其子类,重写方法实现自定义的显示及事件处理方式:后者是通过组合已有的控件,来实现结构的简 ...

  4. Android中自定义IP控件

    最近在搞Android项目,之前并没有系统的去学过这方面的编程,只能边看书边撸代码.在项目的开发的过程中,需要一个IP控件,后面了解到Android中并没有这样的控件,于是网上搜索,发现得到的结果并不 ...

  5. 安卓自定义组合控件--toolbar

    最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...

  6. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  7. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  8. C# DataGridView自定义分页控件

    好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...

  9. MFC控件的SubclassDlgItem

    MFC控件的SubclassDlgItem 要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派 ...

随机推荐

  1. VI 你不知道的事

    1G 顶部 G 底部 ctrl+F 前进 ctrl+B 后退 /text   向前搜索 ?text 向后搜索 I i 插入字符串 a 光标后插入字符 A 跳到句末尾 wq 写入并退出 h k j l ...

  2. 剖析Elasticsearch集群系列之一:Elasticsearch的存储模型和读写操作

    转载:http://www.infoq.com/cn/articles/analysis-of-elasticsearch-cluster-part01 1.辨析Elasticsearch的索引与Lu ...

  3. [通信] C# TCP实现多个客户端与服务端 数据 与 文件的传输

    说明: http://download.csdn.net/detail/chwei_cson/4423874 源码: http://download.csdn.net/download/meicanj ...

  4. SAP全球企业官孙小群的生活智慧

    转自:http://www.programmer.com.cn/15373/ 一下为程序员杂志对孙小群(Xiaoqun Clever)的采访. 最早接触计算机是在高中,那时发现通过一个小小的Basic ...

  5. jQuery生成一个DIV容器,ID是"rating".

    我们需要一些服务器端代码,这个例子中用到了一个PHP文件,读取rating参数然后返回rating总数和平均数.看一下rate.php代码.虽然这些例子也可以不使用AJAX来实现,但显示我们不会那么做 ...

  6. ELK之filebate收集日志传递至Logstash

    软件版本查看(版本最好一致) 安装过程不详叙 本次使用filebeat监控nginx日志(已经配置json输出)收集并且传递给Logstash进行处理 filebeat配置文件/etc/filebea ...

  7. IE 兼容一问题一小记

    记录一下上一周做的一个门户网站!因为兼容问题折腾了我一天时间,今天有空了就把其中坑记录一下! 1.轮换效果不能显示出1.2.3... (ie7不行,大于ie7的可以),原因就是因为,js对象的最一个个 ...

  8. 完整的Jquery-easyUI显示分页数据例子

    虽然说是入门的例子,但本人尽量做的详细点,以后会继续更新,部分功能 此外,为了后继easyui的学习,做了一个简单的框架:后台采用hibernate2.5+struts2开发:数据库用mysql.红色 ...

  9. Hive之import和export使用详解

    在hive-0.8.0后引入了import/export命令. Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置,并且导出数据可以被移动到另一个hadoop集群或hive实例,并且 ...

  10. Arrow-一个最好用的日期时间Python处理库

    https://www.jianshu.com/p/c878bb1c48c1 写过Python程序的人大都知道,Python日期和时间的处理非常繁琐和麻烦,主要有以下几个问题: 有众多的package ...