コンボボックスにて背景色の変更

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
かんさい

コンボボックスにて背景色の変更

#1

投稿記事 by かんさい » 15年前

VC初心者です。 VC6.0SP6で作成しています。
DllにてCComboboxクラス(CMyComboBox)を作成し、作成APに関連付けて動作させています。

CMyComboBoxで可能とするのは以下で、
①フォーカスを取得した時に背景色を黄色にする。
②フォーカスを失った時に背景色を白色にする。
③ENTER入力で次コントロールへフォーカスを飛ばす。

この3件ですが、②のフォーカスを失った場合に背景色が白色にならない。
また、①のフォーカス取得ではENTERキーやTABキーからフォーカスを取得した場合は
背景色が黄色になりますが、マウスカーソルでのフォーカス取得では背景色が
変わりません。

EditBoxでも同じような処理を作成していますが、そちらではうまく動作しています。
フォーカスを失った時に背景色を変更するにはどのタイミングでどのような処理を
すればいいのでしょうか?また、マウスカーソル移動で同じ処理を行うにはどのように
すればよろしいのでしょうか?先輩方のヒントをどうかよろしくお願い致します。

CMyComboBoxの一部
BOOL CMyComboBox::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message) {
case WM_KEYDOWN:
switch(pMsg->wParam) {
case VK_TAB:
case VK_RETURN:
pMsg->wParam = VK_TAB;
m_Skip = 1;
break;
case VK_UP:
int a = CComboBox::GetCurSel();
CComboBox::SetCurSel(a);
break;
}
break;

}

return CComboBox::PreTranslateMessage(pMsg);
}


BOOL CMyComboBox::SetBackColor(COLORREF color)
{
m_bgColor = color;
if (m_brush.GetSafeHandle()) {
if (!m_brush.DeleteObject())
return FALSE;
}
if (!m_brush.CreateSolidBrush(color))
return FALSE;
if (m_hWnd) {
Invalidate();
}
return TRUE;
}


HBRUSH CMyComboBox::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor( m_clrText );
pDC->SetBkColor( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
return CreateSolidBrush( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
}


HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetTextColor( m_clrText );
pDC->SetBkColor( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
return CreateSolidBrush( m_bFocused ? m_clrBkgnd[0] : m_clrBkgnd[1] );
}

void CMyComboBox::OnKillfocus()
{
m_bFocused = FALSE;
Invalidate(TRUE);
SetBackColor(RGB(255,255,255));
}

void CMyComboBox::OnSetfocus()
{
m_bFocused = TRUE;
Invalidate(TRUE);
}

void CMyComboBox::OnSetFocus(CWnd* pOldWnd)
{
CComboBox::OnSetFocus(pOldWnd);
m_bFocused = TRUE;
Invalidate(TRUE);
}

void CMyComboBox::OnKillFocus(CWnd* pNewWnd)
{
CComboBox::OnKillFocus(pNewWnd);
m_bFocused = FALSE;
Invalidate(TRUE);
}

シエル

Re:コンボボックスにて背景色の変更

#2

投稿記事 by シエル » 15年前

WM_SETFOCUSとWM_KILLFOCUSを調べると幸せになれるかもしれません。

かんさい

Re:コンボボックスにて背景色の変更

#3

投稿記事 by かんさい » 15年前

シエル様ありがとうございます。
ですが、WM_SETFOCUSとWM_KILLFOCUSについて調べては見たのですが、
幸せになれませんでした。WM_SETFOCUSとWM_KILLFOCUSでは処理の作り方が
違うのでしょうか?WM_KILLFOCUSではひと工夫が必要でしょうか?
申し訳ありませんがもう少しヒントをお願い致します。

シエル

Re:コンボボックスにて背景色の変更

#4

投稿記事 by シエル » 15年前

すいません。これMFCだったんですね。
申し訳ないですが、それなら私は専門外なのでお答えできません。

ググったら下記のページがありました
参考になりましたら幸いです。
http://homepage2.nifty.com/DSS/VCPP/MFC ... kColor.htm

かんさい

Re:コンボボックスにて背景色の変更

#5

投稿記事 by かんさい » 15年前

シエル様
ありがとうございました。

教えていただいたページのようにBEGIN_MESSAGE_MAP部分を
変更すれば思うように動作いたしました。

専門外でしたのに申し訳ありませんでした。
ものすごく助かりました。

閉鎖

“C言語何でも質問掲示板” へ戻る