Button Controls BUTTON 버튼색 변경하기
2010.01.30 17:27
프로젝트명 : WATButtonColorDlg
프로그램 형태 : Dialog
파일 다운로드 : WATButtonColor.zip (release 폴더에 실행파일 포함)
MFC 에서 BUTTON에 색상을 넣어 보자.
1. 먼저 BUTTON_기본기능 을 이용하여 기본적인 버튼을 추가하자.
2. BUTTON 을 선택후 우측마우스 클릭으로 Property 를 선택하여 속성상자를 연다.
[Styles]탭에서 Owner draw 를 체크한후 컴파일&실행 해보자.
아래 그림처럼 버튼이 보이지 않을 것이다.
( Owner draw 항목을 체크하여서 사용자가 직접 색상을 넣어줘야 하는데 아직 코딩하지 않았기 때문이다.)
3. 색상을 넣어주는 메소드는 WM_DRAWITEM 이다.
ClassWizard ( 단축키 : Ctrl + W) 를 실행하여
Object IDs 에서 CWATButtonColorDlg 을 선택하고,
Messages 에서 WM_DRAWITEM 을 선택하여
4. [Add Function] 후 [Edit Code] 로 함수를 만들어서 편집할수 있다.
void CWATButtonColorDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl==IDC_BUTTON1) // 해당 버튼인지 체크
{
CDC dc;
RECT rect;
dc.Attach(lpDrawItemStruct ->hDC); // 버튼의 DC 구하기
rect = lpDrawItemStruct->rcItem; // 버튼 영역 구하기
dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0)); // 버튼의 외각선 그리기
dc.FillSolidRect(&rect,RGB(0,255,0)); // button 색상을 GREEN 으로
UINT state=lpDrawItemStruct->itemState; // 버튼 상태 구하기
if((state & ODS_SELECTED))
{
dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);
}
else
{
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
}
dc.SetBkColor(RGB(0,255,0)); // TEXT 의 백그라운드 색상
dc.SetTextColor(RGB(255,0,0)); // TEXT 색상
TCHAR buffer[MAX_PATH]; // 버튼의 TEXT를 얻기 위한 임시 버퍼
ZeroMemory(buffer,MAX_PATH ); // 버퍼 초기화
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); // 버튼의 TEXT 얻기
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);// 버튼에 TEXT 넣기
dc.Detach(); // Button DC 풀어 주기
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
- [2013/06/13] ZEO-S, 스위치로 LED ON/OFF, C# (10121)
- [2012/11/13] ZEO 모듈이란? (6394)
- [2010/12/29] 03_VC6.0 테트리스 만들기 - 벽돌(Shape)만들기 (27847) *2
- [2010/08/25] 클래스를 배열로 묶어 사용하기 (19868)
- [2010/01/23] 기본적인 Button 사용하기 (13574)
- [2009/06/14] OnKeyDown 에서 Ctrl, Shift, Alt 눌러졌는지 확인하는 방법 (24221)
- [2009/02/03] WM_DEVICECHANGE in MFC (17873)
- [2008/12/31] MFC Thread 사용시 UpdateData 사용하기 (22728)
- [2008/12/25] MFC 메모리 누수 감지 (23502)
- [2008/07/15] vc 소스 CWATTabCtrl01 - Tab Control 간단히 사용하기 ()