Notice
Recent Posts
Recent Comments
Link
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

MuTa

[MFC] 버튼 색상 변경 본문

MFC-C++

[MFC] 버튼 색상 변경

MuTa 2016. 5. 10. 10:20

출처 http://452345236123123124.tistory.com/entry/MFC-%EB%B2%84%ED%8A%BC-%EC%83%89%EC%83%81-%EB%B3%80%EA%B2%BD



1. Button의 Owner Draw 속성을 True로 변경


2. .h 파일에 afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct); 함수 추가


3. .cpp 파일에 BEGIN_MESSAGE_MAP(CTextDlg, CDialog) 메세지 맵에 ON_WM_DRAWITEM() 이벤트 추가


4. .cpp 파일에 void CTextDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 함수 내용 추가


void CTextDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    // nIDCtl = IDC값
    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(51,51,51));             //버튼색상
        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(51,51,51));                       //text의 백그라운드 색상
        dc.SetTextColor(RGB(255,255,255));                     //texttort
        TCHAR buffer[MAX_PATH];                            //버튼의 text를 얻기위한 임시버퍼
        ZeroMemory(buffer,MAX_PATH);                       //버퍼초기화
        ::GetWindowTextA(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); //버튼의 text얻기
        dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); //버튼의 text넣기
        dc.Detach();                                                  //버튼의 dc 풀어주기
    }
    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}



[결과 화면]


'MFC-C++' 카테고리의 다른 글

3차원 vector c++11  (0) 2016.05.11
CString Parsing  (0) 2016.05.11
폴더내 파일 리스트 가져오기  (0) 2016.03.30
Std:bitset 활용  (0) 2016.03.30
Std::vector Sort  (0) 2016.03.30