VC++ 自定义控件的建立及使用方法

一、VC++定义自定义控件与delphi,VB有些差异。

delphi,vb在 file-new-other中建立。vc++在工具栏中就有自定义控件,但必须加入控件类型

许多书籍都在类向导中建立。我这里介绍的是手动建立,其结果是一样的。
二.建立过自定义控件类型:
   2.1、把工具栏上的自定义控件放入对话框中
   2.2、建立Mycontrol.h, Mycontrol.cpp文件
   2.3、Mycontrol.h中的定义是

#ifndef __MYCTROLTRL_H__
    #define __MYCTROLTRL_H__
    #define MYWNDCLASS "mycontrol"
    #include <afxtempl.h>
    class CMycontrol: public CWnd
    {
     private:
     public:
     static BOOL RegisterWndClass();
     CMycontrol();
     void customfun();//一个自定义方法
     };
   #endif

2.4 Mycontrol.cpp中的实现部分

#include "StdAfx.h"
   #include "mycontrol.h"
   CMycontrol::CMycontrol()
    {
 CMycontrol::RegisterWndClass();
    }
    //注册控件RegisterWndClass格式是固定的不要记忆没有那个必要直接拷贝粘贴就可以。
   CMycontrol::RegisterWndClass()
   {
   WNDCLASS windowclass;
    HINSTANCE hInst = AfxGetInstanceHandle();
    //Check weather the class is registerd already
    if (!(::GetClassInfo(hInst, MYWNDCLASS, &windowclass)))
    {
        //If not then we have to register the new class
        windowclass.style = CS_DBLCLKS;// | CS_HREDRAW | CS_VREDRAW;
        windowclass.lpfnWndProc = ::DefWindowProc;
        windowclass.cbClsExtra = windowclass.cbWndExtra = 0;
        windowclass.hInstance = hInst;
        windowclass.hIcon = NULL;
        windowclass.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
        windowclass.hbrBackground = ::GetSysColorBrush(COLOR_WINDOW);
        windowclass.lpszMenuName = NULL;
        windowclass.lpszClassName = MYWNDCLASS;
        if (!AfxRegisterClass(&windowclass))
        {
            AfxThrowResourceException();
            return FALSE;
        }
    }
    return TRUE;
  }
 //自定义方法
  void CMycontrol::customfun()
  {
  AfxMessageBox(_T("my control!"));
 }

三、使用自定义控件
    3.1.在类向导中绑定自定义控件时你是找不到刚才你定义的类型的,所以我采用手动加入代码方法。
    3.2.在对话框.h文件中手动加入:public: CMycontrol m_mycontrol;
    3.3.在对话框.cpp文件中手动加入:DDX_Control(pDX,IDC_CUSTOM1,m_mycontrol);
    3.4.在对话框中加入Button 在点击事件中加入测试代码:

void CCustomcontrolDlg::OnButton1()
    {
 // TODO: Add your control notification handler code here
      m_mycontrol.customfun();
  }

四、编译运行vc++自定义控件的对话框窗体.编译成功但运行什么也不显示的解决

右键自定义控件->属性->类型中填写"mycontrol"再次允许OK!

到此VC++自定义控件就全部介绍完毕,你可以在类型中加入你要实现的方法。

时间: 2024-11-26 02:42:46

VC++ 自定义控件的建立及使用方法的相关文章

用VC实现竖写汉字的方法

中国人自古就有自右至左.从上到下书写汉字的习惯.而当我们在自己所编写的应用程序中使用输出函数输出的总是自左至右的横排文字.有没有可能在我们的应用程序中实现竖写汉字的效果呢?笔者偶然发现了一种利用VC实现竖写汉字效果的方法,现在就把它介绍给大家.  Windows系统内置了许多名称以"@"开头的字集,这些字集有一个共同的特点,即其所包含的文字全都是平躺着的(字头朝左,字底朝右).如果我们能将这些字逆时针旋转270度后再显示出来,就可以达到实现竖写汉字效果的目的了.  要使文字发生旋转,我

VB.NET 章鱼哥 自定义控件的建立和使用

VB..NET 是支持用户自定义控件的,这个方法特别好用.当然如果想建成比较复杂的控件还需要很多知识,本文只是演示一遍如何建立简单的自定义控件,以及如何在新的项目中引用这个控件(就像标准控件一样拖动) 章鱼哥 QQ 3107073263 群 30981613 ㈠新建一个Windows 窗体控件库,命名为"自定义控件1" ㈡ 向空白的控件中拖放标准控件(这里拖放了CheckBox和TextBox控件,更改了控件的背景色) ㈢ 向控件添加代码(这里是一个非常简单的例子,当选中CheckBo

vc++加载透明png图片方法——GDI+和CImage两种

vc++加载透明png图片方法——GDI+和CImage两种 在加载png时遇到了麻烦,后来用了两个方法解决了.一个是用GDI+,另外就是用vs.net MFC自带的CImage. 先看看GDI+的方法 方法1: 1.GDI+画透明图层(alpha)的png图片 stdafx加入如下: #include <comdef.h>//初始化一下com口 #include "GdiPlus.h" using namespace Gdiplus; #pragma comment(li

vc++ 编译连接错误and解决方法

1. LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol [email protected] Debug/lizi.exe : [分析]: 项目创建错误,因该选择Win32 Console Project,而不是 Win32 Projectvc++ 编译连接错误and解决方法,布布扣,bubuko.com

win2008r2的iis7.5手动建站方法,iis7.5中用独立用户建立网站的方法,提高网站安全性

win2003的iis6手动建站方法,iis6中用独立用户建立网站的方法,提高网站安全性,我们前面的教程有说明,请看http://www.piis.cn/zhishi/web574.asp 现在我们说下在WIN2008R2环境中IIS7.5中手动建立网站并设置网站安全的方法: 设置以上身份验证后,部分服务器可能会出现问题(主要是服务器环境配置或安全设置引起的),使得网站打不开,或提示“未能解密属性“password”,因为密钥集不存在”,那么这个时候我们就要将匿名用户标识从“特定用户”修改为“应

Eclipse中Android公共库的正确建立及调用方法(转)

转自http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享出来. 建立公共库 首先建立公共库的Android项目,名为MyCoreLib: 完成后在左侧包浏览器里右键点选我们新建的这个项目,选择Properties项: 左侧选择Android分类,右侧勾选Is Library选项: 完成后在

VC开发多语言界面 多种方法(很简单) 有源码

(需源码先留邮箱)先上图 1.通过遍历 得到所有控件ID号与TEXT,得到一个中文语言配置文件 void CVV_485Dlg::getCaptionForWindow() //做程序时用,其它时间不用 { //枚举对话框中所有组件 CWnd *pCtrl = GetWindow(GW_CHILD); while(pCtrl!=NULL) { UINT ctrlID = pCtrl->GetDlgCtrlID(); // setControlCaption(pCtrl,ctrlID); CStr

MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便

先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MVC页面都可用)建立好扩展方法后,使用以下语句就可以生成上面的效果: @Html.CreateGanderRadioButton() 扩展方法的定义: namespace Web.Helper { public static class ExtendHtml { public static MvcHt

VC++获取IDC_EDIT的7种方法

VC++获取IDC_EDIT的7种方法 http://blog.csdn.net/baizengfei/article/details/7997618 //第一种方法 int number1, number2, number3; char char1[10], char2[10], char3[10]; GetDlgItem(IDC_EDIT1)->GetWindowText(cahr1, 10); GetDlgITem(IDC_EDIT2)->GetWindowText(char2, 10)