CListCtrl 포커스 해제시 selection color 유지하기

2015. 8. 21. 13:25IT-개발/winapi 및 MFC

반응형

ㅠㅠ.. 오랫만에 또 삽질 함... 것두~ 인터넷에 올려진 가짜 자료들로 인해~~


구글링해보면~ "CListCtrl 포커스 해제시 selection color 유지하기" 요 제목으로


올려진 코드가 있다.


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
32
33
34
35
afx_msg void OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
    switch(lplvcd->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;
 
    case CDDS_ITEMPREPAINT:
        {
            *pResult = CDRF_DODEFAULT;
 
            POSITION pos = GetFirstSelectedItemPosition();
            int nSel = GetNextSelectedItem(pos);
 
            int row = (int)lplvcd->nmcd.dwItemSpec;
            if( row == nSel )
            {
                lplvcd->clrText = GetSysColor(COLOR_HIGHLIGHTTEXT);
                lplvcd->clrTextBk = GetSysColor(COLOR_HIGHLIGHT);
            }
            else
            {
                lplvcd->clrText = RGB(0,0,0);
                lplvcd->clrTextBk = RGB(255,255,255);
            }
        }
        break;
 
    default:
        *pResult = CDRF_DODEFAULT;
        break;
    }
}

단, tree 스타일에 LVS_SHOWSELALWAYS 속성이 있으면 안된다.

(control property -> Always show selection = false) 


=> 이거??? 않된다.!!!!!!!!! 자기들이 해보지도 않고~ 올리고~.. 짱남~


Dialog에 버튼이나 다른거 UI 클릭해버리면 Focus 잃으면서 Selection Color 유지 못함~~


근데~ 구글링 하면 이 sample 코드만 두르륵~ Test 해봅시다~


그러다가 코드구루에서 외국인 형님이 되는거 올려줌~ 


http://forums.codeguru.com/showthread.php?396804-CListCtrl-selection-color


여기에 올려진 소스 File Type: zip SelectList2.zip   


활용하세요~ 이건 잘 됩디다... CDDS_ITEMPREPAINT | CDDS_SUBITEM 이런게 뭐냐~ 이런건


이글 보는 분들이 양심상 알아서 찾아볼 거라 생각해여~ 모르는 나도 문제지만~ 잘못된걸 올리는 사람들도


좀 그렇네요~~