* ÀÌ ÀڷḦ ÆÛ °¡¼Å¼ Ÿ»çÀÌÆ®³ª ºí·Î±×¿¡ °ÔÀç ½Ã Ãâó¸¦ ¸í½ÃÇØ Áֽñ⠹ٶø´Ï´Ù.
º» »çÀÌÆ®¿¡ °ÔÀçµÈ ¸ðµç ³»¿ë ¹× ÀÚ·á´Â »ó¾÷ÀûÀÎ ¿ëµµ·Î ÀÌ¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
WM_NOTIFY ¸Þ½ÃÁö´Â ¿ì¸®°¡ ÇÁ·Î±×·¥ÇÏ¸é¼ ¸¹ÀÌ »ç¿ëÇÏ´Â ¸Þ½ÃÁö Áß¿¡ ÇϳªÀÔ´Ï´Ù.
ÇÏÁö¸¸ ±× ¿ë¹ýÀ̳ª Àǵµ¸¦ Á¦´ë·Î ÀÌÇØÇÏÁö ¸øÇÏ°í »ç¿ëÇÏ´Â »ç¶÷µéÀÌ ¸¹¾Æ¼
MSDNÀÇ Technical note 61¹øÀÇ ³»¿ëÀ» ±Ù°Å·Î °£´ÜÇÑ ¼Ò°³±ÛÀ» ¸¸µé¾ú½À´Ï´Ù.
1. Å뺸(Notify) ¸Þ½ÃÁöÀÇ Çʿ伺
WM_NOTIFY ¸Þ½ÃÁö´Â ÀϹÝÀûÀ¸·Î ÀÚ½ÄÀ©µµ¿ì(¿¹, ÄÁÆ®·Ñ-¹öư,¿¡µðÆ®¹Ú½º, ...)°¡ Àڽſ¡°Ô
ÀÏ¾î³ ¿©·¯°¡Áö »óȲÀ» ºÎ¸ðÀ©µµ¿ì(¿¹, ´ëÈ»óÀÚ)¿¡°Ô Àü´ÞÇÒ¶§ »ç¿ëÇÕ´Ï´Ù.
¿¹¸¦ µé¾î, ´ëÈ»óÀÚ¿¡ ¹öưÀ» Çϳª ¸¸µé¾ú´Ù°í Çϸé ÇØ´ç ¹öưÀ» ´·¶À»¶§ WM_COMMAND ¶ó´Â
¸Þ½ÃÁö°¡ ¹ß»ýÇÕ´Ï´Ù. ÀÌ ¸Þ½ÃÁö´Â ´Ü¼øÇÑ Å뺸(notify)¸¦ ¸ñÀûÀ¸·Î ±¸¼ºµÇ¾ú±â ¶§¹®¿¡
WPARAM¿¡ BN_CLICKED(HI WORD)¿Í ÇØ´ç ÄÁÆ®·ÑÀÇ ID(LOW WORD)°¡ ÀúÀåµÇ°í
LPARAM¿¡ ÇØ´ç ¹öư ÄÁÆ®·ÑÀÇ ÇÚµéÀÌ ÀúÀåµÈ »óÅ·ΠÀü´ÞµË´Ï´Ù.
À§ ±¸¼º¿¡¼ º»°Íó·³ ÀÌ¹Ì WPARAM, LPARAMÀ» ¸ðµÎ »ç¿ëÇØ¹ö·È±â ¶§¹®¿¡ ¹öư ÄÁÆ®·Ñ ÀÔÀå¿¡¼´Â
Ãß°¡ÀûÀÎ Á¤º¸(¸¶¿ì½º Ŭ¸¯ ÁÂÇ¥¿Í °°Àº Á¤º¸)¸¦ Àü´ÞÇÏ°í ½Í¾îµµ Àü´ÞÇÒ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù.
ÄÁÆ®·ÑÀÇ Á¾·ù°¡ ´Ù¾çÇØÁö°í ¿ä±¸»çÇ×ÀÌ º¹ÀâÇØÁü¿¡ µû¶ó¼ À©µµ¿ìÁî ½Ã½ºÅÛÀº Ãß°¡ÀûÀÎ Á¤º¸¸¦
Æ÷ÇÔÇÒ¼ö ÀÖ´Â ¸Þ½ÃÁö°¡ ÇÊ¿äÇÏ°Ô µÇ¾ú°í ¾Æ·¡¿Í °°Àº ¸Þ½ÃÁö°¡ Ãß°¡µÇ¾ú½À´Ï´Ù.
WM_CTLCOLOR, WM_VSCROLL, WM_HSCROLL, WM_DRAWITEM, WM_MEASUREITEM,
WM_COMPAREITEM, WM_DELETEITEM, WM_CHARTOITEM, WM_VKEYTOITEM, ...
2. Win32 ½Ã½ºÅÛ¿¡¼ÀÇ Å뺸 ¸Þ½ÃÁö¿¡ ´ëÇÏ¿©...
Win32 ½Ã½ºÅÛÀº ÇÏÀ§ ½Ã½ºÅÛÀÇ È£È¯¼ºÀ» À¯ÁöÇϱâ À§ÇØ ±âÁ¸ Windows 3.x¿¡¼ »ç¿ëÇÏ´ø ¸Þ½ÃÁöµéÀ»
´ëºÎºÐ ¼ö¿ëÇϰí ÀÖ½À´Ï´Ù. Áï, À§¿¡¼ ¾ð±ÞÇÑ ¸Þ½ÃÁöµéÀº ¸ðµÎ »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù.
±×¸®°í ÇÁ·Î±×·¥ÀÌ º¹ÀâÇØÁö°í ÄÁÆ®·ÑÀÌ ´Ù¾çÇØÁü¿¡ µû¶ó, ÀÌ¹Ì ¸¹Àº ¸Þ½ÃÁö°¡ ÀÖÀ½¿¡µµ ºÒ±¸Çϰí,
¸Þ½ÃÁö Ãß°¡¿¡ ´ëÇÑ ¿ä±¸ »çÇ×ÀÌ ´Ã¾î³ª°Ô µÇ¾ú°í À©µµ¿ìÁî ½Ã½ºÅÛÀº ÇÊ¿äÇÒ¶§¸¶´Ù WM_ ¸Þ½ÃÁö¸¦
Ãß°¡Çؼ ¹®Á¦¸¦ ÇØ°áÇϴµ¥ ÇѰ谡 ÀÖ´Ù´Â°Í ¾Ë°í Å뺸 ¸Þ½ÃÁö¿¡ ´ëÇÑ »õ·Î¿î Ç¥ÁØÀ» Á¤Çß°í
±×°ÍÀÌ WM_NOTIFY ¸Þ½ÃÁö·Î ±¸Ã¼È µÇ¾ú½À´Ï´Ù. WM_NOTIFY ¸Þ½ÃÁöÀÇ Çü½ÄÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
WM_NOTIFY ¸Þ½ÃÁöÀÇ LPARAM¿¡ »ç¿ëµÈ ±¸Á¶Ã¼ÀÇ Çü½ÄÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
typedef struct tagNMHDR {
HWND hwndFrom;
UINT idFrom;
UINT code;
} NMHDR;
NMHDR ±¸Á¶Ã¼¸¦ º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ Ç׸ñÀÌ ³Ê¹« °£´ÜÇØ¼ ´Ù¾çÇÑ Á¤º¸¸¦ ¼ö¿ëÇÒ¸¸ÇÑ ±¸Á¶°¡
¾Æ´Õ´Ï´Ù.
±×·¸´Ù¸é ¾î¶»°Ô ÄÁÆ®·ÑÀÇ ´Ù¾çÇÑ Á¤º¸¸¦ ÀÌ ±¸Á¶Ã¼¸¦ ÀÌ¿ëÇØ¼ Àü´ÞÇÒ¼ö ÀÖÀ»±î¿ä?
±×°Ç LPARAM¿¡ Àü´ÞµÇ´Â Á¤º¸ÀÇ Çü½ÄÀ» »ìÆìº¸¸é Àǹ®ÀÌ Ç®¸³´Ï´Ù.
LPARAM¿¡ ÀúÀåµÈ Á¤º¸´Â NMHDR ±¸Á¶Ã¼ÀÇ ÁÖ¼ÒÀÔ´Ï´Ù. Áï, ±¸Á¶Ã¼ÀÇ Å©±â°¡ ÇÑÁ¤µÇÁö ¾Ê´Ù´Â
¶æÀÔ´Ï´Ù. WM_NOTIFY ¸Þ½ÃÁö´Â Àü´ÞµÇ´Â Á¤º¸ÀÇ ½ÃÀÛÇü½ÄÀ» NMHDR ±¸Á¶Ã¼ Çü½ÄÀ¸·Î Á¤ÇѰÍÀÌÁö
²À Àú ±¸Á¶Ã¼¸¦ »ç¿ëÇ϶ó´Â ¶æÀÌ ¾Æ´Õ´Ï´Ù.
¿¹¸¦ µé¾î, ÀÚ½ÅÀÌ ÄÁÆ®·ÑÀ» Çϳª ¸¸µé¾ú°í ÇØ´ç ÄÁÆ®·ÑÀÌ x, y ÁÂÇ¥Á¤º¸¸¦ ºÎ¸ð¿¡°Ô Åëº¸ÇØ¾ß ÇÑ´Ù¸é
¾Æ·¡¿Í °°ÀÌ ±¸Á¶Ã¼¸¦ Á¤ÀÇÇÏ°í »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
typedef struct tagMyNotifyData {
HWND hwndFrom; // º¯°æºÒ°¡
UINT idFrom; // º¯°æºÒ°¡
UINT code; // º¯°æºÒ°¡
// ÀÚ½ÅÀÌ Ãß°¡ÇÏ°í ½ÍÀº Á¤º¸¸¦ Ãß°¡ÇÏ¸é µË´Ï´Ù.
int x_pos;
int y_pos;
} MyNotifyData;
À§ ±¸Á¶Ã¼¸¦ ¾Æ·¡¿Í °°ÀÌ ¼±¾ðÇØµµ ¸¶Âù°¡Áö ÀÔ´Ï´Ù.
typedef struct tagMyNotifyData {
NMHDR hdr; // º¯°æºÒ°¡
// ÀÚ½ÅÀÌ Ãß°¡ÇÏ°í ½ÍÀº Á¤º¸¸¦ Ãß°¡ÇÏ¸é µË´Ï´Ù.
int x_pos;
int y_pos;
} MyNotifyData;
WM_NOTIFY °ü·Ã 󸮱â´Â LPARAMÀ¸·Î Àü´ÞµÇ´Â ¸Þ½ÃÁöÀÇ ½ÃÀÛÇü½Ä¸¸ NMHDR ±¸Á¶¸¦ ¸¸Á·Çϸé
¾Æ¹«·± ¹®Á¦ ¾øÀÌ µ¿ÀÛÇϵµ·Ï ±¸¼ºµÇ¾îÀֱ⠶§¹®¿¡, ÀÚ½ÅÀÌ Á¤ÀÇÇÏ´Â ±¸Á¶Ã¼ÀÇ ½ÃÀÛ ºÎºÐ¸¸ Á¤È®ÇϰÔ
NMHDR ±¸Á¶Ã¼ Çü½ÄÀ¸·Î ±¸¼ºÇØÁÖ½Ã¸é µË´Ï´Ù.
´ëºÎºÐÀÇ Å뺸 ¸Þ½ÃÁö¸¦ »ç¿ëÇÏ´Â ÄÁÆ®·ÑµéÀº ÀÚ½ÅÀÇ Á¤º¸¸¦ Àü´ÞÇϱâ À§Çؼ NMHDR ±¸Á¶Ã¼º¸´Ù
´õ º¹ÀâÇÑ ÇüÅÂÀÇ ±¸Á¶Ã¼¸¦ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù. ( ÅøÆÁ ÄÁÆ®·ÑÀÌ Å뺸ÇÏ´Â ¸Þ½ÃÁö Áß¿¡ TTN_SHOW,
TTN_POP °°Àº ¸Þ½ÃÁö´Â Ưº°ÇÑ Ãß°¡ Á¤º¸°¡ ¾ø¾î¼ NMHDR ±¸Á¶¸¦ ±×´ë·Î »ç¿ëÇϰí ÀÖ½À´Ï´Ù. )
WM_NOTIFY ¸Þ½ÃÁö´Â Å뺸 ¸Þ½ÃÁöÀÇ ´ëÇ¥ ¸Þ½ÃÁöÀ̰í, ÀÚ½ÅÀÌ Àü´ÞÇÏ°í ½ÍÀº Å뺸 ¸Þ½ÃÁö ÄÚµå´Â
NMHDR ±¸Á¶Ã¼ÀÇ code Ç׸ñ¿¡ ÀúÀåÇØ¼ Àü´ÞÇÏ¸é µÈ´Ù. µû¶ó¼ ¹Þ´Â ÂÊ¿¡¼´Â ÇØ´ç Å뺸 ¸Þ½ÃÁö°¡
¾î¶² ±¸Á¶Ã¼ÀÎÁö´Â ¸ð¸£Áö¸¸ ±¸Á¶Ã¼ÀÇ ¾ÕºÎºÐÀÌ NMHDR ±¸Á¶Ã¼¿Í Çü½ÄÀÌ °°±â ¶§¹®¿¡ ÀÏ´Ü ÇØ´ç
ÁÖ¼Ò¸¦ NMHDR ±¸Á¶Ã¼·Î Çüº¯È¯(casting)À» ÇÑ ÈÄ¿¡ code Ç׸ñÀ» üũÇÏ¿© ¾î¶² Å뺸 ¸Þ½ÃÁöÀÎÁö¸¦
±¸ºÐÇÏ°í ´Ù½Ã Á¤È®ÇÑ ±¸Á¶Ã¼·Î Çüº¯È¯(casting)À» ÇØ¼ »ç¿ëÇÏ°Ô µË´Ï´Ù.
¿¹¸¦µé¾î, ÀÚ½ÅÀÌ À§¿¡¼ À̾߱âÇÑ MyNotifyData ±¸Á¶Ã¼¸¦ »ç¿ëÇß´Ù°í °¡Á¤Çϰí code¿¡ MN_DATA
¶ó´Â ¸Þ½ÃÁö Äڵ带 ³Ö¾î¼ ºÎ¸ð À©µµ¿ì·Î WM_NOTIFY Çü½ÄÀ¸·Î Àü´ÞÇß´Ù¸é ¹Þ´Â ÂÊ¿¡¼´Â ¾Æ·¡¿Í
°°ÀÌ Ã³¸®ÇÒ °ÍÀÔ´Ï´Ù.
// Å뺸 ¸Þ½ÃÁö´Â ÀϰýÀûÀ¸·Î NM_NOTIFY ·Î Àü´ÞµÇ±â ¶§¹®¿¡ ¾î¶² Å뺸¸Þ½ÃÁö ÀÎÁö¸¦ È®ÀÎÇØ¾ß
// ÇÑ´Ù.
// µû¶ó¼ LPARAM ¿¡ Àü´ÞµÈ ÁÖ¼Ò¸¦ NMHDR·Î Çüº¯È¯Çؼ code°ªÀ» È®ÀÎÇØ¾ß ÇÑ´Ù.
NMHDR *p_hdr = (NMHDR *)lParam;
if( p_hdr->code == MN_DATA ){
// Àü´ÞµÈ Å뺸 ¸Þ½ÃÁö°¡ MN_DATAÀÎ °æ¿ì
MyNotifyData *p_my_data = (MyNotifyData *)lParam;
// p_my_data ¸¦ »ç¿ë...
} else {
// ´Ù¸¥ Å뺸 ¸Þ½ÃÁöÀÎÁö¸¦ üũ
}
3. WM_NOTIFY¸¦ »ç¿ëÇÏ´Â ÄÁÆ®·Ñ¿¡¼ °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â ¸Þ½ÃÁöµé¿¡ ´ëÇÏ¿©..
|
Å뺸 ¸Þ½ÃÁö ÄÚµå
|
Å뺸 ³»¿ë
|
| NM_CLICK |
»ç¿ëÀÚ°¡ ÇØ´ç ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» Ŭ¸¯ÇÑ °æ¿ì ¹ß»ý |
| NM_DBLCLK |
»ç¿ëÀÚ°¡ ÇØ´ç ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» ´õºí Ŭ¸¯ÇÑ °æ¿ì ¹ß»ý |
| NM_RCLICK |
»ç¿ëÀÚ°¡ ÇØ´ç ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÑ °æ¿ì ¹ß»ý |
| NM_RDBLCLK |
»ç¿ëÀÚ°¡ ÇØ´ç ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´õºí Ŭ¸¯ÇÑ °æ¿ì ¹ß»ý |
| NM_RETURN |
ÇØ´ç ÄÁÆ®·ÑÀÌ Æ÷Ä¿½º¸¦ °¡Áö°í ÀÖ´Â »óÅ¿¡¼ ENTER ۸¦ ´©¸¥
°æ¿ì ¹ß»ý |
| NM_SETFOCUS |
ÇØ´ç ÄÁÆ®·ÑÀÌ ÀÔ·Â Æ÷Ä¿½º¸¦ ȹµæÇÑ °æ¿ì ¹ß»ý |
| NM_KILLFOCUS |
ÇØ´ç ÄÁÆ®·ÑÀÌ ÀÔ·Â Æ÷Ä¿½º¸¦ ÀÒ¾î¹ö¸° °æ¿ì ¹ß»ý |
| NM_OUTOFMEMORY |
ÇØ´ç ÄÁÆ®·ÑÀÌ ¸Þ¸ð¸® ºÎÁ·À¸·Î ¸í·É ¼öÇà¿¡ ½ÇÆÐÇÑ °æ¿ì ¹ß»ý |
[ 2 Æí¿¡¼ °è¼ÓÇϰڽÀ´Ï´Ù. ]