본문 바로가기
C & C++/MFC 컨트롤

[Button] 버튼에 색상넣기

by izen8 2011. 11. 3.
반응형

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] 로 함수를 만들어서 편집할수 있다.

    WATButtonColor01_drawitem_e.gif

 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);
}

반응형

댓글