首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MFC/MDI项目中指定CDialogBar大小?

如何在MFC/MDI项目中指定CDialogBar大小?
EN

Stack Overflow用户
提问于 2009-09-03 06:18:27
回答 2查看 2.9K关注 0票数 2

当在MFC/MDI项目的CDialogBar中创建MainFrame时,我想知道如何指定它的默认大小。下面是“机箱代码”对话框栏。

代码语言:javascript
运行
复制
    // add Dialog bar window
if (m_wndDlgBar.Create(this, IDD_ADDLGBAR,
    CBRS_RIGHT|CBRS_SIZE_DYNAMIC|CBRS_FLYBY, IDD_ADDLGBAR))
{
    TRACE0("Failed to create DlgBar\n");
    return -1;      // fail to create
}

m_wndDlgBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDlgBar);

我试图调用、MoveWindow()、或,但它们不起作用。我想要达到的目标是当对话框被创建时,它有固定的大小(例如200x300),不管DPI设置是什么。如您所知,在资源中绘制的对话框的大小将随着DPI设置的更改而改变。所以我要对话框有固定的大小。

提前感谢!

-bc

EN

回答 2

Stack Overflow用户

发布于 2009-09-03 06:48:22

如果您用自定义方法对CalcFixedLayout进行子类化,则可以使用CDialogBar overridable方法。例如:

代码语言:javascript
运行
复制
class CSizingDialogBar : public CDialogBar {
    CSize m_size;
    bool m_forceSize;
public:
    CSizingDialogBar(CWnd* pParentWnd, UINT nID, CSize initialSize) 
    : CDialogBar(
        pParentWnd, nID,
        CBRS_RIGHT|CBRS_SIZE_DYNAMIC|CBRS_FLYBY, nID)
    , m_size(initialSize)
    , m_forceSize(true) {
    }
    ~CSizingDialogBar() {}

    virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz) {
        if (m_forceSize) {
            return m_size;
        }
        else {
            return CDialogBar::CalcFixedLayout( bStretch, bHorz );
        }
    }
};
票数 2
EN

Stack Overflow用户

发布于 2012-04-23 15:34:18

CalcFixedLayout工作得很好,但是如果不能覆盖该方法:

在调用CDialogBar ()或SetWindowPos()之前,将m_sizeDefault成员更改为所需的大小,然后应该正确调整大小。实际上,您还需要将边框添加到大小(它们也必须适合窗口),所以我使用的是如下所示:

代码语言:javascript
运行
复制
int nEdgeThickness = GetSystemMetrics(SM_CXSIZEFRAME);
pContrBar->m_sizeDefault = CSize(rc->right+nEdgeThickness*2, rc->bottom+nEdgeThickness);

我需要这个来动态地更改CDialogBar的大小,所以我知道它什么时候会调整大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1371671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档