| Àμö |
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
|