10

ひどい 16 色の​​ビットマップではなく、24 ビットまたは 256 色のビットマップを使用するツールバーを MFC で作成する方法を考えていました。

誰かが簡単なコードの方向に私を向けることができますか?

ありがとう

4

2 に答える 2

11

これが発生する理由は、MFC CToolbar クラスが、16 色の​​みを使用するように初期化されたイメージ リストを内部で使用するためです。解決策は、独自のイメージ リストを作成し、代わりにそれを使用するようにツールバーに指示することです。これが256色で機能することはわかっていますが、より高いビット深度でテストしていません:

まず、リソースから 256 色のビットマップを読み込みます。

HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP,
    0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
CBitmap bm;
bm.Attach(hBitmap);

次に、256 色のイメージ リストを作成し、それにビットマップを追加します。

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

最後に、新しい画像リストを使用するようにツールバーに指示する必要があります。

m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);

多くの UI 要素が更新されていることがわかっているため、VS2008 の新しい MFC バージョンでこの問題が解決された可能性もあります。まだ実際に使ってみたわけではないので断言はできません。

于 2008-11-04T11:31:50.873 に答える
0

ソリューションは完璧に機能しました。少し修正するだけで済みます。

CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); 
m_imagelist.Add(&bm, (CBitmap*) NULL); 
于 2009-10-28T22:32:20.303 に答える