当在MFC/MDI项目的CDialogBar中创建MainFrame时,我想知道如何指定它的默认大小。下面是“机箱代码”对话框栏。
// 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
发布于 2009-09-03 06:48:22
如果您用自定义方法对CalcFixedLayout进行子类化,则可以使用CDialogBar overridable方法。例如:
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 );
}
}
};
发布于 2012-04-23 15:34:18
CalcFixedLayout工作得很好,但是如果不能覆盖该方法:
在调用CDialogBar ()或SetWindowPos()之前,将m_sizeDefault成员更改为所需的大小,然后应该正确调整大小。实际上,您还需要将边框添加到大小(它们也必须适合窗口),所以我使用的是如下所示:
int nEdgeThickness = GetSystemMetrics(SM_CXSIZEFRAME);
pContrBar->m_sizeDefault = CSize(rc->right+nEdgeThickness*2, rc->bottom+nEdgeThickness);
我需要这个来动态地更改CDialogBar的大小,所以我知道它什么时候会调整大小。
https://stackoverflow.com/questions/1371671
复制相似问题