Àμö |
wParam : ÀÌ ¸Þ½ÃÁö¸¦ º¸³½ ÄÁÆ®·ÑÀÇ IDÀÌ´Ù. ¸Þ´º Ç׸ñÀÇ °æ¿ì´Â 0ÀÌ Àü´ÞµÈ´Ù. lParam : ±×·ÁÁú Ç׸ñ¿¡ ´ëÇÑ Á¤º¸°¡ ´ã±ä ´ÙÀ½ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍÀÌ´Ù. ¿À³Ê´Â ÀÌ ±¸Á¶Ã¼ÀÇ ³»¿ëÀ» ÂüÁ¶ÇÏ¿© ÄÁÆ®·ÑÀ̳ª ¸Þ´º Ç׸ñÀ» ±×¸°´Ù. typedef struct tagDRAWITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemAction; UINT itemState; HWND hwndItem; HDC hDC; RECT rcItem; ULONG_PTR itemData; } DRAWITEMSTRUCT; CtlType : ÄÁÆ®·ÑÀÇ Å¸ÀÔ°ª
CtlID : ÄÁÆ®·ÑÀÇ IDÀÌ¸ç ¸Þ´º Ç׸ñÀº ÀÌ ¸â¹ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. itemID : ¸Þ´º Ç׸ñÀÇ ID ¶Ç´Â ¸®½ºÆ® ¹Ú½º³ª ÄÞº¸ ¹Ú½ºÀÇ Ç׸ñ À妽ºÀÌ´Ù. ¸®½ºÆ® ¹Ú½º³ª ÄÞº¸ ¹Ú½º°¡ ºñ¾î ÀÖÀ» °æ¿ì ÀÌ °ªÀº -1ÀÌ Àü´ÞµÇ´Âµ¥ ÀÌ´Â Ç׸ñÀÌ ¾ø´õ¶óµµ Æ÷Ä¿½º »ç°¢ÇüÀÌ¶óµµ ±×·Á Æ÷Ä¿½º¸¦ °¡Áö°í ÀÖÀ½À» º¸¿© ÁÖ±â À§ÇؼÀÌ´Ù. itemAction : Ç׸ñÀ» ±×¸± ¹æ¹ýÀ» ÁöÁ¤ÇÑ´Ù.
itemState : Ç׸ñÀÌ ¾î¶»°Ô º¸¿©Á®¾ß ÇÒ Áö¸¦ ÁöÁ¤ÇÏ¸ç ´ÙÀ½ °ªÀÇ Á¶ÇÕ°ªÀ¸·Î Ç¥ÇöµÈ´Ù.
hwndItem : ÄÁÆ®·ÑÀÇ ÇÚµéÀÌ´Ù. ¸Þ´ºÀÇ °æ¿ì ¸Þ´º Ç׸ñÀ» °¡Áø ¸Þ´º ÇÚµéÀÌ µÈ´Ù. hDC : ±×¸®±â¿¡ »ç¿ëÇÒ DC ÇÚµéÀÌ¸ç ¹Ýµå½Ã ÀÌ DC¸¦ »ç¿ëÇÏ¿© ±×·ÁÁ®¾ß ÇÑ´Ù. rcItem : ÄÁÆ®·ÑÀÌ ±×·ÁÁ®¾ßÇÒ »ç°¢ ¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù. ¿À³Ê´Â ÀÌ ¿µ¿ª ¾È¿¡¼¸¸ ±×¸®±â¸¦ ÇØ¾ß Çϸç ÀÌ ¿µ¿ªÀ» ¹þ¾î³ Ãâ·ÂÀº Àß·Á ³ª°£´Ù. ´Ü, ¸Þ´º Ç׸ñÀÇ °æ¿ì´Â Àß·Á ³ª°¡Áö ¾ÊÀ¸¹Ç·Î ÀÌ ¿µ¿ª ¿ÜºÎ¿¡ ±×¸®Áö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. itemData : ¸Þ´º Ç׸ñ¿¡ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á¤ÀÇÇÑ Ç׸ñ µ¥ÀÌÅÍÀÌ´Ù. ¸®½ºÆ® ¹Ú½º, ÄÞº¸ ¹Ú½ºÀÇ °æ¿ì LB(CB) _SETITMEDATA ¸Þ½ÃÁö·Î Ç׸ñ¿¡ Ãß°¡ÇÑ Ç׸ñ µ¥ÀÌÅÍÀÌ´Ù. ¹öÆ°À̳ª ½ºÅà ÄÁÆ®·ÑÀº Ç׸ñ µ¥ÀÌÅ͸¦ °¡ÁöÁö ¾ÊÀ¸¹Ç·Î ÀÌ ¸â¹ö´Â Ç×»ó 0ÀÌ´Ù. |
||||||||||||||||||||||||||||||||||||||||||||||||
¼³¸í |
¿À³Ê µå·Î¿ì ¹öÆ°, ¸®½ºÆ® ¹Ú½º, ÄÞº¸ ¹Ú½º, ¸Þ´º°¡ ±×·ÁÁ®¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ ¿À³Ê À©µµ¿ì¿¡°Ô ÀÌ ¸Þ½ÃÁö°¡ Àü´ÞµÈ´Ù. ¿À³Ê´Â lParamÀ¸·Î Àü´ÞµÈ ÄÁÆ®·ÑÀÇ Á¾·ù¿Í »óÅ¿¡ µû¶ó ÄÁÆ®·ÑÀ» ÀûÀýÈ÷ ±×·Á ÁÖ¾î¾ß ÇÒ Ã¥ÀÓÀÌ ÀÖ´Ù. ¸¸¾à ¿À³Ê µå·Î¿ì ¸®½ºÆ® ¹Ú½º¸¦ °¡Áø À©µµ¿ì°¡ ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾Ê°í DefWindowProcÀ¸·Î º¸³»¸é Æ÷Ä¿½º »ç°¢Çü¸¸ ±×·ÁÁø´Ù. lParamÀÇ DRAWITEMSTRUCT¿¡´Â Ç׸ñ ±×¸®±â¿¡ »ç¿ëÇÒ DCÀÇ ÇÚµé°ú Ãâ·Â ¿µ¿ªÀÌ Àü´ÞµÇ´Âµ¥ ÀÌ Á¤º¸¸¦ ÂüÁ¶ÇÏ¿© ±×¸®µÇ DC´Â ¹Ýµå½Ã ¿ø·¡ »óÅ´ë·Î À¯ÁöÇØ ÁÖ¾î¾ß ÇÑ´Ù. DC¿¡ Ä¿½ºÅÒ ÆæÀ̳ª ºê·¯½Ã¸¦ ¼±ÅÃÇØ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ±× ÀÌÀü °´Ã¼¸¦ ¹Ýµå½Ã º¹±¸½ÃÄÑ ÁÖ¾î¾ß ÇÑ´Ù. |
||||||||||||||||||||||||||||||||||||||||||||||||
¸®ÅÏ |
ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇßÀ¸¸é TRUE¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù. |
||||||||||||||||||||||||||||||||||||||||||||||||
¿¹Á¦ |
´ÙÀ½ ¿¹Á¦´Â °íÁ¤ ³ôÀÌÀÇ ¿À³Ê µå·Î¿ì ¸®½ºÆ® ¹Ú½º¸¦ ±×¸°´Ù. HWND hList; LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; LPMEASUREITEMSTRUCT lpmis; LPDRAWITEMSTRUCT lpdis; HBRUSH bkBrush, hBrush, OldBrush; switch(iMessage) { case WM_CREATE: hList=CreateWindow("listbox",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | LBS_NOTIFY | LBS_OWNERDRAWFIXED, 10,10,110,200,hWnd,(HMENU)0,g_hInst,NULL); SendMessage(hList,LB_ADDSTRING,0,(LPARAM)RGB(255,0,0)); SendMessage(hList,LB_ADDSTRING,0,(LPARAM)RGB(0,255,0)); SendMessage(hList,LB_ADDSTRING,0,(LPARAM)RGB(0,0,255)); return 0; case WM_MEASUREITEM: lpmis=(LPMEASUREITEMSTRUCT)lParam; lpmis->itemHeight=30; return TRUE; case WM_DRAWITEM: lpdis=(LPDRAWITEMSTRUCT)lParam; if (lpdis->itemState & ODS_SELECTED) { bkBrush=CreateSolidBrush(RGB(255,255,0)); } else { bkBrush=CreateSolidBrush(RGB(255,255,255)); } FillRect(lpdis->hDC, &lpdis->rcItem, bkBrush); if (lpdis->itemState & ODS_FOCUS) { DrawFocusRect(lpdis->hDC,&lpdis->rcItem); } hBrush=CreateSolidBrush(lpdis->itemData); OldBrush=(HBRUSH)SelectObject(lpdis->hDC,hBrush); Rectangle(lpdis->hDC,lpdis->rcItem.left+5,lpdis->rcItem.top+5, lpdis->rcItem.right-5,lpdis->rcItem.bottom-5); SelectObject(lpdis->hDC,OldBrush); DeleteObject(hBrush); DeleteObject(bkBrush); return TRUE; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } ¸®½ºÆ® ¹Ú½º¿¡´Â ¼¼°¡Áö »ö»óÀÇ »ç°¢ÇüÀÌ µî·ÏµÇ¾î ÀÖÀ¸¸ç »ö»ó°ªÀ» °¢ Ç׸ñÀÇ Ç׸ñ µ¥ÀÌÅÍ¿¡ ±â¾ï½ÃÄÑ ÁÖ¾ú´Ù. LBS_OWNERDRAWFIXED ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇßÀ¸¹Ç·Î ¸®½ºÆ® ¹Ú½ºÀÇ °¢ Ç׸ñµéÀº ¸ðµÎ ³ôÀÌ°¡ °°À¸¸ç ÀÌ ³ôÀÌ´Â WM_MEASUREITEM ¸Þ½ÃÁö¿¡¼ 30Çȼ¿·Î ´ëÀÔÇØ ÁÖ¾ú´Ù. °¢ Ç׸ñÀ» ±×·Á¾ß ÇÒ ¶§ ¸®½ºÆ® ¹Ú½º´Â ºÎ¸ð À©µµ¿ì¿¡°Ô WM_DRAWITEM ¸Þ½ÃÁö¸¦ º¸³»ÁÖ¸ç ºÎ¸ð À©µµ¿ì´Â ÀÌ ¸Þ½ÃÁöÀÇ lParamÀ¸·Î Àü´ÞµÈ DRAWITEMSTRUCTURE¸¦ Âü°íÇÏ¿© Ç׸ñÀ» ±×¸°´Ù. Ç׸ñÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ³ë¶õ»ö ¹è°æÀ» ±×¸®µµ·Ï ÇßÀ¸¸ç Æ÷Ä¿½º¸¦ °¡Áö°í ÀÖÀ¸¸é Æ÷Ä¿½º »ç°¢Çüµµ °°ÀÌ ±×·Á ÁÖ¾ú´Ù. ±×¸®±â°¡ ³¡³ª¸é DC´Â ¹Ýµå½Ã ¿ø·¡´ë·Î µ¹·Á ³õ¾Æ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â °¡º¯ ³ôÀ̸¦ °¡Áö´Â ¿À³Ê µå·Î¿ì ¸®½ºÆ® ¹Ú½º¸¦ ±×¸°´Ù. HWND hList; struct tagItem { COLORREF col; int height; } Items[3]={ {RGB(255,0,0),20}, {RGB(0,255,0),30}, {RGB(0,0,255),40}, }; LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; LPMEASUREITEMSTRUCT lpmis; LPDRAWITEMSTRUCT lpdis; HBRUSH bkBrush, hBrush, OldBrush; switch(iMessage) { case WM_CREATE: hList=CreateWindow("listbox",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | LBS_NOTIFY | LBS_OWNERDRAWVARIABLE, 10,10,110,200,hWnd,(HMENU)0,g_hInst,NULL); SendMessage(hList,LB_ADDSTRING,0,(LPARAM)&Items[0]); SendMessage(hList,LB_ADDSTRING,0,(LPARAM)&Items[1]); SendMessage(hList,LB_ADDSTRING,0,(LPARAM)&Items[2]); return 0; case WM_MEASUREITEM: lpmis=(LPMEASUREITEMSTRUCT)lParam; lpmis->itemHeight=((tagItem *)lpmis->itemData)->height; return TRUE; case WM_DRAWITEM: lpdis=(LPDRAWITEMSTRUCT)lParam; if (lpdis->itemState & ODS_SELECTED) { bkBrush=CreateSolidBrush(RGB(255,255,0)); } else { bkBrush=CreateSolidBrush(RGB(255,255,255)); } FillRect(lpdis->hDC, &lpdis->rcItem, bkBrush); if (lpdis->itemState & ODS_FOCUS) { DrawFocusRect(lpdis->hDC,&lpdis->rcItem); } hBrush=CreateSolidBrush(((tagItem *)lpdis->itemData)->col); OldBrush=(HBRUSH)SelectObject(lpdis->hDC,hBrush); Rectangle(lpdis->hDC,lpdis->rcItem.left+5,lpdis->rcItem.top+5, lpdis->rcItem.right-5,lpdis->rcItem.bottom-5); SelectObject(lpdis->hDC,OldBrush); DeleteObject(hBrush); DeleteObject(bkBrush); return TRUE; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } °¢ Ç׸ñÀº ÀÚ½ÅÀÇ ³ôÀÌ¿Í »ö»ó¿¡ ´ëÇÑ Á¤º¸¸¦ Ç׸ñ µ¥ÀÌÅÍ·Î Á¤ÀÇÇÏ°í ÀÖÀ¸¸ç WM_MEASUREITEM ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ Ç׸ñÀÇ ³ôÀ̸¦ Á¶»çÇØ ÁÖ¾ú°í WM_DRAWITEM¿¡¼´Â Àü´ÞµÈ ±×¸®±â ¿µ¿ª¿¡ Ç׸ñÀ» ±×¸°´Ù. |
||||||||||||||||||||||||||||||||||||||||||||||||
Ç÷§Æû |
95ÀÌ»ó |
||||||||||||||||||||||||||||||||||||||||||||||||
ÂüÁ¶ |
|
written by http://www.winapi.co.kr
|