¼ÒÀ¯ÀÚ°¡ ±×¸° ´ÜÃ߸¦ »ç¿ë ÇÏ ¿©

¼ÒÀ¯ÀÚ°¡ ±×¸° ´ÜÃßÀÇ ºÎ¸ð â ÀϹÝÀûÀ¸·Î ¹öư¿¡ ´ë ÇÑ ÃÖ¼ÒÇÑ 3 °³ÀÇ ¸Þ½ÃÁö¿¡ ÀÀ´ä: WM_INITDIALOG, WM_COMMAND¹× WM_DRAWITEM. ¼ÒÀ¯ÀÚ°¡ ±×¸° ´ÜÃß¿¡ ´ë ÇÑ WM_MEASUREITEM ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

¼ÒÀ¯ÀÚ°¡ ±×¸° ´ÜÃß ÆäÀÎÆ® ÇØ¾ß ÇÕ´Ï´Ù ½Ã½ºÅÛ WM_DRAWITEM ¸Þ½ÃÁöÀÇ lParam DRAWITEMSTRUCT ±¸Á¶¸¦ °¡¸®Å°´Â ºÎ¸ð À©µµ¿ì¸¦ º¸³À´Ï´Ù. ¸ðµç ¼ÒÀ¯ÀÚ À§ÁÖ ÄÁÆ®·ÑÀÌ ±¸Á¶¸¦ »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ÄÁÆ®·ÑÀ» ÆäÀÎÆ® ÇÏ´Â µ¥ ÇÊ¿äÇÑ Á¤º¸¸¦ Á¦°ø ÇÕ´Ï´Ù. DRAWITEMSTRUCT ±¸Á¶Ã¼ÀÇ itemAction ¹× itemState ¸â¹ö´Â ¼ÒÀ¯ÀÚ°¡ ±×¸° ´ÜÃ߸¦ ±×¸®´Â ¹æ¹ýÀ» Á¤ÀÇÇÕ´Ï´Ù.

´ÙÀ½ ¿¹Á¦¿¡¼­´Â ¼ÒÀ¯ÀÚ°¡ ±×¸° ´ÜÃß WM_INITDIALOG, WM_DRAWITEM, WM_COMMAND ¸Þ½ÃÁö¸¦ ó¸® ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼­´Â ÄÁÆ®·ÑÀÇ ¼±Åà ¿©ºÎ¿¡ µû¶ó ÄÁÆ®·Ñ¿¡ ´ë ÇÑ µÎ °¡Áö ºñÆ®¸Ê Áß Çϳª¸¦ ±×¸®´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù. WM_DRAWITEM ¸Þ½ÃÁöÀÇ wParam ¸Å°³ º¯¼ö¸¦ »ç¿ë ÇÏ ¿© ÄÁÆ®·Ñ; ½Äº° ÇÏ´Â ÀϹÝÀûÀ¸·Î ÀÌ ¿¹Á¦¿¡¼­ ´Ü ÇϳªÀÇ Á¦¾î °¡Á¤.

BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam, 
                          LPARAM lParam) 
{ 
    HDC hdcMem; 
    LPDRAWITEMSTRUCT lpdis; 
 
    switch (message) 
    { 
        case WM_INITDIALOG: 
 
            // hinst, hbm1 and hbm2 are defined globally. 
            hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1"); 
            hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2"); 
            return TRUE; 
 
        case WM_DRAWITEM: 
            lpdis = (LPDRAWITEMSTRUCT) lParam; 
            hdcMem = CreateCompatibleDC(lpdis->hDC); 
 
            if (lpdis->itemState & ODS_SELECTED)  // if selected 
                SelectObject(hdcMem, hbm2); 
            else 
                SelectObject(hdcMem, hbm1); 
 
            // Destination 
            StretchBlt( 
                lpdis->hDC,         // destination DC 
                lpdis->rcItem.left, // x upper left 
                lpdis->rcItem.top,  // y upper left 
 
                // The next two lines specify the width and 
                // height. 
                lpdis->rcItem.right - lpdis->rcItem.left, 
                lpdis->rcItem.bottom - lpdis->rcItem.top, 
                hdcMem,    // source device context 
                0, 0,      // x and y upper left 
                32,        // source bitmap width 
                32,        // source bitmap height 
                SRCCOPY);  // raster operation 
 
            DeleteDC(hdcMem); 
            return TRUE; 
 
        case WM_COMMAND: 
            if (wParam == IDOK 
                || wParam == IDCANCEL) 
            { 
                EndDialog(hDlg, TRUE); 
                return TRUE; 
            } 
            if (HIWORD(wParam) == BN_CLICKED) 
            { 
                switch (LOWORD(wParam)) 
                { 
                    case IDC_OWNERDRAW: 
 
                        // application-defined processing 
 
                        break; 
                } 
            } 
            break; 
 
        case WM_DESTROY: 
            DeleteObject(hbm1);  // delete bitmaps 
            DeleteObject(hbm2); 
 
            break; 
 
    } 
    return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} 
 

 

Index