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++自定义控件就全部介绍完毕,你可以在类型中加入你要实现的方法。

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • 解析C#自定义控件的制作与使用实例的详解

    上篇:控件制作本例是制作一个简单的自定义控件,然后用一个简单的测试程序,对于初学者来说,本例子比较简单,只能起到抛石引玉的效果.我也是在学习当中,今后会将自己所学的逐步写出来和大家交流共享.第一步:新建一个控件库项目:myControl 第二步:从工具箱里面拖动1个PictureBox.1个Button.6个Lable控件到用户界面上,布局如下: 如上图,设置pictureBox的Name为picBox,背景为白色,Button的Name为btnOpen,另外靠左的三个Lable的Text属性分

  • asp.net自定义控件中注册Javascript问题解决方案

    复制代码 代码如下: protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); RenderJS(); } private void RenderJS() { if (!Page.ClientScript.IsClientScriptBlockRegistered(SCRIPT_ID))//如果还没有注册语句,则注册 { Page.ClientScript.RegisterClientScriptBlock(t

  • Android中自定义控件的declare-styleable属性重用方案

    最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个文件中,发现属性冗余,于是就想有没有类似属性继承或者include之类的方法.本文将就declare-stylable中属性重用记录一下. 不完美的代码 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <resources>     

  • android开发教程之自定义控件checkbox的样式示例

    主界面xml文件 复制代码 代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_p

  • C++ 自定义控件的移植问题

    方法很简单就是将需要的代码 复制到 新系统中就可以了,方法就是 把相关文件添加到现有的系统中,并特别注意以下问题 1\如果原设计中用到了菜单或是其它资源,相应的资源要在新的菜单中,手动添加. 目前没有发现其它好办法 2\如果有些资源名称重复的话,还需要少量的修改 源代码 3\对于无法识别到新的资源文件,可以在 源文件中添加 #include "resource.h" 4\对于新系统中,需要添加 源代码对应的 头文件 5\在新系统中,添加一个 Custom Control 控件,并将控件

  • 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

  • VC创建圆角dialog的实现方法

    本文实例讲述了VC创建圆角dialog的实现方法.分享给大家供大家参考,具体如下: 我们有时候需要圆角的对话框,要实现这样的效果,一般包括两步工作,第一步:将原有对话框的直角裁剪掉,第二步:为对话框画上圆角或者为对话框贴上一个圆角的图片. 第一步:我们在OnCreate函数中来实现,代码量也不多. int CTestDialog::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) ==

  • C#自定义控件添加右键菜单的方法

    C#自定义控件添加右键菜单非常简单,主要用到控件,像control定义右键菜单,用items.add()叠加右键菜单内容,用click事件处理函数. 1.control是要定义右键菜单的控件. private void control_MouseDown(object sender, MouseEventArgs e) {    if (e.Button == MouseButtons.Right)    {        ContextMenu menu = new rightClickMen

  • Python编程实现删除VC临时文件及Debug目录的方法

    本文实例讲述了Python编程实现删除VC临时文件及Debug目录的方法.分享给大家供大家参考,具体如下: # *_* coding=gb2312 *-* import os import os.path import shutil invalidFileExtList =[".ncb",".user"] invalidDirectory=["Debug"] def InternalDeleteInvalidFile(str): bFlag=Fa

  • VC++实现添加文件关联的方法示例

    本文实例讲述了VC++实现添加文件关联的方法.分享给大家供大家参考,具体如下: // 检测文件关联情况 // strExt: 要检测的扩展名(例如: ".txt") // strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile") // 返回TRUE: 表示已关联,FALSE: 表示未关联 BOOL CheckFileRelation(const char *strExt, const char *strAppKey) { int nR

  • VC调用javascript的几种方法(推荐)

    第一种:通过execScript调用.这种方法,虽然操作方便,但不能获取返回值. m_spHtmlDoc->get_parentWindow(&m_pHtmlWindow); VARIANT ret; ret.vt = VT_EMPTY; BSTR bstr = sScript.AllocSysString(); bRet = m_pHtmlWindow->execScript(bstr, L"javascript", &ret); ::SysFreeStr

  • Android编程基于自定义控件实现时钟功能的方法

    本文实例讲述了Android编程基于自定义控件实现时钟功能的方法.分享给大家供大家参考,具体如下: 在学习安卓群英传自定义控件章节的时候,有一个例子是绘制时钟,在实现了书上的例子后就想看这个时钟能不能动起来. 这里选择延迟一秒发送消息重绘view来实现的动画,对外提供了开启时钟,关闭时钟的方法,当activity执行onResume方法的时候,执行startClock()方法,当移除view或activity执行onStop方法的时候可以执行stopClock()方法. 首先根据view的宽高来

  • Docker动态添加端口不需要重新建立镜像的方法

    Docker容器在运行期间有时可能会需要修改或者添加暴露的端口,但是有时候运行的容器又不想再另外建立一个新的镜像.这时可以找到docker容器的存放地方,然后直接修改配置文件. 我们的容器都是保存在/var/lib/docker/containers下面. 我的容器是在/var/lib/docker/containers/797f3d0cb82aec7d1c355c7461b5bc5a050c1c0cbbe5d813ede0edad061e6632 每个容器ID对应一个hash_id,可以看到n

  • PHP实现单例模式建立数据库连接的方法分析

    本文实例讲述了PHP实现单例模式建立数据库连接的方法.分享给大家供大家参考,具体如下: 理解php单例模式 一.什么是单例 wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式. 在应用这个模式时,单例对象的类必须保证只有一个实例存在. 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为. 二.为什么用单例 实际项目中像数据库查询,日志输出,全局回调,统一校验等模块.这些模块功能单一,但需要多次访问,如果能够全局唯一,多次复用会大大提升性能.这也就是单例存在的必

  • android studio使用SQLiteOpenHelper()建立数据库的方法

    在android studio中存储数据有三个方法,分别是: (1)简单存储--SharedPreferences (2)文件存储:内部存储--应用程序私有文件外部存储--SD卡资源文件--只读( RAW .XML) (3)数据库存储--SQLiteDataBase 今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenH elper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功

随机推荐