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);