我想知道如何在MFC / MDI项目的MainFrame中创建CDialogBar默认大小时指定它。这是crate对话栏的代码。
// 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()或 SetWindowPos(),但它们不起作用。我想要实现的目标是在创建对话框时,无论DPI设置是什么,它都具有固定的大小(例如200x300)。如您所知,资源中绘制的对话框的大小将随着DPI设置的更改而改变。所以我希望对话框有固定的大小。
提前致谢!
-bc
答案 0 :(得分:2)
如果使用自定义CDialogBar继承CDialogBar,则可以使用CalcFixedLayout可覆盖方法。例如:
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 );
}
}
};
答案 1 :(得分:0)
CalcFixedLayout工作正常,但如果你不能覆盖方法:
在调用MoveWindow()或SetWindowPos()之前,将CDialogBar m_sizeDefault成员更改为您需要的大小,之后应正确调整大小。实际上你还需要添加边框大小(它们也必须适合窗口)所以我使用的是这样的:
int nEdgeThickness = GetSystemMetrics(SM_CXSIZEFRAME);
pContrBar->m_sizeDefault = CSize(rc->right+nEdgeThickness*2, rc->bottom+nEdgeThickness);
我需要这个来动态改变CDialogBar的大小,所以我知道它何时会调整大小。