コンボボックスにて背景色の変更
Posted: 2010年10月07日(木) 09:12
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);
}
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);
}