ÀÚµ¿·Î±×ÀÎ
ÇöÀçÁ¢¼ÓÀÚ : 26 (ȸ¿ø 0)
¿À´Ã:172, ¾îÁ¦:733,
Àüü:740,460
 
ÇÁ·Î±×·¡¹Ö Q&A
ȸ¿øÁ¦°ø »ùÇüҽº
º£½ºÆ® Q&A
MFC/API °¡À̵å
¿ì¸®µé À̾߱â

Ȩ > Ä¿¹Â´ÏƼ > MFC/API °¡À̵å

  [°­ÁÂ/¸Þ½ÃÁö] WM_NOTIFY ¸Þ½ÃÁö¿¡ ´ëÇØ¼­...(ON_NOTIFY) - 1Æí
  °ü¸®ÀÚ      Date : 07-11-30 20:41     Hit : 2422    
  Æ®·¢¹é ÁÖ¼Ò : http://www.tipssoft.com/bulletin/tb.php/FAQ/63
* ÀÌ ÀڷḦ ÆÛ °¡¼Å¼­ Ÿ»çÀÌÆ®³ª ºí·Î±×¿¡ °ÔÀç ½Ã Ãâó¸¦ ¸í½ÃÇØ Áֽñ⠹ٶø´Ï´Ù. 
  º» »çÀÌÆ®¿¡ °ÔÀçµÈ ¸ðµç ³»¿ë ¹× ÀÚ·á´Â »ó¾÷ÀûÀÎ ¿ëµµ·Î ÀÌ¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
 
 

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 Æí¿¡¼­ °è¼ÓÇϰڽÀ´Ï´Ù. ]


½ºÆåÆ®¶ó¯   07-12-03 12:25
Àß º¸°í °©´Ï´Ù.
¾î¸°¿ÕÀÚ²Þ¡¦   08-09-04 11:05
Á¤¸® °¨»çÇÕ´Ï´Ù