|
ATL±×·³ , À©µµ¿ìÀÇ ½ºÅ¸ÀÏÀº ,CWinTraitsŬ·¡½º¿¡ ÀÇÇÑ ¡¸À©µµ¿ì Ư¼º¡¹À¸·Î¼ Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. CWinTraitsŬ·¡½º´Â À©µµ¿ì ½ºÅ¸Àϰú È®Àå À©µµ¿ì ½ºÅ¸ÀÏÀ» ¼Æ÷Æ®ÇÕ´Ï´Ù.
¡¡Áö±Ý±îÁöÀÇ ¿¹¿¡¼´Â À©µµ¿ì ÀÛ¼º½Ã¿¡CWindowImpl::Create()ÀÇ Á¦4Àμö·Î À©µµ¿ì ½ºÅ¸ÀÏÀ» ÁöÁ¤Çß½À´Ï´Ù. ÀÌ Á¦4Àμö´Â »ý·« °¡´ÉÇÕ´Ï´Ù. »ý·« ÇßÀ» °æ¿ì´Â , ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ´ÂCControlWinTraitsŬ·¡½º°¡ µðÆúÆ® °ªÀ¸·Î¼ »ç¿ëµË´Ï´Ù.
|
typedef CWinTraits<WS_CHILD
| WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0>
CControlWinTraits;
|
À̰ÍÀº µðÆúÆ®·Î´Â Àڽİú ÇüÁ¦¸¦ Ŭ¸³ ÇÏ´Â °¡½Ã »óÅÂÀÇ ÀÚ½Ä À©µµ¿ì¸¦ ÀÛ¼ºÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. CControlWinTraitsŬ·¡½º´Â ,CWindowImplŬ·¡½ºÀÇ Á¤ÀÇ·Î µðÆúÆ®ÀÇ ÅÛÇø´ Àμö·Î¼ ´ÙÀ½°ú °°ÀÌ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù.
|
template <class T,
class TBase = CWindow,
class TWinTraits
= CControlWinTraits>
class CWindowImpl : public ...
|
ÀÌ ¶§¹®¿¡ CWindowImplŬ·¡½ºÀÇ Á¦3 ÅÛÇø´ Àμö¿¡ µ¶ÀÚÀûÀÎ À©µµ¿ì Ư¼ºÀ» ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇØ µ¶ÀÚÀûÀÎ À©µµ¿ì ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇÏ´Â Àϵµ °¡´ÉÇÕ´Ï´Ù.
|
// µðÆúÆ®ÀÇ
À©µµ¿ì Ư¼ºÀ» °¡Áö´Â À©µµ¿ì( Á¦2, 3ÅÛÇø´ Àμö´Â »ý·« °¡´É)
class CDefaultWindow
: public CWindowImpl<CDefaultWindow, CWindow, CControlWinTraits>
{...};
// µ¶ÀÚÀûÀÎ
À©µµ¿ì Ư¼ºÀ» °¡Áö´Â À©µµ¿ì
typedef CWinTraits<WS_OVERLAPPEDWINDOW
| WS_VISIBLE, WS_EX_CLIENTEDGE> CMyTraits;
class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CMyTraits>
{...};
|
µ¡ºÙ¿© ÀÌ·¯ÇÑ ÅÛÇø´ Àμö¿¡ ÀÇÇÑ À©µµ¿ì Ư¼ºÀº CWindowImpl::Create()ÀÇ Àμö¿¡ ÀÇÇØ ¿À¹ö¶óÀ̵å(override) ÇÒ ¼ö ÀÖ½À´Ï´Ù.
|
// µ¶ÀÚÀûÀÎ
À©µµ¿ì Ư¼º
typedef CWinTraits<WS_OVERLAPPEDWINDOW
| WS_VISIBLE, 0> CMyTraits;
class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CMyTraits>
{...};
// CreateÀÇ Á¦4Àμö¸¦ »ý·« Çϰí ÀÖÀ¸¹Ç·ÎCMyTraits°¡ Àû¿ëµÇ´Â
// Áï
À©µµ¿ì´ÂWS_OVERLAPPEDWINDOW°úWS_VISIBLE½ºÅ¸ÀÏÀ»
°¡Áö´Â
CMyWindow wnd1;
wnd1.Create(NULL, CWindow::rcDefault,
_T("Hello"));
// CreateÀÇ Á¦4Àμö¸¦ ÁöÁ¤ÇØ ÀÖÀ¸¹Ç·Î Ư¼ºÀº ¿À¹ö¶óÀ̵å(override) µÇ´Â
// Áï
À©µµ¿ì´ÂWS_OVERLAPPEDWINDOW½ºÅ¸Àϸ¸À» °¡Áø´Ù
CMyWindow wnd2;
wnd2.Create(NULL, CWindow::rcDefault,
_T("Hello"), WS_OVERLAPPEDWINDOW);
|
|