메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

C/C++/MFC

Button Controls BUTTON 버튼색 변경하기

2010.01.30 17:27

WhiteAT 조회 수:37690

프로젝트명 : WATButtonColorDlg

프로그램 형태 : Dialog

파일 다운로드 :  WATButtonColor.zip (release 폴더에 실행파일 포함)

MFC 에서 BUTTON에 색상을 넣어 보자.


WATButtonColor01_exe.gif


1. 먼저 BUTTON_기본기능 을 이용하여 기본적인 버튼을 추가하자.

WATButtonColor01.gif


2. BUTTON 을 선택후 우측마우스 클릭으로 Property 를 선택하여 속성상자를 연다.

   [Styles]탭에서  Owner draw 를 체크한후 컴파일&실행 해보자.

   아래 그림처럼 버튼이 보이지 않을 것이다.  

   WATButtonColor01_owner.gif

   ( Owner draw 항목을 체크하여서 사용자가 직접 색상을 넣어줘야 하는데 아직 코딩하지 않았기 때문이다.)



3. 색상을 넣어주는 메소드는 WM_DRAWITEM 이다.

   ClassWizard ( 단축키 : Ctrl + W) 를 실행하여

   Object IDs 에서 CWATButtonColorDlg 을 선택하고,

   Messages 에서 WM_DRAWITEM 을 선택하여

   WATButtonColor01_drawitem.gif


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

관련 문서가 검색되었습니다.
  1. [2013/06/13] ZEO-S, 스위치로 LED ON/OFF, C# by WhiteAT (10121)
  2. [2012/11/13] ZEO 모듈이란? by WhiteAT (6394)
  3. [2010/12/29] 03_VC6.0 테트리스 만들기 - 벽돌(Shape)만들기 by WhiteAT (27847) *2
  4. [2010/08/25] 클래스를 배열로 묶어 사용하기 by WhiteAT (19868)
  5. [2010/01/23] 기본적인 Button 사용하기 by WhiteAT (13574)
  6. [2009/06/14] OnKeyDown 에서 Ctrl, Shift, Alt 눌러졌는지 확인하는 방법 by WhiteAT (24221)
  7. [2009/02/03] WM_DEVICECHANGE in MFC by WhiteAT (17873)
  8. [2008/12/31] MFC Thread 사용시 UpdateData 사용하기 by WhiteAT (22728)
  9. [2008/12/25] MFC 메모리 누수 감지 by WhiteAT (23502)
  10. [2008/07/15] vc 소스 CWATTabCtrl01 - Tab Control 간단히 사용하기 by WhiteAT ()