如何在其他类中实现继承自CFormView类的对象
今天项目开发中,我们创建了一个对话框资源,并创建了一个派生自CFormView的类(假设为CMyClassDlg)来管理它。
CMyClassDlg.h
#pragma once
// CMyClassDlg 窗体视图 class CMyClassDlg : public CFormView
{
DECLARE_DYNCREATE(CMyClassDlg) protected:
CMyClassDlg(); // 动态创建所使用的受保护的构造函数
virtual ~CMyClassDlg(); public:
enum { IDD = IDD_TASK_DLG };
#ifdef _DEBUG
virtual void AssertValid() const;
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc) const;
#endif
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
};
CMyClassDlg.cpp
// MyClassDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Test.h"
#include "MyClassDlg.h" // CMyClassDlg
IMPLEMENT_DYNCREATE(CMyClassDlg, CFormView) CMyClassDlg::CMyClassDlg()
: CFormView(CMyClassDlg::IDD)
{
} CMyClassDlg::~CMyClassDlg()
{
} void CMyClassDlg::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
} BEGIN_MESSAGE_MAP(CMyClassDlg, CFormView)
END_MESSAGE_MAP() // CMyClassDlg 诊断
#ifdef _DEBUG
void CMyClassDlg::AssertValid() const
{
CFormView::AssertValid();
} #ifndef _WIN32_WCE
void CMyClassDlg::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG // CMyClassDlg 消息处理程序
问题:如何在其他类中使用CMyClassDlg对象?
由于CFormView的构造函数和析构函数都是保护类型的,故在其他类中是无法访问的,导致无法直接在其他类中声明CMyClass的对象。
如何破?-->(两种方案)
方案一:
在CMyClassDlg类的头文件中声明其他类为友元类。
方案二:
1.在其他类的头文件中声明CMyClass类的指针,如:
CMyClassDlg *m_pMyClassDlg;
2.在其他类的构造函数中,添加如下代码:
m_pMyClassDlg = (CMyClassDlg*)(RUNTIME_CLASS(CMyClassDlg)->CreateObject());//最重要的地方
3.在其他类的OnCreate函数中,添加如下代码:
CRECT rect;
GetClientRect(&rect);
m_pMyClassDlg->Create(NULL, "Option window", WS_CHILD|WS_VISIBLE, rect, this, , NULL);//重要的地方
4.因为第3步调用到了CMyClassDlg的Create函数,这个函数是继承CFormView类的,在CFormView中它是保护类型,为了可以访问它,我们要在CMyClassDlg中重载它,类型为公开类型。
如何在其他类中实现继承自CFormView类的对象的更多相关文章
- IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图)
IntelliJ IDEA 中如何查看一个类的所有继承关系(当前类的所有继承关系图) .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...
- 当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?
当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...
- 【python】-- 类的多继承、经典类、新式类
继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了 ...
- YTU 2618: B 求类中数据成员的最大值-类模板
2618: B 求类中数据成员的最大值-类模板 时间限制: 1 Sec 内存限制: 128 MB 提交: 430 解决: 300 题目描述 声明一个类模板,类模板中有三个相同类型的数据成员,有一函 ...
- 对Integer类中的私有IntegerCache缓存类的一点记录
对Integer类中的私有IntegerCache缓存类的一点记录 // Integer类有内部缓存,存贮着-128 到 127. // 所以,每个使用这些数字的变量都指向同一个缓存数据 // 因此可 ...
- 在JBPM的Handle类中调用Spring管理的类
我们在使用JBPM定义流程的时候经常要在流程定义文件中加入一个继承xxxHandler的类来实现我们的业务逻辑判断或者其他的需求,在这个类中一般都是用Spring的Application来获取,而这种 ...
- Code First:如何实现一个主类中包含多个复类
假设我们在程序中要用到的类的结构是这样的,这里比较特别的是B在A中出现了最少两次 public class B { [Key] public int Id { get; set; } public s ...
- String类中"=="、equals和普通类中"=="、equals的比较
package cn.method.demo; public class StringDemo2 { public static void main(String[] args) { String s ...
- C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
随机推荐
- docker 创建镜像
docker:/root# docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official bui ...
- ant jsch.jar - 一个错误及解决办法
ant jsch.jar -- 一个异常及解决方法 运行build.xml出现异常: Cause: Could not load a dependent class com/jcraft/jsch/L ...
- STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法
1 统计vector向量中指定元素出现的次数:count()算法 利用STL通用算法统计vector向量中某个元素出现的次数:count()算法统计等于某个值的对象的个数. #include &quo ...
- UI线程与worker线程
也谈谈我对UI线程和worker线程的理解 UI线程又叫界面线程,能够响应操作系统的特定消息,包括界面消息.鼠标键盘消息.自定义消息等,是在普通的worker线程基础上加上消息循环来实现的,在这个消息 ...
- Android应用中使用百度地图API定位自己的位置(二)
官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发人员们提供了例如以下类型的地图覆盖物: ...
- uva 10453 - Make Palindrome(dp)
题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...
- jcenter那些事儿
jcenter是一个server托管在bintray.com的maven仓库. in project's build.gradle file allprojects { repositories { ...
- 下载安装tomcat6.0
tomcat的安装 1.先下载tomcat,到http://tomcat.apache.org/ 2.注意,下载可以下载zip格式或exe格式的,其中zip格式的只要解压缩再配置下环境变量就可以使 ...
- 《think in python》学习-3
函数 函数是指用于进行某种计算的一系列语句的有名称的组合. type(32) 就是一个函数调用的例子 类型转换函数 python提供了一些可将某个值从一种类型转换为另外一个类型的内置函数 int(32 ...
- 使用logstash收集日志的可靠性验证
实时计算里,需要对日志实时收集,logstash可以做到.目前的版本是1.4.2,官方文档在http://www.logstash.net/docs/1.4.2/,里面有详细的配置说明,使用也很简单. ...