TN001: â Ŭ·¡½º µî·Ï

ÀÌ ³ëÆ® Microsoft Windows¿¡ ÇÊ¿äÇÑ Æ¯º° ÇÑ WNDCLASSes¸¦ µî·Ï ÇÏ´Â MFC ·çƾÀ» ¼³¸í ÇÕ´Ï´Ù. MFC¿¡¼­ »ç¿ë Çϴ ƯÁ¤ WNDCLASS Ư¼º ¹× Windows¸¦ ¼³¸í Çϴ¡£

¹®Á¦

Windows¿¡¼­ HWND ó·³ CWnd °³Ã¼ÀÇ Æ¯¼ºÀº µÎ À§Ä¡¿¡ ÀúÀå µË´Ï´Ù: window °³Ã¼¿Í WNDCLASS. WNDCLASS c + + Ŭ·¡½º º¸´Ù ´Ù¸£´Ù. LpszClassName ¸Å°³ º¯¼ö¿¡¼­ CWnd::Create ¹× CFrameWnd::Create ¿Í °°Àº ÀÏ¹Ý Ã¢ »ý¼º ±â´É WNDCLASS ÀÇ À̸§À» Àü´Þ µË´Ï´Ù.

4 °¡Áö ¹æ¹ý Áß Çϳª¸¦ ÅëÇØÀÌ WNDCLASS ¸¦ µî·Ï ÇØ¾ß ÇÕ´Ï´Ù.:

WNDCLASSes ¹× MFC

â Ŭ·¡½º¸¦ ¼³¸í ÇÏ´Â ´Ù¾ç ÇÑ ºÐ¾ßÀÇ WNDCLASS ±¸Á¶ ±¸¼º µË´Ï´Ù. ´ÙÀ½Àº ÇÊµå ¹× MFC ÀÀ¿ë ÇÁ·Î±×·¥¿¡ »ç¿ë µÇ´Â ¹æ¹ý¡£

½ºÅ¸ÀÏ Ã¢ ½ºÅ¸ÀÏ: ¾Æ·¡ ÂüÁ¶
LpfnWndProc â ÇÁ·Î½ÃÀú AfxWndProc ¿©¾ß ÇÕ´Ï´Ù.
CbClsExtra »ç¿ë µÇÁö ¾Ê½À´Ï´Ù (0 À̾î¾ß ÇÔ)
CbWndExtra »ç¿ë µÇÁö ¾Ê½À´Ï´Ù (0 À̾î¾ß ÇÔ)
HInstance AfxGetInstanceHandle ÇÔ²² ÀÚµ¿À¸·Î ä¿öÁø´Ù
HIcon ÇÁ·¹ÀÓ Ã¢¿¡ ´ë ÇÑ ¾ÆÀÌÄÜÀ» ¾Æ·¡ ÂüÁ¶
HCursor â À§¿¡ ¸¶¿ì½º°¡ ¶§ Ä¿¼­ ¾Æ·¡ ÂüÁ¶
HbrBackground ¹è°æ »ö»óÀ» ¾Æ·¡ ÂüÁ¶
LpszMenuName »ç¿ë ÇÏÁö (NULL À̾î¾ß ÇÑ´Ù)
LpszClassName Ŭ·¡½º À̸§, ¾Æ·¡ ÂüÁ¶

WNDCLASSes Á¦°ø

ÀÌÀü ¹öÀüÀÇ MFC (MFC 4.0) Çϱâ Àü¿¡, Á¦°ø ÇÏ´Â ¹Ì¸® Á¤ÀÇ µÈ â Ŭ·¡½ºÀÇ ¼ýÀÚ°¡ Çß´Ù. ÀÌ·¯ÇÑ Ã¢ Ŭ·¡½ºÀÇ ¹öÀü °ü¸® (MFCÀÇ ¿©·¯ ¹öÀü ÇϳªÀÇ ÁÖ¼Ò °ø°£¿¡ ·Îµå µÈ) »Ó¸¸ ¾Æ´Ï¶ó MFC ÀÀ¿ë ÇÁ·Î±×·¥°ú OLE ÄÁÆ®·Ñ MFC DllÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù »ç½Ç¿¡ °ü·Ã µÈ ¹®Á¦¿¡ °ü·Ã µÈ ±â¼úÀûÀÎ ¹®Á¦ ¶§¹®¿¡ ±âº»ÀûÀ¸·Î ´õ ÀÌ»ó Á¦°ø µË´Ï´Ù.

