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);
}
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
프로그램 시작시 About박스를 표시하려면 등... (0) | 2011.11.08 |
---|---|
[ToolBar] 툴바에 추가된 버튼을 DROPDWON 속성지정 후 메뉴붙이는 (0) | 2011.11.08 |
Visual C++,MFC 에서 로그인창 띄우고 메인화면 띄우기 (0) | 2011.11.03 |
[MFC] [List] OnItemchanged 한번만 호출되게 (0) | 2011.11.02 |
MFC SDI 프로그램 최대화 시작 (0) | 2011.11.02 |
댓글