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

[Ctrl] 컨트롤 색상, 폰트 변경

by izen8 2011. 4. 14.
반응형

폰트는...->그냥 다이알로그 전체에 속성을 줘도 되지만...아닌 경우,

CFont m_font; 변수 선언해주고....

초기화해주세요....

    LOGFONT lf;
    memset(&lf, 0, sizeof(LOGFONT));
    lf.lfCharSet = 0x81;
    lf.lfHeight = 20;
    strcpy(lf.lfFaceName, "궁서체");
    m_font.CreateFontIndirect(&lf);   
   
    m_ctrlEdit.SetFont((CFont*)&m_font, TRUE);
    m_ctrlBtn.SetFont((CFont*)&m_font, TRUE);

색깔은..

OnCtlColor안에

if(pWnd->GetDlgCtrlID() >= IDC_STATIC){

        pDC->SetBkColor(BACK_COLOR);

        pDC->SetTextColor(RGB(255,255,255));

} 하면 색바뀌고...

새로운 폰트 하나 만들어서

pDC->SetFont(font)하면 됩니다.

////////////////////////////////////////////////////////////////////////

WM_CTLCOLOR 메시지 핸들러를 추가

BRUSH CUpdateDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO: Change any attributes of the DC here

    if(pWnd->GetDlgCtrlID() == IDC_EDIT1) //컨트롤 ID

    {
        hbr = (HBRUSH)::GetSysColorBrush(COLOR_WINDOW);  // 배경 브러쉬
        pDC->SetBkColor(RGB(255,255,255)); // 배경색
        pDC->SetTextColor(RGB(0,0,0));  // 텍스트 색
    }

    // TODO: Return a different brush if the default is not desired
    return hbr;
}

* 참고로 버튼색을 수정하려고 할때는 property의 owner draw로 설정해야 한다.

그렇지 않으면 버튼 색이 바뀌지 않는다.

//////////////////////////////////////////////////////////////////////////




WM_CTLCOLOR 메시지 추가

 

HBRUSH CColorTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
/*
// 배경색
 pDC->SetBkMode(TRANSPARENT); // 글자색과 배경색이 일치하게 만듬
 hbr = m_brush2;     // 바탕색
*/

 pDC->SetBkMode(TRANSPARENT);


// 글자색
 pDC->SetTextColor(RGB(150,100,50));

// 리스트 컨트롤
 m_CtrlList.SetBkColor(RGB(0,0,0));   // 바탕색
 m_CtrlList.SetTextBkColor(RGB(0,0,0));  // 글자 바탕색
 m_CtrlList.SetTextColor(RGB(255,255,255)); // 글자색
 
// 에디트 박스 바탕색
 if(nCtlColor==CTLCOLOR_EDIT)
 {
  return CreateSolidBrush(RGB(0,100,100));
 }

// 리스트 박스 바탕색
 if(nCtlColor==CTLCOLOR_LISTBOX)
 {
  return CreateSolidBrush(RGB(0,0,255));
 }

// 다이얼로그 박스 바탕색
 if(nCtlColor==CTLCOLOR_DLG)
 {
  return CreateSolidBrush(RGB(0,255,0));
 }

// 정적 스테틱
 if(nCtlColor==CTLCOLOR_STATIC)
 {
  return CreateSolidBrush(RGB(255,0,0));
 }

// 스크롤바
 if(nCtlColor==CTLCOLOR_SCROLLBAR)
 {
  return CreateSolidBrush(RGB(0,255,255));
 }
 
// 메시지 박스
 if(nCtlColor==CTLCOLOR_MSGBOX)
 {
  return CreateSolidBrush(RGB(0,255,255));
 }

// 버튼
 if(nCtlColor==CTLCOLOR_BTN)
 {
  return CreateSolidBrush(RGB(0,255,255));
 }

 return hbr;
// return (HBRUSH)CreateSolidBrush(RGB(255,255,0));
}

반응형

댓글