´ÙÀ½ ÂüÁ¶´Â ÀÌ·¯ÇÑ ÀÌÀü WNDCLASSes¸¦ Á¦°ø¸¦ »ç¿ë ÇÏ´Â Äڵ带 ¸¶À̱׷¹À̼ÇÇÒ ¼ö ÀÖµµ·Ï Á¦°ø µË´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥Àº ÀÌ·¯ÇÑ Å¬·¡½º ´ë½Å AfxRegisterWndClass (¿Í ÀûÀý ÇÑ ¸Å°³ º¯¼ö)¸¦ »ç¿ë ÇØ¾ß¡£

´ÙÀ½Àº Ŭ·¡½º¿Í ±×µéÀÇ Æ¯¼º:

ÁöÁ¤ µÈ ¸®¼Ò½º ID (¿¹¸¦ µé¾î, AFX_IDI_STD_FRAME) ID »ç¿ë ÇÏ ¿© ¸®¼Ò½º¸¦ Á¦°ø ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥, MFC ¸®¼Ò½º¸¦ »ç¿ë ÇÏ ¿© ÀÖ´Â °ÍÀÔ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é ±âº» ¸®¼Ò½º°¡ »ç¿ë µË´Ï´Ù. ¾ÆÀÌÄÜ¿¡ ´ë ÇÑ Ç¥ÁØ ÀÀ¿ë ÇÁ·Î±×·¥ ¾ÆÀÌÄÜÀ» »ç¿ë ÇÏ °í Ç¥ÁØ È­»ìÇ¥ Ä¿¼­¸¦ »ç¿ë ÇÏ´Â Ä¿¼­,¡£

´ÜÀÏ ¹®¼­ Çü½Ä (±âº» ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ë ÇÑ ÇϳªÀÇ ¾ÆÀÌÄÜ, ¾ÆÀÌÄÚ ´Ð ¹®¼­/MDIChild â¿¡ ´ë ÇÑ ´Ù¸¥ ¾ÆÀÌÄÜ)¿Í MDI ÀÀ¿ë ÇÁ·Î±×·¥À» Áö ¿øÇÏ´Â µÎ °³ÀÇ ¾ÆÀÌÄÜÀÌ ÀÖ½À´Ï´Ù. ´Ù¸¥ ¾ÆÀÌÄÜ ´ÙÁß ¹®¼­ Çü½Ä¿¡ ´ë ÇÑ Ãß°¡ WNDCLASSes¸¦ µî·Ï ÇØ¾ß ÇÕ´Ï´Ù ¶Ç´Â CFrameWnd::LoadFrame ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿©¡£

CFrameWnd::LoadFrame ¿¡ WNDCLASS Ç¥ÁØ "AfxFrameOrView" ¼Ó¼ºÀ» »ç¿ë ÇÏ ¿© ÀÖÁö¸¸ LoadFrame ù ¹øÂ° ¸Å°³ º¯¼ö·Î ÁöÁ¤ ÇÏ´Â ¾ÆÀÌÄÜ ID¸¦ »ç¿ë ÇÏ ¿© ÀÚµ¿À¸·Î µî·Ï¡£

MDIFrameWnd ÀÇ Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀ» "MDICLIENT" â¿¡ ÀÇÇØ ¿ÏÀüÈ÷ µ¤¿© ÀÌÈÄ ¹è°æ»ö¿¡ ´ë ÇÑ °ª°ú MDIFrameWnd ¿¡ ´ë ÇÑ Ä¿¼­ »ç¿ë µÇÁö ¾Ê½À´Ï´Ù. Microsoft ±ÇÀå ÇÏÁö ¾Ê½À´Ï´Ù Ç¥ÁØ »ö°ú Ä¿¼­ À¯Çü °¡´ÉÇÑ °æ¿ì »ç¿ë ³Ê¹« "MDICLIENT" â ¼­ºêŬ·¡½Ì¡£

ÄÁÆ®·Ñ ¼­ºêŬ·¡½Ì

¸¸¾à ´ç½ÅÀÌ ¼­ºê Ŭ·¡½º ¶Ç´Â ½´ÆÛ Ŭ·¡½º´Â Windows Á¦¾î (¿¹: CButton) ´ÙÀ½ Ŭ·¡½º ÀÚµ¿À¸·Î ÇØ´ç ÄÁÆ®·ÑÀÇ Windows ±¸Çö¿¡¼­ Á¦°ø ÇÏ´Â WNDCLASS Ư¼ºÀ» °¡Á®¿É´Ï´Ù.

AfxRegisterWndClass ÇÔ¼ö

MFC â Ŭ·¡½º¸¦ µî·Ï Çϱâ À§ÇÑ µµ¿ì¹Ì ·çƾÀ» Á¦°ø ÇÕ´Ï´Ù. Ư¼º (â Ŭ·¡½º ½ºÅ¸ÀÏ, Ä¿¼­, ¹è°æ ºê·¯½Ã ¹× ¾ÆÀÌÄÜ) ÁýÇÕÀ» °¨¾ÈÇÒ ¶§, ÇÕ¼º À̸§ »ý¼º µÇ °í °á°ú â Ŭ·¡½º¸¦ µî·Ï ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î,

