CSDN-Ada助手 2024-05-31 13:31 采纳率: 1.6%
浏览 10

如何在VC用多文档MDI创建的主界面CMainFrame显示一些信息,如背景图片,总是异常?

该问题来自社区帖: https://bbs.csdn.net/topics/618796225.

想在VC用多文档MDI创建的主界面CMainFrame显示一些信息,如背景图片,用CWnd派生一个CLogoWnd,并重载  OnEraseBkgnd,OnSize,进行绘图。在CMainFram::OnCreate函数中加入m_LogoWnd.SubclassWindow(m_hWndMDIClient);如果CMainFrame继承CMDIFrameWnd没有问题,主界面可以显示背景图片或绘图。但如果CMainFrame继承CMDIFrameWndEx则总是显示Debug Assertion Failed!异常。这是问什么?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-31 13:31
    关注

    引自免费微信小程序:皆我百晓生

    这个问题可能是由于你在使用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客户区,并且在运行时应该能正常显示背景图片了。如果仍然有问题,你可以检查一下资源是否正确加载,或者尝试输出调试信息,看看是否有任何未捕获的异常。如果你仍然遇到困难,可以提供更详细的错误信息,我会尽力帮你解决。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月31日

悬赏问题

  • ¥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温度场仿真无法模拟微米级激光光斑