반응형
텍스트를 투명하게 하는 건 아래와 같습니다.
HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
UINT nID = pWnd->GetDlgCtrlID();
//글자를 투명하게 만들기 위해서.
switch(nCtlColor) {
case CTLCOLOR_STATIC:
{
if(nID == IDC_STATIC) {
pDC->SetTextColor(RGB(0, 0, 0));
pDC->SetBkColor(RGB(255, 255, 255));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
}
}
return hbr;
}
그런데 이러면 글자가 겹치니까 아래와 같은 메서드를 만들어줍니다.
void CDlg::SS_InvalidTextUpdate(UINT Id){
CRect useRect;
GetDlgItem(Id)->GetWindowRect(useRect);
ScreenToClient(&useRect);
InvalidateRect(useRect);
}
그리고 실제 사용하는 부분에서는
SS_InvalidTextUpdate(IDC_STATIC);
m_static.SetWindowText("string");
이런식으로 글자 바꾸기 전에 호출을 해줍니다.
설명을 하자면,
글씨가 자꾸 겹치기 때문에, 글씨를 쓰기 전에 그 영역 부분의 크기를 가져와서, InvalidateRect 시킨 것입니다.
대충 자세히는 몰라도, Paint 부분이 동작하는 걸로 봐서, 말그대로 그 영역만 새로고침 시키는 개념이 되는 것 같으므로,
전체를 invalid 시키면 너무 반짝반짝거릴 것이기 때문에, 해당 영역부분만 쉬리릭 새로고침 하는 것입니다.
더 테스트를 해봐야 할 것 같지만, 잘 동작하는 것으로 보이네요.
반응형
'개발 > C++,MFC' 카테고리의 다른 글
[MFC] 주석. 주석해제. 단축키 (0) | 2012.10.12 |
---|---|
[MFC] error LNK2019 (0) | 2012.10.12 |
[MFC] 프로젝트에서 실행되는 다이얼로그 확인하려면 (0) | 2012.10.11 |
[MFC] CString compare (0) | 2012.10.11 |
[MFC] '자식창'드래그 시 '부모창'도 드래그 (0) | 2012.10.10 |
[MFC] GetDlgItem (0) | 2012.10.10 |
[MFC] 비트맵 정보 가져올 때 (0) | 2012.10.10 |
[MFC] 부모창 이동 할때 쓰려고 만들었으나... (0) | 2012.10.01 |