첵크 박스의 Tri State는 라디오에는 없는 단독 속성이라 따로 설명을 하였다.
저 속성은 옵션 다이알로그를 만들거나 복합 옵션들을 구현할 때 사용되는, 상당히 직관적인 속성이다.
다음은, 첵크와 라디오가 가지는 공통속성 중에서 특별하게 다루어야할 만한 것들 을 골라보았다.
머 그래봤자 남는거라고는 멀티라인, 아이콘, 이미지 정도이다.
그림의 아래쪽에 보이는 색상 변경 부분은 그동안 다루었던 에디트와 스태틱 컨트로에서 사용되었던 배경 투명화와 색상 변경하기 기법을 적용하였다.
매 컨트롤마다 써먹으면 식상(?)하니 한군데 몰아부처 이렇게도 사용할 수 있음을 예시한다.
1. 아이콘 로딩.
첵크 박스나 라디오 버튼에서 Styles 페이지에서 Icon 속성을 첵크한다.
// 첫번째 첵크박스의 포인터를 얻은 후 CButton으로 형변환한다.
CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK1);
// 아이콘을 로딩한 후 SetIcon 메서드를 이용하여 아이콘을 넣어준다.
pButton->SetIcon(::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)));
2. 비트맵 로딩.
첵크 박스나 라디오 버튼에서 Styles 페이지에서 Bitmap 속성을 첵크한다.
// 첫번째 첵크박스의 포인터를 얻은 후 CButton으로 형변환한다.
CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK1);
// 비트맵을 로딩한 후 SetBitmap 메서드를 이용하여 비트맵을 넣어준다.
pButton->SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP3)));
3. Pushlike
첵크 박스나 라디오 버튼에서 Styles 페이지에서 Pushlike속성을 첵크한다.
이 속성은 별거 없어보이지만, 이걸 이용하면 버튼을 2가지 상태로 (눌린상태, 아닌상태)로 아주 쉽게 구분하여 하나의 버튼을 다양하게 이용할 수 있다.
만약 파워버튼이라고 가정하면..
1. 튀어 나와있을 때 - 캡션 파워오프
2. 눌려져 있을 때 - 캡션 파워온
등.. 상태를 표현할 경우는 그냥 CButton보다 쉽게 접근하여 사용이 가능하다.
4. Multiline
첵크 박스나 라디오 버튼에서 Styles 페이지에서 Multiline 속성을 첵크한다.
표현 해주고자 하는 캡션이 길 때 사용한다.
5. 배경의 투명화와 색상 변경.
// 아래 코드는 이제 설명하지 쉽게 이해할 수 있을 것이다.
HBRUSH CSssDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_CHECK8 || pWnd->GetDlgCtrlID() == IDC_RADIO9)
{
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkColor(RGB(0, 255, 0));
}
else if(pWnd->GetDlgCtrlID() == IDC_CHECK9 || pWnd->GetDlgCtrlID() == IDC_RADIO10)
{
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkColor(RGB(0, 255, 0));
return m_brh;
}
else if(pWnd->GetDlgCtrlID() == IDC_CHECK10 || pWnd->GetDlgCtrlID() == IDC_RADIO11)
{
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}