如何从CMenu继承一个MFC类??Insert -> New Class, 基类中没有CMenu!

uoyevoli 2004-04-05 11:01:52
我想从CMenu继承一个MFC类,之所以不用Generic Class 是因为我想使用Class Wizard,主要是想使用Message Reflection来把WM_DRAWITEM等消息放到这个类中进行处理,不想放在父窗口中处理。

但是Insert -> New Class,基类中没有CMenu(其实这里可选的类非常少)不知道是为什么???

怎么办????
...全文
653 17 打赏 收藏 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pomelowu 2004-04-08
  • 打赏
  • 举报
回复
恐怕不行,没有messageMap成员,宏BEGIN_MESSAGE_MAP(class,baseclass)都不能使用,如何进行消息反射?或者也有高手知道如何解决,一起学习了。
uoyevoli 2004-04-08
  • 打赏
  • 举报
回复
在国外论坛的到的答案也是message reflection只能用于CWnd的继承类。

晕,看来我只能放弃了。
uoyevoli 2004-04-07
  • 打赏
  • 举报
回复
能手工添加吗?
主要是Message Reflection!即消息反射!就是把WM_DRAWITEM WM_MEASUREITEM消息放到该类内部处理。
uoyevoli 2004-04-06
  • 打赏
  • 举报
回复
怎么写?能给点例子吗?
薛定谔之死猫 2004-04-06
  • 打赏
  • 举报
回复
自己用手写啊,一样的
xuyun11141 2004-04-06
  • 打赏
  • 举报
回复
先从一个类里派生后,然后在在.H和.CPP将基类改在CMenu就行了
pomelowu 2004-04-06
  • 打赏
  • 举报
回复
在头文件类申明的最后加上
DECLARE_DYNAMIC(CMyClass)
在实现类的cpp文件的预编译后加上
IMPLEMENT_DYNAMIC(CMyClass, CMenu)
garygao 2004-04-06
  • 打赏
  • 举报
回复
象 bjyst2008(追风) 说的,常见新类时选择generic class,然后在derived from内填上CMenu就行
bjyst2008 2004-04-06
  • 打赏
  • 举报
回复
你在创建新类是不要选择mfc class 而是选择generic class
pomelowu 2004-04-06
  • 打赏
  • 举报
回复
原因在于 DECLARE_MESSAGE_MAP()
CMenu类并没有messageMap成员,也就是说,就算你改写了这个类,也没有办法通过class wizard给你的类添加消息映射和消息响应
uoyevoli 2004-04-06
  • 打赏
  • 举报
回复
顶啊,再线等!!
uoyevoli 2004-04-06
  • 打赏
  • 举报
回复
可能我的帖子没有说清楚,我之所以不选Generic Class是因为我想利用Class Wizard来添加CMyClass的Message Reflection来在该类内部处理WM_DRAWITEM WM_MEASUREITEM消息而不是把该消息发给父窗口处理。便于该类移植到其他工程中。而Generic Class是无法使用Class Wizard的,我自己有不会手工添加Message Reflection代码。

说白了,我就是想实现 “自画菜单” 而我从Codeproject下载的源码都是在菜单的父窗口中处理那两个消息的,不便于移植,我想用Messag Reflection来改造它。

我看MSDN TN062: Message Reflection for Windows Controls
里面的例子是通过Classs Wizard来添加 =WM_CTLCOLOR 反射消息的。没有提到如何手工添加。
uoyevoli 2004-04-05
  • 打赏
  • 举报
回复
帮忙啊!!应该是个简单问题吧??
在线等啊!!
uoyevoli 2004-04-05
  • 打赏
  • 举报
回复
是啊,我在书上看的也是这么说的,但我觉得这个办法只对从CWnd继承的类有用。
因为我从CStatic(其他什么都一样的)继承,然后手工改动CStatic为CMenu,但编译出错!!

error C2039: 'messageMap' : is not a member of 'CMenu'

我的源文件如下:(手工改动后的)
#if !defined(AFX_MYCLASS_H__E145A8E1_874D_11D8_8D5E_E44DA39E591C__INCLUDED_)
.....
// MyClass.h : header file
/////////////////////////////////////////////////////////////////////////////
// CMyClass window
class CMyClass : public CMenu
{
// Construction
public:
CMyClass();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyClass)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMyClass();
// Generated message map functions
protected:
//{{AFX_MSG(CMyClass)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG

DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MYCLASS_H__E145A8E1_874D_11D8_8D5E_E44DA39E591C__INCLUDED_)

**************************************
// MyClass.cpp : implementation file
//
#include "stdafx.h"
.......
/////////////////////////////////////////////////////////////////////////////
// CMyClass
CMyClass::CMyClass()
{
}
CMyClass::~CMyClass()
{
}
BEGIN_MESSAGE_MAP(CMyClass, CMenu)
//{{AFX_MSG_MAP(CMyClass)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyClass message handlers
itmaster 2004-04-05
  • 打赏
  • 举报
回复
先继承一个类
然后手工改写
dawndu 2004-04-05
  • 打赏
  • 举报
回复
先写一个其他类,然后替换它
bm1408 2004-04-05
  • 打赏
  • 举报
回复
的确是没有这个类!

只能通过动态的创建!
内容概要:本文介绍了“Java+大数据+AI架构师实战营”这一系统性人才培养方案,旨在帮助具备Java基础的开发者在26周内完成向融合Java、大数据与人工智能技术的复合型架构师跃迁。课程围绕五大核心模块展开:架构基本功(微服务演进、分布式锁与ID设计)、数据引擎(亿级数据存储与Flink CDC实时同步)、网关与可观测性(Gateway源码改造、限流与日志采样)、AI融入架构(推荐系统、大模型应用开发)以及架构思维培养。通过“小绿书”项目贯穿始终,强调整合三域技术的系统设计能力而非孤立技能堆叠。; 适合人群:具备1-5年Java开发经验,希望突破技术瓶颈、拓展大数据与AI领域能力的中高级研发人员;适合有志于成长为全栈架构师的技术从业者。; 使用场景及目标:①掌握高并发、分布式系统下的架构设计方法;②理解海量数据的存储分层与实时计算架构;③学会将AI能力如大模型、RAG、向量检索等深度集成到业务系统中;④构建完整的系统可观测性与网关控制能力;⑤形成跨技术域的系统性架构思维。; 阅读建议:此资源以实战项目驱动学习,强调动手实践与架构思维并重。建议学习者结合课程代码与实际调试,深入理解每一环节的技术选型与设计权衡,尤其关注真实生产环境中难以复现的复杂约束,从而建立可迁移的架构“手感”。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