wangxiaokaiasdf 2026-03-04 13:00 采纳率: 0%
浏览 5

工具条如何在初始化时候就改变默认尺寸

在工具条创建前,就调用了CMFCToolBar::SetSizes(CSize(42, 42)...),可是运行起来不生效,工具栏按钮依然是24像素大小,怎么修改?

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-03-04 13:01
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在使用 CMFCToolBar::SetSizes(CSize(42, 42)) 设置工具栏按钮大小时,如果发现实际运行效果不生效(例如按钮仍然是 24 像素),可能是由于以下原因导致的:


    可能原因分析

    1. 调用时机不对

      • SetSizes() 应在工具栏创建完成后调用,而不是在创建前。
      • 如果在 Create(...)LoadToolBar(...) 之前调用,可能导致设置被覆盖或无效。
    2. 未正确初始化工具栏控件

      • 工具栏控件可能没有正确加载资源,导致 SetSizes() 被忽略。
    3. 样式或资源冲突

      • 某些样式(如 AFX_TOOLBAR_STYLE_32BIT_COLOR)或资源(如位图)可能覆盖了尺寸设置。

    解决方案步骤

    1. 确保调用时机正确

    • 在工具栏创建完成后再调用 SetSizes(),通常是在 OnCreateOnInitDialog 中调用。

    2. 正确调用 SetSizes()

    • 确保你是在 CMFCToolBar 对象上直接调用,而不是通过其他方式间接调用。

    3. 检查工具栏是否成功加载

    • 确认你已成功调用 LoadToolBar(...)Create(...)

    4. 修改代码示例

    // 假设你的 CMFCToolBar 成员变量是 m_wndToolBar
    
    BOOL CYourFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (!CFrameWndEx::OnCreate(lpCreateStruct))
            return FALSE;
    
        // 创建工具栏
        if (!m_wndToolBar.Create(this))
            return FALSE;
    
        // 加载工具栏资源
        if (!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
            return FALSE;
    
        // 设置工具栏尺寸
        **m_wndToolBar.SetSizes(CSize(42, 42));**
    
        // 其他设置...
        m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP);
        DockControlBar(&m_wndToolBar);
    
        return TRUE;
    }
    

    附加建议

    • 如果你使用的是 CMFCToolBar 的子类(如 CMyToolBar),请确认重写了相关方法(如 OnUpdateCmdUI)。
    • 调试建议:在 SetSizes() 后添加断点,查看是否执行到该函数,以及 GetSizes() 是否返回正确的值。
    • 如果你使用的是 MFC 的 CMDIFrameWndEx,请确保工具栏是作为主窗口的一部分创建的。

    总结

    | 步骤 | 内容 | |------|------| | 1 | 确保 SetSizes() 在工具栏创建后调用 | | 2 | 检查工具栏是否成功加载资源 | | 3 | 确保 SetSizes(CSize(42, 42)) 是对 CMFCToolBar 实例的直接调用 | | 4 | 使用调试器验证 SetSizes() 是否被执行 | | 5 | 如果使用自定义工具栏,请检查其继承和重写的方法 |


    如有更多上下文(如你使用的 MFC 版本、工具栏类型等),可以进一步优化建议。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月4日
  • 创建了问题 3月4日