1

Visual Studio のデフォルトよりも多くの色深度を持つアイコンをサポートする大きなツールバーを作成したいと考えています。Visual Studio 2005 を使用しており、ツールバーは CDialog にあります。

私は見つかったコードを使用しました: here が機能しませんでした。

int CSalariesForm::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;

    HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
        MAKEINTRESOURCE(IDR_MAINFRAME1), IMAGE_BITMAP,
        0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);

    CBitmap bm;
    bm.Attach(hBitmap);


    CImageList m_imagelist;
    m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
    m_imagelist.Add(&bm, (CBitmap*) NULL);

    cToolBar.Create(this);
    cToolBar.GetToolBarCtrl().SetImageList(&m_imagelist);

    cToolBar.ShowWindow(SW_SHOW);
    cToolBar.SetBarStyle(CBRS_TOOLTIPS | CBRS_FLOATING | CBRS_ALIGN_TOP | CBRS_FLYBY);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
    return 0;
}

ダイアログを呼び出すと、ツールバーが表示されません。コードでウォンは何ですか?

ありがとうございました

4

1 に答える 1

1

イメージ リストをツールバーに割り当てても、ツールバー ボタンは作成されません。また、イメージ リストは、ローカル変数ではなく、クラス メンバーにする必要があります。

// header file
private:
    CImageList m_imagelist;
    CToolBar   m_toolbar;
// source file
enum { width = 20, height = 20 }; // width and height of one button image

m_toolbar.Create(this);

// create the image list
m_imagelist.Attach(
    ImageList_LoadImage(
        AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), width, 4, 
        CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION | LR_LOADTRANSPARENT )
);

// set button and image sizes (copied from CToolBar::LoadToolBar)
m_toolbar.SetSizes(CSize(width+7,height+7), CSize(width,height));

// set image list
m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);

// define command ids for each button
const UINT cmdIds[] = { 
    IDOK,
    0,        // separator
    IDCANCEL,
};

// assign ids to the toolbar
m_toolbar.SetButtons(cmdIds, sizeof(cmdIds)/sizeof(UINT));

RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

IDB_BITMAP140x20 24 ビット カラー ビットマップ (20x20 ボタン 2 つ) です。ボタンの作成をさらに制御する必要がある場合は、CToolBarCtrl::SetButtons()代わりに を使用できます。ImageList_LoadImageイメージ リストの読み込みの詳細については、 を参照してください。

于 2012-12-25T23:20:03.643 に答える