브러시를 만들어 계속 추적해야합니다. 그런 다음 return 0
대신이 브러시를 코드 스 니펫에 반환합니다. 브러시가 더 이상 필요 없으면 삭제해야합니다. 이것은 보통 WM_DESTROY
메시지에 대한 응답으로 이루어집니다.
귀하의 경우에는 필자가 권장하는 스톡 브러시를 사용하여 총알을 피할 수 있습니다.
읽기 전용 모드에서 편집 컨트롤 대신 WM_CTLCOLOREDIT
의 WM_CTLCOLORSTATIC
에 응답, 그래서 당신은 제대로이 메시지를 처리해야하는 경우 편집/정적 제어를 칠 때
case WM_CTLCOLORSTATIC:
{
if((HWND)lParam == GetDlgItem(hwnd, IDC_EDIT_IN))
{
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor(hdc, RGB(255, 255, 255));
return (LRESULT)((HBRUSH)GetStockObject(BLACK_BRUSH));
// if edit control is in dialog procedure change LRESULT to INT_PTR
}
else // this is some other static control, do not touch it!!
return DefWindowProc(hwnd, message, wParam, lParam);
}
을, 당신은 그림을 위해 3 개 개의 부품이 :
- 텍스트 색상
- 텍스트 배경
- 컨트롤의 바 위해 ckground
당신이 원하는 색상 (윈도우 프로 시저에 대한 return (LRESULT)someBrush
, 또는 return (INT_PTR)someBrush
대화 상자)와 브러시를 반환해야 원하는 색상으로 전체 제어를 페인트합니다.
는 SetBkColor
에 대한 귀하의 호출은 다른 컨트롤의 배경 색상입니다 텍스트 배경의 색상을 설정합니다. 그렇기 때문에 SetBkMode
을 TRANSPARENT
매개 변수로 지정하여 텍스트 배경이 컨트롤의 배경과 일치하도록하려는 것입니다.
재고 브러시를 추적 할 필요가 없으며 더 이상 필요하지 않은 후에도 삭제해야하기 때문에 스톡 브러쉬를 사용했습니다.
그래도 다른 색상을 원할 수도 있습니다. 여기이 경우 당신이해야 할 것입니다 :
- 글로벌
HBRUSH
변수 또는 창/대화 과정에서 static HBRUSH
변수를 만듭니다.
- 윈도우 프로 시저 인 경우
WM_CREATE
에 대한 응답으로이 변수를 초기화합니다. 대화 상자에서 브러시를 WM_INITDIALOG
으로 초기화하십시오. 예 : someBrush = CreateSolidBrush(RGB(255, 0, 255));
자세한 정보 및 예는 documentation을 참조하십시오.
- 위의 예에서 보셨 듯이이 브러시를 반환하십시오 (창문 절차는
return (LRESULT)someBrush
, 대화 상자는 return (INT_PTR)someBrush
).
- 더 이상 필요없는 브러시를 삭제하십시오. 이것은 보통
WM_DESTROY
에서 이루어지며 DeleteObject(someBrush);
호출로 이루어집니다. WM_CLOSE
가끔이 시나리오의 예를 찾기 위해 인터넷을 검색 (생략 할 수있는 반면
나는 강하게,이 창문은 항상 수신 할 메시지입니다 때문에 WM_DESTROY
대신 WM_CLOSE
에 응답 삭제를 할 조언).
도움이 되었으면하는 의문점이 있으시면 도움을 요청하겠습니다. 친애하는.
'WM_CTLCOLORSTATIC'을 보시기 바랍니다 –
MSDN 기사를 읽으면 브러시를 돌려 주겠다고 말합니다. –