1

nDockBarID = AFX_IDW_DOCKBAR_LEFTのおかげで、バーがフレームに配置されました。

    ForcesBar* m_forcesBar[3];

    for (int i=0; i<3; i++)
{
    m_forcesBar[i]->SetBarStyle(m_forcesBar[i]->GetBarStyle() | 
        CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
    m_forcesBar[i]->EnableDocking(CBRS_ALIGN_ANY);
}

pMainFrame->EnableDocking(CBRS_ALIGN_ANY);

pMainFrame->DockControlBar(m_forcesBar[0], AFX_IDW_DOCKBAR_LEFT); 
pMainFrame->DockControlBar(m_forcesBar[1], AFX_IDW_DOCKBAR_LEFT); 
pMainFrame->DockControlBar(m_forcesBar[2], AFX_IDW_DOCKBAR_LEFT); 

ここに画像の説明を入力してください

私はそのようなバーの組み合わせを受け取りたいですが:

ここに画像の説明を入力してください

lpRectを使ってみるのもいいと思います

void DockControlBar(
   CControlBar* pBar,
   UINT nDockBarID = 0,
   LPCRECT lpRect = NULL 
);

しかし、残念ながらそれは機能しません。そのような特定のドッキングを作成するためのコード例を教えてください(2番目の画像)。

(プロジェクトでは、CSizingControlBar http://www.datamekanix.com/sizecbar/manual.htmlを使用します)

4

1 に答える 1

1

私はそれをテストし、長方形を使用するとうまくいきます。1つの違いは、私のテストアプリでは、MainFrm.hでm_forcesBarを次のように宣言したことです。

ForcesBar m_forcesBar[3]; 

ヒープへの割り当てを回避し、メモリ解放を記憶します。

私が使用したコード(OnCreateからのスニペット):

    EnableDocking(CBRS_ALIGN_ANY);

m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar1);
DockControlBar(&m_wndToolBar2);

CRect rectWnd;
GetClientRect(rectWnd);
ClientToScreen(rectWnd);

for(int iIndx = 0; iIndx < 3; iIndx++)
{
    if (!m_forcesBar[iIndx].Create(_T(""), this, 120 + iIndx))
    {
        TRACE0("Failed to create mybar\n");
        return -1;      // fail to create
    }

    m_forcesBar[iIndx].SetBarStyle(m_forcesBar[iIndx].GetBarStyle() |
        CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);


    m_forcesBar[iIndx].EnableDocking(CBRS_ALIGN_LEFT);



    DockControlBar(&m_forcesBar[iIndx], AFX_IDW_DOCKBAR_LEFT, rectWnd);


}

それだ。

于 2012-05-20T14:49:28.327 に答える