CMFCToolBarに画像マスクを認識させるにはどうすればよいですか?
-
22-07-2019 - |
質問
CMFCToolBar
派生クラスがあり、そのインスタンスは CDockablePane
派生クラスのメンバーです。
VisualStudioDemoサンプルを見て、それがどのように行われているかを確認し、これまでのところこれを持っています:
int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// Removed all "return -1 on error" code for better readability
CDockablePane::OnCreate(lpCreateStruct);
if(m_toolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_MY_TOOLBAR) &&
m_toolBar.LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE /* Is locked */))
{
if(theApp.m_bHiColorIcons) // Is true, i.e. following code is executed
{
m_toolBar.CleanUpLockedImages();
m_toolBar.LoadBitmap(IDB_MY_TOOLBAR_24, 0, 0, TRUE /*Locked*/);
}
m_toolBar.SetPaneStyle(m_toolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
m_toolBar.SetPaneStyle(m_toolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
m_toolBar.SetOwner(this);
// All commands will be routed via this control , not via the parent frame:
m_toolBar.SetRouteCommandsViaFrame(FALSE);
}
return 0;
}
ハイカラー画像(24ビット)は読み込まれますが、マゼンタマスク(R255 G0 B255)は表示されます。ツールバーにマスクを認識させる方法がわかりません。
これも可能ですか?
解決
これが毎回機能するかどうかはわかりませんが、マスクの色として RGB(192、192、192)
を使用すると認識されます。
(CMFCToolBarコントロールは、透明色として :: GetSysColor(COLOR_BTNFACE)
を使用する準備ができているようです...)
他のヒント
回避策は、アルファチャネルとともに32ビット画像を使用することであることがわかりました。 以前に32ビット画像を使用しようとしましたが、他の何らかの理由で動作しませんでした。その後、32ビット画像が動作しないと考えました。
32ビット画像を使用する場合は、 CBitmap
を使用せず、代わりに ATL :: CImage
または CPNGImageオブジェクト
を使用して、対応する< code>リソースID 。
所属していません StackOverflow