ÀÌ ³ëÆ®¿¡¼´Â ÀÚü ±×¸®±â »ç¿ëÀÚ Á¤ÀÇ ÄÁÆ®·Ñ¿¡ ´ë ÇÑ MFC Áö¿øÀ» ¼³¸í ÇÕ´Ï´Ù. µ¿Àû ¼ºêŬ·¡½Ìµµ ¼³¸í ÇÏ °í ÀÖ½À´Ï´Ù. HWNDs ´ë CWnd °³Ã¼ÀÇ ¼ÒÀ¯±Ç¿¡ ´ë ÇÑ ÀϹÝÀûÀÎ Á¶¾ðÀ» Á¦½ÃÇÕ´Ï´Ù¡£
CTRLTEST MFC »ùÇà ÀÀ¿ë ÇÁ·Î±×·¥Àº ÀÌ·¯ÇÑ ±â´É Áß ¸¹Àº º¸¿© ÁÝ´Ï´Ù. MFC ÀÏ¹Ý »ùÇÿ¡ ´ë ÇÑ ¼Ò½º Äڵ带 ÂüÁ¶ ÇϽʽÿÀ CTRLTEST ¹× ¿Â¶óÀÎ µµ¿ò¸»¡£
¼ÒÀ¯ÀÚ ±×¸®±â ÄÁÆ®·Ñ/¸Þ´º
Windows "¼ÒÀ¯ÀÚ ±×¸®±â" ÄÁÆ®·Ñ ¹× ¸Þ´º¿¡ ´ë ÇÑ Áö¿øÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÄÁÆ®·ÑÀÌ ³ª ¸Þ´ºÀÇ µ¿ÀÛ°ú ¸ð¾çÀ» »ç¿ëÀÚ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ÄÁÆ®·ÑÀÌ ³ª ¸Þ´ºÀÇ ºÎ¸ð â¿¡ º¸³»´Â À©µµ¿ì ¸Þ½ÃÁö´Â¡£
MFC ¸Þ½ÃÁö ¸Ê Ç׸ñ ¼ÒÀ¯ÀÚ ±×¸®±â¸¦ Á÷Á¢ Áö¿ø:
CWnd¿¡ ÀÌ·¯ÇÑ ¹«½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù-ÆÄ»ý Ŭ·¡½º (ÀϹÝÀûÀ¸·Î ´ëÈ »óÀÚ ¶Ç´Â ÁÖ ÇÁ·¹ÀÓ Ã¢) ¼ÒÀ¯ÀÚ ±×¸®±â µ¿ÀÛÀ» ±¸Çö ÇÏ·Á¸é¡£
ÀÌ ¹æ¹ýÀº Àç»ç¿ë °¡´ÉÇÑ Äڵ带 ¸®µå ÇÏÁö ¾Ê½À´Ï´Ù. µÎ °³ÀÇ À¯»çÇÑ ÄÁÆ®·ÑÀÌ µÎ °³ÀÇ ¼·Î ´Ù¸¥ ´ëÈ »óÀÚ¿¡ ÀÖ´Â µÎ À§Ä¡¿¡¼ »ç¿ëÀÚ ÁöÁ¤ ÄÁÆ®·Ñ µ¿ÀÛÀ» ±¸Çö ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°á ÇÏ´Â ÀÚü ±×¸®±â ÄÁÆ®·Ñ MFC Áö¿ø ¾ÆÅ°ÅØÃ³¡£
ÀÚü ±×¸®±â ÄÁÆ®·Ñ ¹× ¸Þ´º
MFC Ç¥ÁØ ¼ÒÀ¯ÀÚ ±×¸®±â ¸Þ½ÃÁö¿¡ ´ë ÇÑ ±âº» ±¸Çö ( CWnd CMenu¿¡¼)À» Á¦°øÇÕ´Ï´Ù. ÀÌ ±âº» ±¸ÇöÀº ¼ÒÀ¯ÀÚ ±×¸®±â ¸Å°³ º¯¼ö ÇØµ¶ ÇÏ °í ¼ÒÀ¯ÀÚ ±×¸®±â ¸Þ½ÃÁö¸¦ ÄÁÆ®·Ñ Çϰųª ¸Þ´º¸¦ À§ÀÓ ÇÕ´Ï´Ù. ÀÌ À̶ó°í "self-draw" ÄÁÆ®·Ñ ¶Ç´Â ¼ÒÀ¯ÀÚ Ã¢¿¡ ¸Þ´º Ŭ·¡½º¿¡¼ ±×¸®±â (/ ÃøÁ¤/ºñ±³) ÄÚµå´Â ÀÌÈÄ¡£
ÀÌ ±â´ÉÀ» »ç¿ë Çϸé "¼ÒÀ¯ÀÚ ±×¸®±â" Àǹ̷ÐÀ» »ç¿ë ÇÏ ¿© ÄÁÆ®·ÑÀ» Ç¥½Ã ÇÏ´Â Àç»ç¿ë °¡´ÉÇÑ ÄÁÆ®·Ñ Ŭ·¡½º¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. Control Ŭ·¡½º¿¡¼ ÄÁÆ®·ÑÀÌ ¾Æ´Ï¶ó ÄÁÆ®·ÑÀÇ ¼ÒÀ¯ÀÚ ±×¸®±â¿¡ ´ë ÇÑ Äڵ尡ÀÔ´Ï´Ù. À̰ÍÀº »ç¿ëÀÚ ÁöÁ¤ ÄÁÆ®·Ñ ÇÁ·Î±×·¡¹Ö °³Ã¼ ÁöÇâ Á¢±Ù¡£
CButton:DrawItem(LPDRAWITEMSTRUCT);
nbsp;????? / /ÀÌ ¹öưÀ» ¹«½ÂºÎ(&N)
CMenu:MeasureItem(LPMEASUREITEMSTRUCT);
nbsp;????? / /ÀÌ ¸Þ´º¿¡ ÀÖ´Â Ç׸ñÀÇ Å©±â¸¦ ÃøÁ¤
CMenu:DrawItem(LPDRAWITEMSTRUCT);
?????? / /ÀÌ ¸Þ´º Ç׸ñÀ» ±×¸®±â(&N)
CListBox:MeasureItem(LPMEASUREITEMSTRUCT);
nbsp;????? / /ÀÌ ¸ñ·Ï »óÀÚ¿¡ ÀÖ´Â Ç׸ñÀÇ Å©±â¸¦ ÃøÁ¤
CListBox:DrawItem(LPDRAWITEMSTRUCT);
?????? / /ÀÌ ¸ñ·Ï »óÀÚ¿¡¼ Ç׸ñÀ» ±×¸®±â
CListBox:CompareItem(LPCOMPAREITEMSTRUCT);
?????? / / ¸¸¾àÀÌ ¸ñ·Ï »óÀÚ¿¡ ÀÖ´Â µÎ Ç׸ñÀ» ºñ±³ LBS_SORT
CListBox:DeleteItem(LPDELETEITEMSTRUCT);
?????? / /ÀÌ ¸ñ·Ï »óÀÚ¿¡¼ Ç׸ñ »èÁ¦(&N)
CComboBox:MeasureItem(LPMEASUREITEMSTRUCT);
nbsp;????? / /ÀÌ ÄÞº¸ »óÀÚ¿¡ ÀÖ´Â Ç׸ñÀÇ Å©±â¸¦ ÃøÁ¤
CComboBox:DrawItem(LPDRAWITEMSTRUCT);
?????? / /ÀÌ ÄÞº¸ »óÀÚ¿¡¼ Ç׸ñÀ» ±×¸®±â
CComboBox:CompareItem(LPCOMPAREITEMSTRUCT);
?????? / / ¸¸¾àÀÌ ÄÞº¸ »óÀÚ¿¡ ÀÖ´Â µÎ Ç׸ñÀ» ºñ±³ CBS_SORT
CComboBox:DeleteItem(LPDELETEITEMSTRUCT);
?????? / /ÀÌ ÄÞº¸ »óÀÚ¿¡¼ Ç׸ñ »èÁ¦(&N)
¼ÒÀ¯ÀÚ ±×¸®±â¿¡ ´ë ÇÑ ³»¿ëÀº ±¸Á¶ (DRAWITEMSTRUCT, MEASUREITEMSTRUCT, COMPAREITEMSTRUCT¹× DELETEITEMSTRUCT)¸¦ ÂüÁ¶ ÇϽʽÿÀ CWnd::OnDrawItem, CWnd::OnMeasureItem, CWnd::OnCompareItem¹× CWnd::OnDeleteItem ¿¡ ´ë ÇÑ MFC ¼³¸í¼ °¢°¢¡£
ÀÚü ±×¸®±â ÄÁÆ®·Ñ ¹× ¸Þ´º »ç¿ë
MeasureItem ¹× DrawItem ¸â¹ö ÇÔ¼ö¸¦ ÀçÁ¤ÀÇ ÇØ¾ß ÇÕ´Ï´Ù ÀÚü ±×¸®±â ¸Þ´º¿¡ ´ë ÇÑ¡£
¸ñ·Ï »óÀÚ¿Í ÄÞº¸ »óÀÚ¸¦ self-drawing¿¡ ´ë ÇÑ MeasureItem ¹× DrawItem¸¦ ÀçÁ¤ÀÇ ÇØ¾ß ÇÕ´Ï´Ù. OWNERDRAWVARIABLE ½ºÅ¸ÀÏ ´ëÈ ¼½Ä ÆÄÀÏ¿¡ ÁöÁ¤ ÇØ¾ß ÇÕ´Ï´Ù (LBS_OWNERDRAWVARIABLE ¹× CBS_OWNERDRAWVARIABLE °¢°¢). OWNERDRAWFIXED ½ºÅ¸ÀÏ ÀÚü ±×¸®±â ÄÁÆ®·Ñ ¸ñ·Ï »óÀÚ¿¡ ¿¬°á Çϱâ Àü¿¡ °íÁ¤µÈ Ç׸ñ ³ôÀÌ °áÁ¤ µË´Ï´Ù ÀÌÈÄ Ç׸ñÀ» self-drawing¿Í ÇÔ²² ÀÛµ¿ ÇÏÁö ¾Ê½À´Ï´Ù. (½Â¸® 3.1 ¸â¹ö ÇÔ¼ö CListBox::SetItemHeight ¹× CComboBox::SetItemHeight ÀÌ Á¦ÇÑÀ» ÇØ°á ÇÏ´Â µ¥ »ç¿ë µÉ ¼ö ÀÖ½À´Ï´Ù.)
¶ÇÇÑ, note OWNERDRAWVARIABLE ½ºÅ¸ÀÏ ½ºÀ§Äª NOINTEGRALHEIGHT ½ºÅ¸ÀÏ Àû¿ë µË´Ï´Ù. ¶§¹®¿¡ ÇʼöÀûÀÎ ³ôÀÌ °¡º¯ Å©±â Ç׸ñ INTEGRALHEIGHT ÀÇ ±âº» ½ºÅ¸ÀÏÀº ¹«½Ã µÇ °í ÄÁÆ®·ÑÀº Ç×»ó NOINTEGRALHEIGHTÄÁÆ®·ÑÀ» °è»êÇÒ ¼ö ÀÖ½À´Ï´Ù. ±ÍÇÏÀÇ Ç׸ñ ³ôÀÌ ¼öÁ¤ Ç׸ñ Å©±âÀÇ ÇʼöÀûÀÎ ½Â¼ö µÇµµ·Ï ÄÁÆ®·Ñ Å©±â¸¦ ÁöÁ¤ ÇÏ ¿© ±×·ÁÁö´Â¿¡¼ ÀϺΠÇ׸ñÀ» ¹æÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸ñ·Ï »óÀÚ ¹× ÄÞº¸ »óÀÚ Á¤·Ä ½ºÅ¸Àϰú self-drawing¿¡ ´ë ÇÑ (LBS_SORT ¹× CBS_SORT °¢°¢), CompareItem ¸â¹ö ÇÔ¼ö¸¦ ÀçÁ¤ÀÇ ÇØ¾ß ÇÕ´Ï´Ù¡£
¸ñ·Ï »óÀÚ¿Í ÄÞº¸ »óÀÚ¸¦ self-drawing¿¡ ´ë ÇÑ DeleteItem Àº ÀϹÝÀûÀ¸·Î ¹«½Ã µÇÁö ¾Ê½À´Ï´Ù. DeleteItem Ãß°¡ ¸Þ¸ð¸® ¶Ç´Â ±âŸ ¸®¼Ò½º°¡ °¢ ¸ñ·Ï »óÀÚ ¶Ç´Â ÄÞº¸ »óÀÚ Ç׸ñÀ» ÀúÀå ÇÏ´Â °æ¿ì ÀçÁ¤ÀÇ µÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÚü ±×¸®±â ÄÁÆ®·Ñ/¸Þ´ºÀÇ ¿¹
MFC ÀÏ¹Ý »ùÇà CTRLTEST self-draw ¸Þ´º (»ö Ç¥½Ã)¿Í self-draw ¸ñ·Ï »óÀÚ (¶ÇÇÑ º¸¿©ÁÖ´Â »ö)ÀÇ »ùÇÃÀ» Á¦°ø ÇÕ´Ï´Ù.
ÀÚü ±×¸®±â ¹öưÀÇ °¡Àå ÀϹÝÀûÀÎ ¿¹´Â ºñÆ®¸Ê ´ÜÃß (´Ù¸¥ »óÅ¿¡ ´ë ÇÑ Çϳª, µÑ, ¶Ç´Â ¼¼ °³ÀÇ ºñÆ®¸Ê À̹ÌÁö¸¦ º¸¿© ÁÖ´Â ´ÜÃß). À̰ÍÀº MFC Ŭ·¡½º CBitmapButton ¿¡¼ Á¦°ø¡£
µ¿Àû ÇÏÀ§ Ŭ·¡½ºÈ
¼ºêŬ·¡½Ì ´Ù¸¥ WndProc â WndProc ±³Ã¼ ÇÏ °í ±âº» (½´ÆÛ) ±â´É¿¡ ´ë ÇÑ ¿À·¡ µÈ WndProc È£Ãâ¿¡ ´ë ÇÑ Windows ¿ë¾îÀÔ´Ï´Ù.
ÀÌ c + + Ŭ·¡½º ÆÄ»ý (c + + ¿ë¾î »ç¿ë ´Ü¾î "±âº»" ¹× "ÇÏÀ§" ¹× "½´ÆÛ" Windows °³Ã¼ ¸ðµ¨ »ç¿ë ÇÏ´Â µ¿¾È¿¡ "ÆÄ»ý")¿Í È¥µ¿ ÇØ¼´Â ¾È. C + + µ¿Àû ¼ºêŬ·¡½Ì À¯»çÇÑ ±â´ÉÀ» Áö¿ø ÇÏÁö ¾Ê´Â Á¦¿Ü ÇÏ °í MFC ¹× Windows ¼ºêŬ·¡½Ì¿Í c + + ÆÄ»ýÀº ±â´ÉÀûÀ¸·Î ¸Å¿ì À¯»ç Çϸç,¡£
CWnd Ŭ·¡½º ( CWnd¿¡¼ ÆÄ»ý µÈ) c + + °³Ã¼¿Í Windows â °³Ã¼ (ÀÏÄþî HWND) »çÀÌÀÇ ¿¬°áÀ» Á¦°ø¡£
¼¼ °¡Áö ÀϹÝÀûÀÎ ÀÌ·¯ÇÑ °ü·Ã:
ÀÌ ¸¶Áö¸· °æ¿ì ¸â¹ö ÇÔ¼ö ÇÔ²² ÀÌ·ç¾îÁý´Ï´Ù.:
µÎ ·çƾ ±âÁ¸ windows HWND CWnd °³Ã¼¸¦ ¿¬°áÇÕ´Ï´Ù. SubclassWindow HWND ¸¦ Á÷Á¢ °É¸®°í SubclassDlgItem ÄÁÆ®·Ñ ID¿Í ºÎ¸ð â (ÀϹÝÀûÀ¸·Î ´ëÈ »óÀÚ)¸¦ »ç¿ë ÇÏ´Â µµ¿ì¹ÌÀÔ´Ï´Ù. SubclassDlgItem c + + °³Ã¼ ´ëÈ ¼½Ä ÆÄÀÏ¿¡¼ ¸¸µç ´ëÈ »óÀÚ ÄÁÆ®·Ñ¿¡ ¿¬°áÀ» À§ÇØ ¼³°è µÇ¾ú½À´Ï´Ù.
ÂüÁ¶ ÇϽʽÿÀ¿¡¼ SubclassWindow ¹× SubclassDlgItem À» »ç¿ë ÇÏ´Â °æ¿ìÀÇ ¸î °¡Áö ¿¹ CTRLTEST ¿¹Á¦¡£
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)