const char * AfxRegisterWndClass (UINT nClassStyle, HCURSOR hCursor, HBRUSH hbrBackground, HICON hIcon)

ÀÌ ÇÔ¼ö´Â »ý¼º µÈ µî·Ï µÈ â Ŭ·¡½º À̸§ÀÇ Àӽà ¹®ÀÚ¿­À» ¹ÝȯÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº Ŭ·¡½º ¶óÀ̺귯¸® ÂüÁ¶ ¸¦ ÂüÁ¶ ÇϽʽÿÀ¡£

¹Ýȯ µÇ´Â ¹®ÀÚ¿­ AfxRegisterWndClass¸¦ ´ÙÀ½ È£Ãâ µÉ ¶§±îÁö À¯È¿ ÇÏ´Â Á¤Àû ¹®ÀÚ¿­ ¹öÆÛ¿¡ Àӽà Æ÷ÀÎÅÍÀÔ´Ï´Ù. ´ç½ÅÀÌ ÁÖÀ§¿¡ÀÌ ¹®ÀÚ¿­À» À¯Áö ÇÏ °í ½Í´Ù¸é CString º¯¼ö¿¡ ÀúÀå ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î,

CString strWndClass = AfxRegisterWndClass (CS_DBLCLK,...);
...
CWnd * pWnd »õ·Î¿î CWnd; =
pWnd gt;(StrWndClass,...)À» »ý¼º;(&G)

AfxRegisterWndClass window Ŭ·¡½º (³ª»Û ¸Å°³ º¯¼öÀÇ ¶§¹®¿¡ ¶Ç´Â Windows ¸Þ¸ð¸®) µî·Ï¿¡ ½ÇÆÐ ÇÑ °æ¿ì¿¡ CResourceException ¸¦ ´ø Áú °Í ÀÌ´Ù¡£

RegisterClass ¹× AfxRegisterClass ÇÔ¼ö

´ç½ÅÀÌ ¹«¾ùÀÌ AfxRegisterWndClass Á¦°ø ÇÏ´Â °Í º¸´Ù ´õ º¹Àâ ÇÏ °í ½Í´Ù¸é RegisterClass Windows API ¶Ç´Â MFC ÇÔ¼ö AfxRegisterClass¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. CWnd CFrameWnd , CMDIChildWnd ¸¸µé±â ÇÔ¼ö â Ŭ·¡½º¿¡ ´ë ÇÑ lpszClassName ¹®ÀÚ¿­ À̸§À» ù ¹øÂ° ¸Å°³ º¯¼ö·Î °É¸±. ¸ðµç â Ŭ·¡½º À̸§À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù, ±×°ÍÀ» µî·Ï ÇÏ´Â ¹æ¹ý¿¡ °ü°è ¾øÀÌ¡£

±×°ÍÀº AfxRegisterClass (¶Ç´Â AfxRegisterWndClass)¿¡ Win32 DLL¿¡¼­ »ç¿ë ÇÏ´Â °ÍÀÌ Áß¿ä ÇÕ´Ï´Ù. Win32 ±×·¡¼­ÀÌ ÀÌ·ç¾îÁ®¾ß ÇÕ´Ï´Ù ¸í½ÃÀûÀ¸·Î DLL Á¾·á µÉ ¶§ DLLÀ» µî·Ï Çϴ Ŭ·¡½º¸¦ ÀÚµ¿À¸·Î µî·Ï µÇÁö ¾Ê½À´Ï´Ù. RegisterClass ´ë½Å AfxRegisterClass ¸¦ »ç¿ë ÇÏ ¿©ÀÌ ´ç½ÅÀ» À§ÇØ ÀÚµ¿À¸·Î ¼öÇà µË´Ï´Ù. AfxRegisterClass DLL¿¡ ÀÇÇØ µî·Ï µÈ °íÀ¯ÇÑ Å¬·¡½ºÀÇ ¸ñ·ÏÀ» À¯Áö ÇÏ °í DLL Á¾·á µÉ ¶§ ´ÙÀ½ µî·Ï ÀÚµ¿À¸·Î µË´Ï´Ù. RegisterClass dll¿¡¼­À» »ç¿ë ÇÏ´Â °æ¿ì DLL ( DllMain ÇÔ¼ö)¿¡¼­ Á¾·á µÉ ¶§ ¸ðµç Ŭ·¡½º°¡ µî·Ï µÇÁö º¸Àå ÇØ¾ß ÇÕ´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é RegisterClass ¿¹±âÄ¡ ¾Ê°Ô ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ DLLÀ» »ç¿ë ÇÏ´Â °æ¿ì ¿À·ù°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.

±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)

Index