本文简要讲解在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. Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件

    目标:实现EditText和Button组合成带有清空EditText内容功能的复合控件,可以通过代码设置自定义控件的相关属性. 实现效果为: (1)在res/layout目录下编写自定义组合控件的布 ...

  2. 在VS2010/MFC中如何对对话框添加控件

    创建对话框资源需要创建对话框模板.修改对话框属性.为对话框添加各种控件等步骤.而如何为对话框添加控件直接影响到界面的美观和开发人员的工作效率.本人将为大家介绍如何为对话框添加控件的详细步骤. 方法/步 ...

  3. VS2010 自定义用户控件未出现在工具箱的解决方案

    VS2010 自定义用户控件未出现在工具箱的解决方案 参考文章: (1)VS2010 自定义用户控件未出现在工具箱的解决方案 (2)https://www.cnblogs.com/lyout/arch ...

  4. Leaflet中实现添加比例尺控件与自定义版权控件与链接

    场景 Leaflet快速入门与加载OSM显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880 上面加载显示 ...

  5. ASP.NET中实现复用代码自定义用户控件UserControl的使用

    场景 ASP.NET中新建Web网站并部署到IIS上(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199 ...

  6. MFC中如何让一个CStatic控件响应消息

    在MFC中有时需要自己Create控件,如何写一个可以响应消息的控件呢,例如:CStatic 如下: CStatic test; test.Create("my static",  ...

  7. [原创]在ObjectDataSource中使用自定义Web控件提供查询参数

    微软的东西就是好用,不过各种细小问题也是不少的. 比如,在ObjectDataSourc中设定选择查询时,如果是带有参数的查询,则会弹出定义参数对话框. 这个对话框里可以选择用于查询的参数来源,如果是 ...

  8. mfc中在vector里添加控件类型的数据时出现C2248错误

    @mfc中在vector里添加控件类型的数据时出现C2248错误 这是我在.h文件中定义的2个容器 public:vector<CComboBox*> cbx;vector <CSt ...

  9. 安卓中自定义view控件代替radiogroup实现颜色渐变效果的写法

    利用自定义控件代替radiogroup,同时实现在使用viewpager进行翻页的时候,实现颜色渐变的效果. 一: 首先创建一个自定义view类继承自View类,所有的控件均用canvas绘制出来(包 ...

最新文章

  1. 零基础学汇编 --小甲鱼
  2. Nginx中worker_connections的问题
  3. eclipse 切换svn账号
  4. 华为机试题1:计算字符串最后一个单词的长度,单词以空格隔开。
  5. 【dfs】P1036 选数
  6. VUE初长成【部分小记】
  7. ELK三件套安装实践之路(1)
  8. Tomcat 8.5——配置阿里云免费SSL证书(PFX格式证书)[启用HTTPS协议]
  9. 如何确定VS编译器版本--_MSC_VER || #if _MSC_VER 1000 #pragma once #endif
  10. 31天重构学习笔记17. 提取父类
  11. iText导出pdf、word、图片
  12. 基于微型计算机系统的报警器设计,防盗报警器的设计毕业设计分析.doc
  13. 晒晒我的“无法操作”的“发财计划”
  14. 石家庄IT培训业转型要诀:出品,用户,服务
  15. 6-2 返回月份的英文全称(日历) (10分) java pta
  16. 解决FTP文件访问需要输入用户名和密码的问题
  17. 显卡用电测试软件,自己动手DIY!教你如何实测显卡电压
  18. python实现胶囊网络_深度学习精要之CapsuleNets理论与实践(附Python代码)
  19. (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)
  20. GIS数据源简单总结

热门文章

  1. dll注入工具_UnmanagedPowerShell工具分析
  2. 无法通过sak判断卡片类型_不同类型人脸识别闸机展示
  3. python学习-模块和包
  4. python学习-递归(阶乘、汉诺塔)
  5. cmd修改服务器命令,修改服务器的ip地址的命令行
  6. php购票排位_用PHP+MySQL实现12306购票和退票以及余票查询逻辑
  7. java开发环境安装原理,java开发环境搭建 java开发环境的完整搭建过程
  8. 清除string内容_python爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来...
  9. 骚操作!用铁丝做“电路”,不服不行!
  10. 在C语言中malloc怎么声明,问下关于malloc的声明问题