2009-09-03 88 views
2

我想知道如何在MFC/MDI项目的MainFrame中创建CDialogBar默认大小。这是打包对话栏的代码。如何在MFC/MDI项目中指定CDialogBar大小?

// 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

回答

2

可以使用CalcFixedLayout重写的方法,如果你有一个自定义的一个子类CDialogBar。例如:

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); 
     } 
    } 
}; 
0

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

更改CDialogBar m_sizeDefault成员给你打电话的MoveWindow()或SetWindowPos(之前需要的尺寸),之后它应该正确调整大小。其实你也将需要添加边框的大小(它们必须适合窗口也一样)我用这样的是这样的:

int nEdgeThickness = GetSystemMetrics(SM_CXSIZEFRAME); 
pContrBar->m_sizeDefault = CSize(rc->right+nEdgeThickness*2, rc->bottom+nEdgeThickness); 

我需要这个来动态改变CDialogBar的大小,所以我知道何时会调整大小。