私はCWndからいくつかのOwnerDrawnボタンを作成するウィンドウを派生しました。 ボタンはCButtonから派生しています。BackgroundColorを変更する方法OnMouseHover C++ MFC
今、私は自分の上にマウスカーソルを置いているときに自分のボタンのBackgroundColorに変更したいと思います。
そこで私はすでにOnMouseHover(という実装)とOnMouseLeave()メッセージが送信され得ている:デバッガとスパイで
BEGIN_MESSAGE_MAP(CFooterButton, CButton)
ON_WM_MOUSEHOVER()
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
END_MESSAGE_MAP()
void CFooterButton::OnMouseMove(UINT nFlags, CPoint point)
{
//start tracking of Hover and Leave Event
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER | TME_LEAVE;
tme.hwndTrack = m_hWnd;
tme.dwHoverTime = HOVER_DEFAULT;
TrackMouseEvent(&tme);
CButton::OnMouseMove(nFlags, point);
}
void CFooterButton::OnMouseHover(UINT nFlags, CPoint point)
{
HDC hdc = *GetWindowDC();
SetBkColor(hdc,RGB(54, 125, 184));
CButton::OnMouseHover(nFlags, point);
}
を私は、コードが呼び出さなっていることを見ることができますが、何も起こりません。私は比較的MFC/C++に新しいので、私はDCを正しく使用していないと仮定します。なぜ誰かが私にそれが動作していないと私はそれを修正する方法を説明することができますか?私のソリューションを苦労している他の誰のために
背景やウィンドウをペイントするときに背景色がリセットされるので、 'OnMouseHover'で背景を変更することはあまりありません。 'OnEraseBkgn'を上書きして色を設定することができます。 –
@ KarstenKoopので、OnMouseHoverが呼び出されてからOnEraseBkgnを処理するときにInvalidate()を呼び出すだけで済みます。 –
私は、DCを使ってボタンをオーナーのドローとして定義し、背景色をペイントする方がよいと考えています。 – rrirower