0

私はここで設計段階にいます。

コード:

if (m_ToolBar.CreateEx(this, TBSTYLE_TRANSPARENT | TBSTYLE_FLAT,
    AFX_DEFAULT_TOOLBAR_STYLE, CRect(1, 1, 1, 1), IDR_TOOLBAR))
{
    m_ToolBar.SetPaneStyle(m_ToolBar.GetPaneStyle()
        & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_ANY));

    m_ToolBar.SetBorders();

    m_ToolBar.LoadBitmap(IDB_BMP_SM_IMAGELIST);

    m_ToolBar.InsertButton(CMFCToolBarButton(ID_FILE_OPEN_CHRISTIAN_LIFE_AND_MINISTRY_REPORT, 0, _T("Open MWB"), TRUE));
    m_ToolBar.InsertButton(CMFCToolBarButton(ID_FILE_CREATE_CHRISTIAN_LIFE_AND_MINISTRY_REPORT, 0, _T("Create MWB"), TRUE));
    m_ToolBar.InsertSeparator(2);
    m_ToolBar.InsertButton(CMFCToolBarButton(ID_FILE_OPENREPORT, 0, _T("Open SRR"), TRUE));
    m_ToolBar.InsertButton(CMFCToolBarButton(ID_FILE_CREATEREPORT, 0, _T("Create SRR"), TRUE));
    m_ToolBar.InsertSeparator(5);
    m_ToolBar.InsertButton(CMFCToolBarButton(ID_OPTIONS_PUBLISHERS_DATABASE, 0, _T("Publishers Database"), TRUE));


    CSize   sizeToolBar = m_ToolBar.CalcFixedLayout(FALSE, TRUE);
    m_ToolBar.SetWindowPos(NULL, 0, 10, sizeToolBar.cx, sizeToolBar.cy,
        SWP_NOACTIVATE | SWP_NOZORDER);

}

OnInitDialog上記を myで呼び出しますCDialog

ツールバーが重なっている理由:

ここに画像の説明を入力

アップデート

基本的なツールバー リソースを使用するようにコードを単純化しました。

if (m_ToolBar.CreateEx(this, TBSTYLE_TRANSPARENT | TBSTYLE_FLAT,
    AFX_DEFAULT_TOOLBAR_STYLE, CRect(1, 1, 1, 1), IDR_TOOLBAR))
{
    m_ToolBar.SetPaneStyle(m_ToolBar.GetPaneStyle()
        & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_ANY));

    m_ToolBar.SetBorders();

    m_ToolBar.LoadToolBar(IDR_TOOLBAR);

    CSize   sizeToolBar = m_ToolBar.CalcFixedLayout(TRUE, TRUE);
    m_ToolBar.SetWindowPos(NULL, 0, 10, sizeToolBar.cx, sizeToolBar.cy,
        SWP_NOACTIVATE | SWP_NOZORDER);
}

しかし、結果は同じです。

アップデート

IDE でダイアログのサイズを変更すると、ツールバー用のスペースがあることに気付きました。しかし、IDE で高さ 32 ピクセルのツールバーを使用できるようにサイズを正確に変更するにはどうすればよいでしょうか?

ここに画像の説明を入力

4

1 に答える 1

0

このアーカイブされた記事へのリンクが提供されました。

これは私の更新されたコードです(から呼び出されますOnInitDialog):

void CMeetingScheduleAssistantDlg::CreateToolbar()
{
    DWORD dwCtrlStyle = TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CBRS_SIZE_DYNAMIC;
    DWORD dwStyle = AFX_DEFAULT_TOOLBAR_STYLE;
    if (m_ToolBar.CreateEx(this, dwCtrlStyle,
        dwStyle, CRect(1, 1, 1, 1), IDR_TOOLBAR))
    {
        dwStyle = CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC;
        m_ToolBar.SetPaneStyle(m_ToolBar.GetPaneStyle() | dwStyle);

        CMFCToolBarInfo info;

        info.m_uiColdResID = IDB_PNG_MAIN_TOOLBAR;
        info.m_uiHotResID = IDB_PNG_MAIN_TOOLBAR;
        info.m_uiLargeColdResID = IDB_PNG_MAIN_TOOLBAR;
        info.m_uiLargeHotResID = IDB_PNG_MAIN_TOOLBAR;

        m_ToolBar.LoadToolBarEx(IDR_TOOLBAR, info, FALSE);

        CSize   sizeToolBar = m_ToolBar.CalcFixedLayout(TRUE, TRUE);
        m_ToolBar.SetWindowPos(NULL, 0, 0, sizeToolBar.cx, sizeToolBar.cy,
            SWP_NOACTIVATE | SWP_NOZORDER);

        // Move all controls down
        CPoint ptOffset(0, sizeToolBar.cy);

        CRect  rcChild;
        CWnd* pwndChild = GetWindow(GW_CHILD);
        while (pwndChild)
        {
            if (pwndChild->GetSafeHwnd() != m_ToolBar.GetSafeHwnd())
            {
                pwndChild->GetWindowRect(rcChild);
                ScreenToClient(rcChild);
                rcChild.OffsetRect(ptOffset);
                pwndChild->MoveWindow(rcChild, FALSE);
            }
            pwndChild = pwndChild->GetNextWindow();
        }

        // Resize the window
        CRect rcWindow;
        GetWindowRect(rcWindow);
        rcWindow.bottom += sizeToolBar.cy;
        MoveWindow(rcWindow, FALSE);

    }
}

つまり、すべてのコントロールを手動で下に移動し、ウィンドウのサイズを変更する必要がありました。今はOKです:

新しいツールバー

于 2019-12-31T17:51:58.443 に答える