ひどい 16 色のビットマップではなく、24 ビットまたは 256 色のビットマップを使用するツールバーを MFC で作成する方法を考えていました。
誰かが簡単なコードの方向に私を向けることができますか?
ありがとう
これが発生する理由は、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 バージョンでこの問題が解決された可能性もあります。まだ実際に使ってみたわけではないので断言はできません。
ソリューションは完璧に機能しました。少し修正するだけで済みます。
CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
m_imagelist.Add(&bm, (CBitmap*) NULL);