MFC--不允许使用继承成员问题解决方案(待补充)_不允许使用继承成员什么意思-程序员宅基地

技术标签: MFC  

最近在操作中遇到了在MFC中添加成员函数的要求,但是却出现提示“不允许使用继承成员”

附上源代码及编译结果:

<pre name="code" class="cpp">// dianjiDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "dianji.h"
#include "dianjiDlg.h"
#include "afxdialogex.h"
#include "LTSMC.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();
	

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CdianjiDlg 对话框



CdianjiDlg::CdianjiDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CdianjiDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CdianjiDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CdianjiDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()


// CdianjiDlg 消息处理程序

BOOL CdianjiDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
	smc_board_init(0,0,"COM1",115200);

	// TODO: 在此添加额外的初始化代码

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CdianjiDlg::OnCancel()
{
	CDialog::OnCancel();
	smc_board_close(0);
}

void CdianjiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CdianjiDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CdianjiDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
<pre name="code" class="cpp">这是定义的函数:
void CdianjiDlg::OnCancel()
{
	CDialog::OnCancel();
	smc_board_close(0);
}





编译结果:

那么,我在程序中仔细找到问题所在:

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();
	
中并未定义OnCance.打开基类CdianjiDlg并定义此成员函数:

class CdianjiDlg : public CDialogEx
{
// 构造
public:
	CdianjiDlg(CWnd* pParent = NULL);	// 标准构造函数
	void CdianjiDlg::OnCancel()

// 对话框数据
	enum { IDD = IDD_DIANJI_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
从而解决这个问题。其实使用虚函数也可以解决此类问题。

从此例中我们探讨一个问题:派生类使用基类成员(继承)与虚函数的关系。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/samkieth/article/details/49683239

智能推荐

jQuery 效果 – 淡入淡出_在jquery中,如果希望实现元素淡出效果应调用的方法是-程序员宅基地

文章浏览阅读167次。在jQuery中可以通过四个方法来实现元素的淡入淡出,这四个方法分别是fadeIn()、fadeOut()、fadeToggle()以及fadeTo(),本文通过实例来为你讲解如何在jQuery中使用这四个方法。_在jquery中,如果希望实现元素淡出效果应调用的方法是

【ArcGIS Pro微课1000例】0057:未安装所需的Microsoft驱动程序_arcgispro未安装所需的microsoft驱动程度-程序员宅基地

文章浏览阅读498次,点赞2次,收藏2次。这是因为要在 ArcGIS Pro 中使用 Excel 文件,必须从Microsoft 下载中心 下载并安装 Microsoft Access Database Engine 2016 Redistributable。如果你使用的是 ArcGIS Pro 2.5 或更高版本,请选择与您当前安装的 Microsoft 应用程序匹配的下载。如果你使用的是 ArcGIS Pro 2.4,请选择 32 位驱动程序下载。在选择输入表时,可能会提示未安装所需的 Microsoft 驱动程序。_arcgispro未安装所需的microsoft驱动程度

XSS CSRF SQL注入 URL跳转漏洞 点击劫持 web安全_挑战url劫持-程序员宅基地

文章浏览阅读1k次,点赞13次,收藏26次。CSRF,XSS,SQL注入,URL跳转漏洞,点击挟持等WEB安全问题_挑战url劫持

用虚拟信用卡注册Google Play开发者账号-程序员宅基地

文章浏览阅读1.5k次。本文首发于http://www.abcdsxg.cn/free/net/562虚拟信用卡首先介绍一下虚拟信用卡(Virtual Credit Card),顾名思义,虚拟就是没有实体卡,一般都是在提供服务的网站上注册后由服务商生成提供卡号、有效期、安全码之类的信息,此类平台是由金融市场行为监管局授权及监管,并且有相关银行组织发的执照,所以在安全性上是有一定保障的!虚拟信用卡一般有VISA(4..._谷歌开发者没卡怎么办

java毕业设计闸口社区管理系统Mybatis+系统+数据库+调试部署_人闸口机读取信息 后台管理系统架构-程序员宅基地

文章浏览阅读110次。java毕业设计闸口社区管理系统Mybatis+系统+数据库+调试部署。springboot疫情期间中小学生作业线上管理系统设计与实现。springcloud基于微服务的家居体验平台的设计与实现。JSP物流仓储仓库管理系统的设计与实现sqlserver。ssm医疗机构药房管理系统软件开发-后台软件设计与实现。springboot基于web的学校工资管理系统。ssm基于Web的精品课程网站的设计与实现。_人闸口机读取信息 后台管理系统架构

获取EasyUI的treegrid的checkbox所有已勾选的数据-程序员宅基地

文章浏览阅读533次。EasyUI为TreeGrid的已勾选节点,未勾选节点,只勾选部分子节点的父节点分别添加了三个不同的样式,如下:样式一:tree-checkbox2 有子节点被选中样式二:tree-checkbox1 节点被选中样式三:tree-checkbox0 节点未选中那么,我们就可以依据这三个样式分别取到所有已勾选的主键值了,为方便使用,我们写成TreeGrid的扩展方法,代码如下: $.exten..._treegrid checknode

随便推点

chart.Correlation绘制相关性热图-程序员宅基地

文章浏览阅读1.3w次,点赞9次,收藏62次。可以同时显示相关性和显著性的热图我们最终绘制的是如下图所示首先配置的文件如下所示行为样本名,列为基因名的一个表达谱读取文件data = read.table("cor.txt",header=T,sep="\t")data1<-data[,-1]#计算相关性,默认用的是pearson相关性计算cor_matr = cor(data1)cor_matr#保存相关性..._chart.correlation

【shell】远程执行shell|多节点并行执行|远程登录执行_shell脚本远程执行shell指令-程序员宅基地

文章浏览阅读6.8k次。目录shell远程执行前提条件:对于简单的命令:对于脚本的方式:SSH命令格式主要参数说明ssh控制远程主机,远程执行命令步骤准备工作基于公私钥认证远程登录可能存在的不足ssh 执行远程命令格式打开远程shellssh的-t参数在多个节点上并行执行命令的三种方法使用bash执行命令∞(Execute commands using Bash∞)使用执行命令clustershell∞(Execute commands usingclust..._shell脚本远程执行shell指令

探索DroidLord:一款强大的Android逆向工程工具-程序员宅基地

文章浏览阅读371次,点赞3次,收藏4次。探索DroidLord:一款强大的Android逆向工程工具项目地址:https://gitcode.com/likia/DroidLordDroidLord 是一个专为Android开发者和安全研究人员设计的开源逆向工程框架。它利用Java和Python的强大功能,帮助用户深入理解APK文件的内部工作机制,从而进行代码审计、漏洞发现或应用优化。项目简介DroidLord的核心在于其模块化...

随机背景图php,岁月小筑随机图片API接口-随机背景图片-随机图片API-程序员宅基地

文章浏览阅读670次。前言此为完整版随机图片API介绍,若仅需要随机背景图片,请点击:接口调用地址12345#https调用https://img.xjh.me/random_img.php#http调用http://img.xjh.me/random_img.php开发状态增加图片分类,背景->ACG,背景->环境背景,调用方法:GET参数:type=bg&ctype=acg/nature——更新..._随机图片api接口

xfs_growfs 同步文件系统_xfs_growfs命令找不到-程序员宅基地

文章浏览阅读3.2w次,点赞6次,收藏21次。在使用pvcreate, vgcreate,lvextend等命令拓展分区的时候,发现出现了找不到逻辑块的问题,最后问题是现在的文件格式是xfs,resize2fs命令是读取不了的,故而查找到了需要使用xfs_growfs lvextend之后显示lv空间已经增加 然后我需要同步文件系统,一开始使用resize2fs后来_xfs_growfs命令找不到

python 安装serial模块_python安装serial模块-程序员宅基地

文章浏览阅读2.5w次,点赞10次,收藏45次。如果python想要操作串口,需要首先先安装pyserial,在不同的系统上安装python serial模块的方法不一样,在windowns系统上,你可以直接直接通过pip install pyserial去安装pyserial,但是在linux系统上你需要把pyserial的源码包下载下来,解压,然后执行安装命令。1,在windows系统上的操作:C:\Users\test>..._python安装serial模块