想在VC用多文档MDI创建的主界面CMainFrame显示一些信息,如背景图片,用CWnd派生一个CLogoWnd,并重载 OnEraseBkgnd,OnSize,进行绘图。在CMainFram::OnCreate函数中加入m_LogoWnd.SubclassWindow(m_hWndMDIClient);如果CMainFrame继承CMDIFrameWnd没有问题,主界面可以显示背景图片或绘图。但如果CMainFrame继承CMDIFrameWndEx则总是显示Debug Assertion Failed!异常。这是问什么?
如何在VC用多文档MDI创建的主界面CMainFrame显示一些信息,如背景图片,总是异常?
该问题来自社区帖: https://bbs.csdn.net/topics/618796225.
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
这个问题可能是由于你在使用CMDIFrameWndEx时,处理窗口子类化的方式不正确导致的。CMDIFrameWndEx类有一些额外的功能,比如DWM(桌面窗口管理器)支持和窗口边框风格等。在这种情况下,你需要确保正确地将你的CLogoWnd子窗口添加到MDI客户区,并且正确处理其消息。
首先,确保你的CLogoWnd类已经正确实现了OnEraseBkgnd和OnSize方法,用于绘制背景图片。如果你还没有实现这些方法,请参考下面的示例代码:
class CLogoWnd : public CWnd { public: CLogoWnd() { // 初始化你的图片资源或者其他需要的变量 } protected: afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnPaint(); afx_msg void OnEraseBkgnd(CDC* pDC); afx_msg void OnSize(UINT nType, int cx, int cy); private: CBitmap m_Bitmap; // 假设你有一个名为m_Bitmap的CBitmap对象存储你的背景图片 };
然后,在CMainFrame中,你应该使用
DockControlBar()
方法而不是SubclassWindow()
来将CLogoWnd添加到MDI客户区。这是因为CMDIFrameWndEx可能期望MDI客户区窗口具有特定的行为,而SubclassWindow()
可能会破坏这些行为。下面是修改后的CMainFrame::OnCreate函数中的代码:void CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return; // 创建并初始化CLogoWnd对象 m_LogoWnd.Create(NULL, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST + 1); m_LogoWnd.m_Bitmap.LoadBitmap(IDB_BITMAP1); // 加载你的背景图片资源 // 将CLogoWnd控件添加到MDI客户区 DockControlBar(&m_LogoWnd, AFX_IDW_DOCKBAR_RIGHT); }
在这个例子中,我们假设你有一个ID为IDB_BITMAP1的位图资源。你需要根据实际情况替换这个资源ID。
现在,CLogoWnd应该被正确地添加到了MDI客户区,并且在运行时应该能正常显示背景图片了。如果仍然有问题,你可以检查一下资源是否正确加载,或者尝试输出调试信息,看看是否有任何未捕获的异常。如果你仍然遇到困难,可以提供更详细的错误信息,我会尽力帮你解决。
解决 1无用
悬赏问题
- ¥15 soildworks装配体的尺寸问题
- ¥100 有偿寻云闪付SDK转URL技术
- ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
- ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
- ¥15 远程安装一下vasp
- ¥15 自己做的代码上传图片时,报错
- ¥15 Lingo线性规划模型怎么搭建
- ¥15 关于#python#的问题,请各位专家解答!区间型正向化
- ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
- ¥50 comsol温度场仿真无法模拟微米级激光光斑