¡ºMFC·Î °ÔÀÓÀ» ¸¸µé±â¡»
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1 Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
-> 1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º ±¸¼º
Á¦°¡ ´ÙÀÌ·ºÆ® ¿¢½º¶ó´Â °ÍÀ» óÀ½ Á¢ÇÑ °Í Àº 2¹öÀü ¶§ ¿´ ½À´Ï´Ù. ¹ú½á
2³â ÀÌ»óÀÌ Áö³µ±º¿ä~.±×°Ô ´ëÇ×ÇØ ½Ã´ë3¸¦ ±ò¸é¼ ±ò·Á¼ ¾Ë°Ô µÆÁÒ. ±×
ÈÄ·Î ¹öÀüÀÌ 3.0....5.2±îÁö ³ª¿Í Àִµ¥ ÀÌ¹Ì °ÔÀÓ °ü·ÃµÈ ·çƾÀº 3¹öÀü¿¡
¼ È®°íÈ÷ ÀÚ¸®°¡ ÀâÈù °Í °°½À´Ï´Ù.
5.0Àº 3Â÷¿ø ±â´ÉÀ» Çâ»óÇÑ Á¡¿¡¼ Á¶±Ý ³ª¾Æ Á³°í~ 5.2´Â DVD±â´ÉÀ»
÷°¡Çß´Ù°í Çϴ±º¿ä~
Á¦°¡ º»°ÝÀûÀ¸·Î À̾߱â ÇÒ°Ç ÀÌ·± °ÑÄ¡ÀåÀÇ ±â´ÉÇâ»óÀÌ ¾Æ´Ñ ½Ç¼ÓÀÖ´Â
±â´É Çâ»óÀ» º¸ÀÚ¸é, »õ·Î¿î ÀÎÅÍÆäÀ̽º IDDVideoPortContainer,
DirectDrawColorControl ,IDirectDrawVideoPort, ±×¸®°í
IDirectDrawSurface3Æ÷ÇÔ µÇ¾î ÀÖ°í, IDirectDrawSurface2°¡ º¸Ãæ °øÀ¯
µÇ¾î ÀÖ°í. ÁÖ¿äÇÑ °³¼±µÈ Á¡Àº ³ÐÀº Ç¥¸éÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.
»ç½Ç ÀÌ ºÎºÐÀº Á¦°¡ ÀÎÅͳÝÀ» ÅëÇØ ¾òÀº ÀڷḦ ¹ø¿ªÇؼ ¿Ã¸®·Á´Ù
ÀÌ·¸°Ô ´Ù½Ã ÆíÁýÇØ¼ ¿Ã¸³´Ï´Ù. °¢°¢ÀÇ ±â´ÉÀº ÀÌ¹Ì 5.0 ·¹ÆÛ·±½ºÀÇ
¼µÎ¿¡ ³ª¿À´Â °ÍÀε¥ ÀÚ¼¼ÇÑ °ÍÀº ·¹ÆÛ·±½º¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä~
(ÇØ¼®ÀÌ ¾ÈµÇ½Ã´Â ºÐÀº Àú¿¡°Ô Áú¹®À» Áּŵµ µË´Ï´Ù. )
Áö±Ý ÀÎÅͳÝÀ» ÅëÇØ °ÔÀÓ ÄÄÇ»ÅÍ µ¿ÇâÀ» »ìÆì º¸¸é 3Â÷¿øÀ» °¡Áö°í
Ä¡¿ÇÑ ÀüÀïÀ» Ä¡·ç°í ÀÖ´õ±º¿ä~ ƯÈ÷ ¿ÀÇÂÁö¿¤ À̳Ä~ ´ÙÀÌ·ºÆ®¿¢½º³Ä~
ÀÇ µÎÁø¿µÀÌ Ä¡¿ÇÏ°í °£È¤ µ¶ÀÚÀûÀÎ ±×·¯³ª ±×¸® ÈûÀ» ¹ßÈÖÇÒ ¼ö ¾ø´Â
µ¶Àڳ뼱À» Ãß±¸ÇÏ´Â ÆÀÀ̳ª ȸ»çµµ ÀÖ´õ±º¿ä~
¾î·°Å³ª 3Â÷¿ø¿¡¼ ¸¹ÀÌ »ç¿ëÇϰí ÀÖ´Â °ÍÀº ¿ÀÇÂÁö¿¤ °ú ´ÙÀÌ·ºÆ® ¿¢½º
Àε¥ ¿ÀÇÂÁö¿¤Àº ÀÌ¹Ì ¸®´ª½º³ª À¯´Ð½º, ±×¸®°í ¼Ö¶ó¸®½º, ¿À¿¡½ºÅõ,
À©µµ¿ìÁî 95µîµî ¸¹Àº ¿î¿µÃ¼Á¦¿¡¼ »ç¿ëµÇ¾î ¿Ô°í ±â´É¶ÇÇÑ Æí¸®ÇϰÔ
µÇ¾î ÀÖ¾î ÇÔ¼ö ·¹ÆÛ·±½º¸¸À» °¡Áö°í 3Â÷¿ø °¨°¢ÀÌ ÀÖ´Â(°³³äÀÌ ÀâÇô
ÀÖ´Â) µ¶ÀÚ¶ó¸é ´©±¸³ª ±¸ÇöÇÒ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.
±×·± ¹Ý¸é ´ÙÀÌ·ºÆ® ¿¢½º´Â ºü¸£´Ù´Â °ÍÀ» Ãß±¸ÇÏÁö¸¸ ¿ö³« ¸¹Àº
º¯¼ö¿Í ÀÎÀÚ¿ÍÀÇ ÀüÀïÀ» ÇѹÙÅÁÄ¡·ç°í ³ÈÄ¿¡¾ß °¡´ÉÇÏ´Ï Á¶±Ý ¹ø°Å
·Ó´õ±º¿ä~
ÇÏÁö¸¸ ´ÙÀÌ·ºÆ® 3Â÷¿øÀ» °¢ÀÚ º»ÀÎÀÇ ±¸¹Ì¿¡ ¸Â°Ô Àß ±¸¼ºÇسõ°í
³ª¸§µ¥·Î ÀÎÅÍÆäÀ̽º¸¦ ±¸¼º¸¸ µÈ´Ù¸é ¿ÀÇÂÁö¿¤º¸´Ù Æí¸®ÇÏ°Ô ¾µ¼öµµ
ÀÖ°ÚÁÒ~ (À̰ÍÀº µ¶ÀÚÀÇ ¸ò!)
ÀÏ´Ü ¸¹Àº µ¶ºÐµéÀÌ MFC¸¦ µÎ·Á¿öÇϰí ÀÖ´Â °Í °°¾Æ ´ÙÀÌ·ºÆ®¿¢½º¸¦
¾î¶»°Ô Çϸé MFC¿Í ½±°Ô Á¢¸ñÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¸¦ 2Â÷¿ø ÇÁ·Î±×
·¥°ú 3Â÷¿ø ÇÁ·Î±×·¥À» °¢°¢ Á¦ÀÛÇÏ¸é¼ ¹è¿ö º¸µµ·Ï ÇÏÁÒ~
(¾à°£ ±ÛÀÌ ¾î»öÇÒ ¼öµµ Àִµ¥ ÀÚ·áÁß ¿ø¾î¸¦ ±×µ¥·Î ¹ø¿ªÇؼ ³ÖÀº
ºÎºÐµµ ÀÖ´Ùº¸´Ï Á¶±Ý ÀÌ»óÇÒ ¼öµµ Àִµ¥ Á¦°¡ ³ª¸§µ¥·Î Á¤¸®ÇÏ·Á°í
Çߴµ¥ ¾ÆÁ÷ ÀÚ·áµéÀÌ Á¤¸®°¡ ¾ÈµÇ¾î ÀÌ·¸°Ô ¼µÑ·¯ ÀÛ¼ºÇØ ¿Ã¸³´Ï´Ù.
)
1. ´ÙÀÌ·ºÆ® ¿¢½ºÀÇ »ç¿ë
ÀÌ¹Ì ¾Õ¼ ÀúÀÇ ±ÛÀ» ÀÐÀ¸½Å ºÐÀ̳ª °øºÎ¸¦ ÇϽźÐÀº ´ÙÀÌ·ºÆ® ¿¢½º°¡
¾î¶²°Å±¸³ª ÇÏ´Â °ÍÀ» ¾Æ½Ç°Ì´Ï´Ù. º¸´Ù ºü¸¥ ±×·¡ÇÈ Ã³¸®¸¦ À§ÇÑ
µå¶óÀ̹öÀε¥, À̰ÍÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀº ǮȸéÀ» ´Ù ÀÌ¿ëÇÏ´Â ¹æ¹ý°ú
À©µµ¿ìÁî ¸ðµå·Î ÀÛ¼ºÇÏ´Â ¹æ¹ý µÎ°¡Áö°¡ ÀÖ´Ù´Â °ÍÀ» ¾Æ½Ç°Ì´Ï´Ù.
¸ð¸¥´Ù±¸¿ä~ ±×·¸´Ù¸é ÀÌ·¸°Ô µÎ°¡Áö·Î »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù.
Àú´Â ´ÙÀÌ·ºÆ® ¿¢½º¸¦ »ç¿ëÇÒ¶§ IDirectDrawSurface2°ÍÀ» ÀÚÁÖ »ç¿ë
Çϴµ¥ ÀÌÀ¯´Â ±âÁ¸ÀÇ ´ÙÀÌ·ºÆ® ¿¢½º¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù¸é
±×°Í°ú Ãæµ¹À» ÀÏÀ¸Å°Áö ¾ÊÀ¸·Á°í À̰ÍÀ» »ç¿ëÇÕ´Ï´Ù. º¸Åë
IDirectDrawSurface¸¦ »ç¿ëÇÕ´Ï´Ù. ƯÈ÷ ¿Â¿¡¾î¶ó´Â TV¼ö½ÅÄ«µåÀÇ
ÇÁ·Î±×·¥Àº IDirectDrawSurface¸¦ ÀÌ¿ëÇØ ȸ鿡 TV³»¿ëÀ» Âï´Âµ¥
À̰ͰúÀÇ Ãæµ¹À» ÀÐÀ¸Å°Áö ¾ÊÀ¸·Á¸é ´Ù¸¥ Surface¸¦ »ç¿ëÇØ¼ Ãâ·Â
ÇÏ´Â °ÍÀÌ ³º°ÚÁÒ~
ÀÏ´Ü ´ÙÀÌ·ºÆ® ¿¢½º¸¦ MFC¿¡¼ »ç¿ëÇϱâ À§ÇØ ±×¿¡ ÀûÇÕÇÑ ÄÚµùÀ»
ÇØ³õ¾Æ¾ß °ÚÁÒ~
class CDirectDraw
{
public:
// two phase construction
CDirectDraw ();
void Create (HWND hWnd,
DWORD
dwDisplayWidth, DWORD dwDisplayHeight,
DWORD
dwBitPlanes, DWORD RefreshRate=0);
................
................
~CDirectDraw ();
public:
// surface¸¦ Á¦¾î
CPrimarySurface& FrontSurface
();
CBackBuffer& BackBuffer
(int iNumBackBuffer=0);
.................
.................
// Load a palette from a
bitmap:
void LoadPalette (LPCSTR
szBitmap);
// ÆÄ·¹Æ® °ü·Ã ÇÔ¼ö
void GetEntries (DWORD dwBase,
DWORD dwNumEntries, LPPALETTEENTRY lpEntries);
void SetEntries (DWORD dwStartingEntry,
DWORD dwCount,
LPPALETTEENTRY
lpEntries);
private:
// Guard against copies
CDirectDraw (const CDirectDraw&
src);
CDirectDraw& operator =
(const CDirectDraw& src);
};
´ÙÀÌ·ºÆ® ¿¢½º¸¦ »ý¼º ½Ã IDirectDraw2¸¦ ÃÖÃÊÀÇ ¸é¿¡ ÀÌ¿ëÇß°í ±× ´ÙÀ½
µÞ¸éµµ À̰ÍÀ» ÀÌ¿ëÇØ »ý¼ºÇß´Ù. ±×¸®°í ´ÜÀÏ ÆÄ·¹Æ®¸¸À» »ç¿ëÇϰÔ
ÇØ ³õ¾Ò´Ù. À̰ÍÀº ¾îµð±îÁö³ª ¿¹Á¦¸¦ À§ÇØ Á¦ÀÛµÈ °ÍÀ̹ǷÎ...
´ÙÀ½¿¡ Á¦ÀÛµÈ CreateDDInterface´Â »ý¼ºÇÏ¸é¼ ¹ß»ýµÇ´Â ¿¡·¯¸¦ ÀûÀý
ÇÏ°Ô µð¹ö±× ¸ðµå»ó¿¡¼ ó¸® µÇ°Ô µÇ¾î ÀÖ´Ù. ±×¸®°í
void CDirectDraw::CreateDDInterface ()
{
LPDIRECTDRAW lpDD_v1;
HRESULT ddrval = DirectDrawCreate
(NULL, &lpDD_v1, NULL);
switch (ddrval)
{
case DD_OK:
//
¼º°øÇϸé
break;
#ifdef _DEBUG
case DDERR_INVALIDPARAMS:
TRACE
("Invalid parameters.\n");
ASSERT
(FALSE);
break;
case DDERR_INVALIDDIRECTDRAWGUID:
TRACE
("Invalid GUID.\n");
ASSERT
(FALSE);
break;
case DDERR_DIRECTDRAWALREADYCREATED:
TRACE
("DirectDraw object was alreadyaleady created.\n");
ASSERT
(FALSE);
break;
case DDERR_GENERIC:
TRACE
("Generic error creating the interface.\n");
throw
ddrval;
break;
case DDERR_NODIRECTDRAWHW:
TRACE
("DirectDraw hardware is not available.\n");
throw
ddrval;
break;
case DDERR_OUTOFMEMORY:
TRACE
("Out of memory.\n");
throw
ddrval;
break;
#endif
default:
TRACE
("Undocumented error.\n");
throw
ddrval;
}
// ¹Ù·Î ÀÌ ºÎºÐÀÌ Á¦2ÀÇ Æò¸éÀ»
»ç¿ëÇÏ°Ô ÇÏ´Â ºÎºÐÀÌ´Ù.
ddrval = lpDD_v1->QueryInterface
( IID_IDirectDraw2, (LPVOID *)&m_lpDD);
......
......
}
¾ÕÀÇ ³»¿ëÀ» ´Ù½Ã °£´ÜÇÏ°Ô Á¤¸®Çϸé...
void CDirectDraw::CreateDDInterface ()
{
LPDIRECTDRAW lpDD_v1;
HRESULT ddrval = DirectDrawCreate
(NULL, &lpDD_v1, NULL);
switch (ddrval)
{
case DD_OK:
//
¼º°øÇϸé
break;
default:
TRACE
("Undocumented error.\n");
throw
ddrval;
}
ddrval = lpDD_v1->QueryInterface
( IID_IDirectDraw2, (LPVOID *)&m_lpDD);
......
......
}
ÀÚ~ ¿©±â¼ ¾ÕÀ¸·Î »ç¿ëµÈ Æò¸é¿¡ °üÇØ ¾Ë¾Æ º¸µµ·Ï ÇÏÀÚ~
2. »ç¿ëµÇ´Â Æò¸éµé
ÇÊÀÚ´Â Æò¸éµéÀ» ±¸¼ºÇϴµ¥ ÀÖ¾î °¢°¢ÀÇ Å¬·¡½º·Î Á¤ÀÇÇØ µÎ¾ú´Ù.
¾Æ¸¶µµ ¸¹Àº ºÐÀº º¯¼öÇϳª·Î ó¸®ÇÏ¸é µÉ°É? ¿Ö? Ŭ·¡½º·Î ÇÏÁö?
ÇÏ½Ç ÅÙµ¥.. °¢°¢ÀÇ ±â´ÉÀ» ±¸ºÐÀ» ÇÏ°í ±×¿¡ µû¶ó µ¶ÀÚÀûÀΠ󸮷Î
º¸´Ù È¿°ú¸¦ ÁÖ±â À§Çؼ ÀÔ´Ï´Ù.
1) CPrimarySurface class
¾ÆÁÖ °£´ÜÇÏ°Ô ±¸¼ºÀÌ µÇ¾î Àִµ¥, µÚ¿¡ »ý¼ºµÈ Æò¸é°ú
ȸé
ÀüȯÀ» À§ÇØ »ý¼º. ¿ÀÁ÷ º¸¿© ÁÖ±â À§ÇÑ Æò¸é Ŭ·¡½º´Ù.
2) CBackBuffer class
½ÇÁ¦ µ¶ÀÚ°¡ Á÷Á¢ ±×¸²À» ±×¸®°í º¯ÇüÀ» °¡ÇÏ´Â Æò¸éÀÌ´Ù.
3) CBitmapSurface class
°ÔÀÓ¿¡ »ç¿ëµÇ´Â ±×¸²À» ´ã¾Æ µÎ´Â ÁÖ·Î ºñÆ®¸ÊÀ» ´ã´Âµ¥
»ç¿ë
µÇ´Â Æò¸é Ŭ·¡½ºÀÌ´Ù.
´ÙÀ½ ¼Ò½º´Â ¾îµð¼ ¸¹ÀÌ º»µíÇÑ ¿¹Á¦Àε¥ ¾îµð¼ º¸´ø ¼Ò½ºÀε¥...
¾îµô ±î¿ä? SDKÀÇ Sample¿¡ º¸½Ã¸é µµ³ÓÃ÷¸¦ ¿òÁ÷ÀÌ´Â ¿¹Á¦°¡ ÀÖÀ»
°Ì´Ï´Ù. Çѹø »ìÆì º¸¼¼¿ä~
ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
if( ddrval != DD_OK )
{
return initFail(hwnd);
}
// Get exclusive mode
ddrval = lpDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE
|
DDSCL_FULLSCREEN
);
if( ddrval != DD_OK )
{
return initFail(hwnd);
}
// Set the video mode to 640 by 480 by 8640x480x8
ddrval = lpDD->SetDisplayMode( 640, 480, 8);
if(ddrval != DD_OK)
{
return initFail(hwnd);
}
// Create the primary surface with 1 back buffer
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP
|
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary,
NULL );
if( ddrval != DD_OK )
{
return initFail(hwnd);
}
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps,
&lpDDSBack);
if( ddrval != DD_OK )
{
return initFail(hwnd);
}
¾î´À Á¤µµ °æÇèÀÌ ÀÖ°í Á» ÇØ º¸½Å ºÐµéÀº ÀÌ Á¤µµ´Â ¾Æ¹« °Íµµ ¾Æ ´Ï
°Ô ÀÌÇØ°¡ ^^;
¾ÆÁÖ °£´ÜÇÑ ´ÙÀÌ·ºÆ® ¿¢½º »ý¼º ºÎºÐÀÔ´Ï´Ù. À§ÀÇ ÄÚµå¿Í ´Ù¸¥ Á¡ÀÌ
¸î ±ºµ¥ ÀÖÁÒ~ Áö³¹ø °Á±îÁö´Â ÀÌ·± ÇüÅÂÀÇ ÄÚµå·Î À̾߱â Çß°í
¾ÕÀ¸·Î´Â ÀúÀ§ÀÇ ÄÚµå·Î °Á¸¦ ÇÕ´Ï´Ù.
À§ÀÇ Å¬·¡½ºÀÇ ÇÔ¼öµéÀ» ¾î¶»°Ô ¾µ±î? ÇÏ´Â Àǹ®ÀÌ »ý±æ ÅÙµ¥
´ÙÀ½°ú °°ÀÌ »ç¿ëµË´Ï´Ù. ÆÄ·¹Æ® ¼ÂÆÃ°ú ´ÙÀÌ·ºÆ® ¿¢½º »ý¼º~
//
// ´ÙÀÌ·ºÆ® ¿¢½º¸¦ »ý¼ºÇÏ´Â ºÎºÐ
//
m_DirectDraw.Create (hwnd, 640,
480, 8);
// create and set the palette
m_Palette.Create ();
m_DirectDraw.SetPalette (m_Palette);
ÀÏ´Ü ¿©±â±îÁö Çϰí¿ä~ ´ÙÀ½¿¡ Çϱâ Àü¿¡ ¾Ë·Á µå¸± °ÍÀº~
MFC¿¡´Â SDI ¿Í MDI¶ó°í ÇÏ´Â °ÍÀÌ Á¸ÀçÇϴµ¥ Àú´Â ÀÌ °Á¿¡¼
SDI¸¦ À§ÁÖ·Î ÇÏ·Á°í ÇÕ´Ï´Ù. º¸´Ù °£ÆíÇϱ⠶§¹®ÀÌÁÒ~.
¿ì¼± SDI´Â ÇϳªÀÇ À©µµ¿ì¸¦ »ç¿ë ÇÏ´Â °ÍÀ̰í,MDI´Â ¿©·¯ °¡Áö
À©µµ¿ì¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.
MFC¸¦ ÀÌ¿ëÇØ ÀüüȸéÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¸ð»öÇØº¸°í ±× ´ÙÀ½
â ¸ðµå¿¡¼ ÀÛ¾÷ÇÏ´Â ¹æ¹ýÀ» ¾Ë·Á µå¸®ÁÒ~
API¸¦ ¾²´Ù°¡ MFC¸¦ »ç¿ëÇØº¸¸é ÀÌ·¸°Ô Æí¸®ÇÑ °ÍÀ» ¸ô¶ú³ª ÇÒ
°Ì´Ï´Ù. µÎ ¹ø ´Ù½Ã´Â API¸¦ ¾È ¾²Áö ¾ÊÀ»±î Çϳ׿ä~
Á¦2ÀÇ °Á¿¡¼´Â º»°ÝÀûÀÎ MFC¸¦ ÀÌ¿ëÇϵµ·Ï ÇÏÁÒ~
È帣´Â
¹°Àº ¸ØÃß°Ô ÇÒ ¼ö ÀÖÁö¸¸
½Ã°£ÀÇ
È帧Àº ´©±¸³ª
¸ØÃâ
¼öµµ µ¹¸± ¼öµµ ¾ø³×~
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º
±¸¼º
-> 2. ½ÇÁ¦ MFCÀÇ ¸Þ¼¼Áö ¸Ê ±¸¼º
¿À´ÃÀº MFCÀÇ ¸Þ¼¼Áö¸ÊÀ» ±¸¼ºÇÏ´Â ¹æ¹ý°ú DirectX ¿ÍÀÇ Á¢¸ñÀ» À̾߱â
ÇØº¸µµ·Ï ÇսôÙ. µÎ¹øÂ° ½Ã°£ÀÎ ¸¸Å ù¹øÂ°¶§º¸´Ù ½Ã°£Àû ¿©À¯¸¦ °¡
Áö°í °ÀǸ¦½á ³ª°¡µµ·Ï ÇϰڽÀ´Ï´Ù.
PS. -------------------------------------------------------------
ÀÌ ±ÛÀÇ ¸ðµç ÀúÀÛ±ÇÀº ±è¼ºÈÆ´Ô¿¡°Ô ÀÖÀ¸¸é º»ÀÎÀÇ Çã¶ô¾øÀÌ
ºÒ¹ýÀûÀ¸·Î µµ¿ëÇϰųª ´Ù¸¥ °÷¿¡ ±âÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Ã³À½ MFC
¸¦ ´Ù·ç´Â ºÐÀ̳ª DirectX¸¦ ±âº»ÀûÀ¸·Î ÇϽô ºÐÀÇ ´«³ôÀÌ¿¡ ¸ÂÃß¾î
ÀÛ¼ºµÇ¾î ÀÖÀ½À» ¹àÈû!(½Ç·ÂÀÌ ÁÁÀ¸½Å ºÐÀº ¾È Àо µÇ¿ä~ ^^;).
-----------------------------------------------------------------
3. ¸Þ¼¼Áö ¸ÊÀÇ ±¸¼º
º¸Åë MFC¸¦ ¾î¶»°Ô ¹è¿ö¾ß ÇÒÁö? ±×¸®°í ¹è¿ì°í ³ ÈÄ ¾î¶»°Ô ½á¾ß ÇÒ
Áö¸¦ ¸Á¼³ÀÌ´Â ºÐÀÌ ¸¹½À´Ï´Ù. ±×·±µ¥ Àß È°¿ëÇÏ¸é ¹«Ã´À̳ª ½±°í °£
´Ü ÇÏ°Ô Ã³¸®¸¦ ÇÒ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ¸¹½À´Ï´Ù.
Microsoft Developer Stidio[VC ¿¡µðÅÍ]¿¡¼ New¸¦ ¼±ÅÃÇϸé ÅǸ޴º
Áß Project¸¦ ¼±ÅÃÇÏ¸é ¿¡±¸~ ¹«½¼ À§ ÀÚ µå(Wizard)°¡ ¸¹ÀºÁö? ¾ó·¹?
¹«¾ó ¼±ÅÃÇØ¾ß~ Çϳª? (À½...´Ü¹ø¿¡ ¶Ç´Â Åë ¹äÀ¸·Î ¸ÂÃ߽ô ºÐÀÌ
ÀÖ±º¿ä~) MFC AppWizard(exe)¶ó´Â ¸Þ´º°¡ Àִµ¥ À̰ÍÀ» ¼±ÅÃÇØ¼
´ÙÀ½¿¡ ¹°¾îº¸´Â °ÍÀ» »ó¼¼È÷ ÀÐ¾î º¸½ÅÈÄ ³ªÁß¿¡ ¿Ï¼ºÀÌ µÈ ¸Þ ¼¼Áö°¡
¹«Á¶°ÇÀûÀ¸·Î ´ÙÀ½°ú °°Àº ¸Þ¼¼ Áö°¡ ³ª¿É´Ï´Ù.
+- Application : CDemoApp class
|
+- Frame : CMainFrame class
|
+- Document : CDemoDoc class
|
+- View : CDemoView class
À§ÀÇ 4°³ÀÇ Å¬·¡½º°¡ »ý¼ºÀÌ µË´Ï´Ù. ¹Ù·Î Ŭ·¡½º°¡ ¸Þ¼¼Áö¸¦ ¶æÇÏ´Â
µ¥ óÀ½¿¡ °ü·Ã Á¤º¸ »ý¼º, °¢°¢ÀÇ À©µµ¿ìÀÇ ÇÁ·¡ÀÓÀ» °ü¸®, ¹®¼ÀÇ
Á¤º¸ °ü¸®, ¸¶Áö¸·À¸·Î º¸¿© ÁÖ¸é µÇ°ÚÁÒ~
ÀÏ´Ü ÀÌ·¸°Ô ¾Ë°í °è ¼¼¿ä~ ´õ¿í ÀÚ¼¼ÇÑ ³»¿ëÀº MFC°ü·Ã Ã¥ÀÚ¸¦ º¸
½Ã¸é º¸´Ù »ó¼¼È÷ °¢°¢ÀÇ ¸Þ ¼¼Áö¿¡ ´ëÇØ ¾Ë¾Æ º¼ ¼öÀÖÀ» °Ì´Ï´Ù.
(¿ä°Ç ¹«½¼ ÀǹÌÀ̳ĸé Àû¾îµµ MFC°ü·ÃÃ¥ÀÚ´Â ÇÑ ±Ç Á¤µµ´Â ÀÖ¾î¾ß
ÇÑ´Ù´Â À̾߱âÁÒ~ ^^;)
ÀÚ~ ±×·³ Àú±â 4°³ÀÇ ¸Þ ¼¼Áö°¡ ÇÊ¿äÇÒ±î¿ä? ..............
ÇÊ¿äÇÕ´Ï´Ù. ±×·±µ¥ ¿©±â¼ µÎ °¡Áö¸¦ »ý°¢ÇØ µÎ¾î¾ß ÇÕ´Ï´Ù. ¹« ¾ó±î?
¹Ù·Î ¾î¶² ¸ðµå¿¡¼ MFC¸¦ »ç¿ëÇÒ °ÍÀΰ¡ ÇÏ´Â ¹®Á¦°¡ Àִµ¥ ¹Ù·Î
ÀÌ ¹®Á¦¸¦ ÀüÁ¦·Î ÇÏ°í¼ ¸Þ ¼¼Áö ¸ÊÀ» °ü¸® ÇØ¾ß ÇÕ´Ï´Ù.
À©µµ¿ì ¸ðµå¿¡¼ ´ÙÀÌ·ºÆ® ¿¢½º¸¦ »ç¿ëÇÑ´Ù¸é À©µµ¿ì ±Ô¾à¿¡ ¸Â
Ãß¾î¼ Á¦ÀÛÀ» ÇØ¾ß ÇÕ´Ï´Ù. ±×°Ç ¹®¼°ü¸®¿Í º¸¿©Áö´Â 󸮸¦ ÇØ¾ß
ÇÏ´Â ¹ø°Å·Î¿òÀÌ µû¸¨´Ï´Ù. ÇÏÁö¸¸ °´Ã¼ 󸮴 µ¶ÀÚÀûÀ¸·Î Çϰí
º¸À̴ ȸéÀ» º¸¿© Áֱ⸸ ÇÏ¸é ¾î¶³±î¿ä? º¸Åë °ÔÀÓ¿¡¼´Â ÀÌ·±
¹æ¹ýÀ» »ç¿ëÇÏÁÒ~
ÀÏ´Ü °¡Àå °£´ÜÇØ º¸ÀÌ´Â ÀüüȸéÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ
º¸µµ·Ï ÇÏÁÒ~
Ç® ȸéÀ» »ç¿ëÇÏ¸é ¹®¼°ü¸®°¡ ÇÊ¿äÇÒ±î¿ä? ȸéÀüü¸¦ °¡µæ µ¶ÀÚ°¡
Á¦ÀÛÇÑ ±×¸²µé·Î ä¿ì´Â »óÅ¿¡¼ º°µµÀÇ º¸À̶ó´Â ¸Þ ¼¼Áö¸¦ À©µµ¿ì
¿¡°Ô º¸³¾ Çʿ䰡 ÀÖÀ»±î¿ä? ±×·¯´Ï±î~ ¿©±â¼ ¸Þ ¼¼Áö´Â MFCÀÇ
¸Þ ¼¼Áö¸¦ ¸»ÇÕ´Ï´Ù.
ÀÏ´Ü ÇÊ¿äÇÑ °ÍÀ» º¸ÀÚ¸é Ãʱâȸ¦ À§ÇÑ ¸Þ ¼¼Áö°¡ ÇÊ¿äÇÕ´Ï´Ù.
°ÔÀÓÀ» óÀ½ »ý¼ºÇÏ¸é¼ ¾ÕÀ¸·Î »ç¿ëµÉ ¸ðµå¿¡ ´ëÇØ À©µµ¿ì¿¡°Ô
'³ª ÀÌ·¸°Ô ¾µ ²¨¾ß~'¶ó°í ¾Ë·Á ÁÖ´Â ¸Þ ¼¼Áö¿Í~ µµ½º¿¡¼ Á¦ÀÛÇÏ´ø
¹æ½ÄÀÎ Main()ÇÔ¼ö °ÝÀÎ ÇÁ·¹ÀÓ Ã³¸® ¸Þ ¼¼Áö¸¸ ÀÖÀ¸¸é ³¡À̰ÚÁÒ~
¾µ ¶§ ¾ø´Â ÆÄÀÏ Àº Áö¿ìÀÚ~ ¹«¾ó Áö¿ö¾ß ÇÒ±î? ¹Ù·Î µµÅ¥¸ÕÆ®ÇÔ¼ö°¡
ÀÖ´Â ÆÄÀÏ °ú ºñ~À¯ Ŭ·¡½º°¡ ÀÖ´Â ÆÄÀÏ À» Áö¿ì¸é µË´Ï´Ù.~ ¾ÆÁÖ °£
´ÜÇÏÁÒ~ ±×·¯¸é ¹«¾ùÀÌ ³²ÁÒ?
+- Application : CDemoApp class
|
+- Frame : CMainFrame class
À̰͸¸ÀÌ ³²°Ô µÇ´Âµ¥ À̰ÍÀ» ÀûÀýÇÏ°Ô »ç¿ëÇÏ¸é µË´Ï´Ù.
¸Þ ¼¼Áö Áß¿¡ IdleÀ̶ó´Â ¸Þ ¼¼Áö°¡ Àִµ¥ À̰ÍÀº À©µµ¿ì ÇÁ·Î±×·¥
À» °øºÎÇϽŠºÐ À̶ó¸é ¾Æ½Ã°ÚÁö¸¸ ¸Þ ¼¼Áö°¡ ¾ø´Â »óŸ¦ Æ÷ÂøÇØ¼
µ¶ÀÚ°¡ ±× ½Ã°£À» »ç¿ëÇÏ°Ô ÇØÁÖ´Â ¸Þ ¼¼ÁöÀÔ´Ï´Ù.
ÀÌ ¸Þ ¼¼Áö´Â MFC¿¡¼ ÇÔ¼ö·Î Á¦°øÀ» ÇØÁÝ´Ï´Ù. º¸Åë API¿¡¼´Â ÇÔ¼ö
·Î Á¦°øµÇ±â º¸´Ù´Â
while(¹«Á¶°Ç µ¹¾Æ¶ó~) {
while( PeekMessage( &msg,
NULL, 0, 0, PM_NOREMOVE ) !=0 ) {
if(
GetMessage( &msg, NULL, 0, 0) == 0 ) ÇÁ·Î±×·¥ ³¡³»ÀÚ~;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (Ȱ¼ºÈ µÇ¾ú³ª?)
±×·³
³»°¡ ó¸®Çϰí Ç ÇÔ¼ö ½ÇÇàÇÒ·¡~
}
ÇÏÇÏ~ ÀÌ·¸°Ô API¿¡¼´Â WinMain()À̶ó´Â ºÎºÐ¿¡ ¸Þ ¼¼Áö¸¦ º°µµ·Î
Ã¼Å©ÇØ¼ »ç¿ëÇØ¾ß Çß½À´Ï´Ù. ±×·±µ¥ MFC¿¡¼´Â ´Þ¶û~ OnIdle()ÀÌ
¶ó´Â ÇÔ¼ö°¡ Á¦°øÀÌ µÈ´Ù´Ï....(ºñÅëÇϱ¸³ª~ À̰ÍÀ» »¡¸® ¾Ë¾ÒÀ¸¸é
... ÇϽô ºÐµµ ÀÖ°ÚÁÒ~)
4. Application Message
ÀÚ~ ±×·¯¸é ¸Þ´º Áß¿¡¼ Ŭ·¡½º À§ ÀÚ µå ¸¦ ½ÇÇàÇØ¼ ¶ç¿ìÀÚ~ ±×°ÍÀ»
¶ç¿ì¸é ClassNameÀ» µÚÀûµÚÀûÇϸé '³ª Ŭ·¡½º¾ßApp'¶ó´Â ¸Þ ¼¼Áö°¡ ÀÖ
´Â µ¥ À̰Ϳ¡ °íÁ¤ÇÏ°í ¸Þ ½ÃÁö â¿¡¼ OnIdle¶ó´Â °ÍÀ» Ŭ¸¯ÇÏ¸é ¿Í¿ì~
¸â¹ö ÇÔ¼ö¶õ À» º¸¸é ÀÌ ÇÔ¼ö°¡ µé¾î ¿Í ÀÖÀ» °Ì´Ï´Ù.
±×·¯¸é ¿¡µðÆ® ÄÚµå¶ó´Â ¹öư¹Ù¸¦ ´·¯ º¸¸é
BOOL ³ªÅ¬·¡½º¾ßApp::OnIdle(LONG lCount)
{
CWinApp::OnIdle
(lCount);
return
ÂüÀϱú·Õ~;
}
ÀÌ·¸°Ô ³ªÅ¸³´Ù´Â Àü¼³ ¾Æ´Ñ Àü¼³ÀÌ ÀÖ´õ±º¿ä~
±×·³ ÀÌ ºÎºÐÀ» ¾î¶»°Ô ÀÌ¿ëÇÒ±î¿ä? µ¶ÀÚºÐÀÌ µ¹¸®°íÀÚ ÇÏ´Â ÇÁ·Î ±×
·¥À» ÀÌ ÇÔ¼ö¿¡ ³ÖÀ¸¸é ±×³É~ O~K~
Àá±ñ ¿¹¸¦ µéÀÚ¸é
BOOL ³ªÅ¬·¡½º¾ßApp::ȸéÀ» ¾÷µ¥ÀÌÆ®ÇÒ·¡()
{
if (!((CMainFrame*)m_pMainWnd)->m_bActive)
return
FALSE;
DWORD thisTickCount;
RECT rcRect;
DWORD delay[4]
= {50, 78, 13, 93};
int i;
PALETTEENTRY pe[256];
HRESULT ddrval;
// Decide which frame will be blitted next
thisTickCount = GetTickCount();
...................
...................
return ÂüÀϱú·Õ~;
}
void ³ªÅ¬·¡½º¾ßApp::¸ðµÎ º¹±¸ÇÒ·¡()
{
// m_DD.FrontSurface().Restore ();
// m_Surface.Restore();
}
±×·¸´Ù¸é »ç¿ëÀ» ¾î¶»°Ô ÇØ¾ßÁÒ? À½..°£´ÜÇϾß~ ¾÷µ¥ÀÌÆ®ÇÔ¼ö¸¦
ÀÌ¿ëÇÏ¸é µË´Ï´Ù.
BOOL ³ªÅ¬·¡½º¾ßApp::OnIdle(LONG lCount)
{
CWinApp::OnIdle
(lCount);
return
ȸéÀ» ¾÷µ¥ÀÌÆ®ÇÒ·¡();
}
¹Ù²î¾úÁÒ~ ÀÌ·¸°Ô µÇ¸é ÀÏ´Ü È¸éÀÌ °»½ÅÀÌ µÇ °Ú ±Ý ¸Þ ¼¼Áö¸¦
±¸¼ºÇß½À´Ï´Ù. ¿ì¿Í~ ¾ÆÁÖ ½±ÁÒ~
ÀÏ´Ü À̺κÐÀÇ ¸Þ ¼¼Áö¸¦ ÀÌ·¸°Ô Á¦ÀÛÀ» ÇØ ³õ°í~
5. MainFrame Message
ÀÌ ¸Þ ¼¼Áö´Â ´ç¿¬ ÇÁ·Î±×·¥ÀÇ ÇٽɺκÐÀ̶ó°í ÇØµµ °ú¾ðÀÌ ¾Æ´Ñ
ºÎºÐÀ̶ó°í ÁüÀÛÇϽô ºÐÀÌ °è½Ã°ÚÁÒ~ ´ç±ÙÀÔ´Ï´Ù!
´Ù½Ã º¸ÀÚ¸é~ "MFCÀÇ ¸ðµç °ÍÀº Ŭ·¡½º À§ ÀÚ µå ·Î Ŭ·¡½º À§ÀÚ
µå´Â MFCÀÇ ¸Þ¼¼Áö·Î~" À̰ÍÀÌ Áø¸®¿ä~ ÂüÀ̷δÙ~ ( ¿ìÇìÇì~ )
À¢ Çê¼Ò¸®°¡...À̰ÍÀÌ ¹Ù·Î MFC¸¦ »ç¿ëÇÏ´Ù º¸¸é ³ªÅ¸³ª´Â Áõ¼¼?
ÀÏ´Ü Å¬·¡½º À§ ÀÚ µå ¸¦ ½ÇÇàÇÏÀÚ~ ´ç¿¬ ¸Þ´º¿¡¼ Ŭ·¡½º À§ ÀÚ µå
¸¦ ã¾Æ¼ Ŭ¸¯À» ÇÏ¸é µÇ°ÚÁÒ~ °Å±â¿¡ º¸¸é Ŭ·¡½º À̸§¿¡
º¸¸é 'CMainFrame'À̶ó´Â °ÍÀÌ ÀÖÁÒ~ ±×°ÍÀ» °í¸£¸é ¸â¹öÇÔ¼ö
¶õ À» º¸¸é ´Þ¶û~ PreCreateWindow() ÇÔ¼ö¸¸ÀÌ Á¸ÀçÇÏ´Â °ÍÀ»
¾Ë ¼ö ÀÖÀ» °Ì´Ï´Ù.
ÀÌ ÇÔ¼ö¸¦ ÀÏ´Ü ¿¡µðÆÃÇÕ´Ï´Ù. ¿¡µðÆ® ÄÚµå ¹Ù¸¦ ´·¯¼ ȸéÀ»
°»½ÅÇսôÙ.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class
or styles here by modifying
// the CREATESTRUCT cs
return CFrameWnd::PreCreateWindow(cs);
}
¿ä·¸°Ô ±¸¼ºÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼öÀÇ Æ¯Â¡Àº À©µµ¿ì¸¦
»ý¼ºÇÒ ¶§ ±×·¯´Ï±î~ µ¶ÀÚ²²¼ Á¦ÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÇ À©µµ¿ì
½ºÅ¸ÀÏÀ» Á¤ÀÇÇØ¼ »ý¼ºÇÏ°Ô ÇÏ´Â ºÎºÐÀÔ´Ï´Ù.
±×·¯¸é CREATESTRUCT ±¸Á¶Ã¼¿¡´Ù°¡ Ä¿¼¸¦ °¬´Ù µ¥°í~ F1۸¦
´·¯ º¸¼¼¿ä~ ¾î¶² ¾µ ¶§ ¾ø´Â ¸»µéÀÌ?? (À×? ¿Ö ³»°Õ ¾Ïȣó·³
º¸ÀÌ´Â ±ÛÀÚµéÀÌ ³ªÅ¸³ª´Â °É±î? ÇÏÇÏ~)
°Å±â ±¸Á¶Ã¼¸¦ »ìÆìº¸¸é ȸéÀÇ Å©±â¸¦ Á¤ÀÇ ÇÏ´Â º¯¼ö°¡
ÀÖ½À´Ï´Ù.
±× º¯¼ö¿¡ °ªÀ» ³Ö¾î À©µµ¿ì Å©±â¸¦ Á¤ÀÇ ÇսôÙ.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class
or styles here by modifying
// the CREATESTRUCT cs
cs.x = cs.y = 0;
cs.cx = GetSystemMetrics (SM_CXSCREEN);
cs.cy = GetSystemMetrics (SM_CYSCREEN);
return CFrameWnd::PreCreateWindow(cs);
}
ÀÌ·¸°Ô ¹Ù²ß½Ã´Ù~ ¿©±â¼ ½ÃÀÛ ÁÂÇ¥´Â 0À̶ó´Â °ªÀ¸·Î ÃʱâÈ
ÇÏ¿© µÎ¾ú°í~ À©µµ¿ì Å©±â´Â ÇöÀç ½Ã½ºÅÛÀÇ ÃÖ´ë °ªÀ» ¹Þ¾Æ¼
¼¼ÆÃ ÇÏ°Ô µÇ¾î ÇÏ¿© µÎ¾ú½À´Ï´Ù.
¿Í~¿ì MFCµµ º°°³ ¾Æ´Ï³×?
ÀÚ~ ±×·³ ÀÌ°Í °¡Áö°í ´ÙÀÌ·ºÆ® ¿¢½º°¡? ¶ã±î ³ª? ¾ÕÀ¸·Î °¥±æ ÀÌ
³²¾Æ ÀÖ°í....Àá½Ã ÈÄ....(¹«·Á 5½Ã°£ ÈÄ ¿ï ¶ö ¶ó~ ±×»çÀÌ¿¡ ¾î¶²
ÀÏÀÌ?)
´Ù½Ã ¸¶À½À» °¡´Ùµë°í...À̹ø¿¡´Â °ÔÀÓÀ» ÁøÇàÇϴµ¥ ÀÖ¾î Ű
º¸µå´Â ³î°í ÀÖÀ»±î¿ä? ÀüÇô ¾Æ´ÏÁÒ~ °£´ÜÇÏ°Ô °ÔÀÓÀ» ºüÁ® ³ª
¿À·Á°í ÇÒ ¶§ ESC ۸¦ ´©¸£¸é ±×¿¡ ÇØ´çÇÏ´Â ¹ÝÀÀÀ» ÇØ¾ß °ÚÁö
¿ä~ ±×¸®°í ±âŸ µ¶ÀںеéÀÌ ¾î¶² ۸¦ ³Ö¾î º¸°Ú´Ù°í ÇÑ´Ù¸é
±×¿¡ ÇØ´çÇÏ´Â ¸Þ ¼¼Áöµµ ÷°¡ÇØ¾ß °ÚÁö¿ä~
¾î¶»°Ô ÷°¡ÇØ¾ß ÇÏÁÒ? ¿¡°í°í...¾î¶»°Ô Çϳª...±×·±µ¥ API¿¡¼´Â
¾î¶»°Ô 󸮸¦ ÇßÁÒ~ ±× ¶§¸¦ ¾Æ½Ê´Ï±î?
case WM_KEYDOWN :
if( wParam
== VK_UP )
¿Ã¸®·¡();
if( wParam
== VK_DOWN )
³»¸±·¡();
if( wParam
== VK_LEFT )
¿ÞÂÊÀ¸·Î
°¥·¡();
if( wParam
== VK_RIGHT )
¿À¸¥ÂÊÀ¸·Î
°¥·¡();
.............
.............
break;
ÀÌ·± ½ÄÀ¸·Î 󸮸¦ Çß¾ú½À´Ï´Ù. À½ ±×¸®°í º°µµ·Î ÇÔ¼ö¸¦ ¸¸µé
±âµµ ÇÏÁö¸¸ ±×·¡µµ ¾î¶»°Ç ÀÌ·± ½ÄÀ¸·Î 󸮸¦ Çß½À´Ï´Ù.
ÀÌ¹Ì À©µµ¿ì ÇÁ·Î±×·¥À» Çß´ø ºÐÀ̶ó¸é ³¸ ÀÍ´Â ¼Ò½º ºÎºÐÀ̶ó
°Å¸®³¦ ¾øÀÌ ¾ÆÇÏ~ ±×·¸±º ÇϽðÚÁÒ~
±×·¸´Ù¸é MFC¿¡¼´Â ÀÌ·± ºÎºÐÀ» ¾î¶»°Ô 󸮸¦ ÇÒ ±î³ª?
Ŭ·¡½º À§ ÀÚ µå ¿¡¼ º¸¸é WM_KEYDOWNÀ̶ó´Â ºÎºÐÀÌ ÀÖ½À´Ï´Ù.
ÀÌ ºÎºÐÀ» µÎ ¹ø Ŭ¸¯ÇÏ¸é ¸â¹öÇÔ¼ö¿¡ OnKeyDownÀ̶ó´Â ÇÔ¼ö°¡
»ý¼ºÀÌ µË´Ï´Ù. ±×·³ ¿ª½Ã ¿¡µðÆ® ¹öưÀ» ´·¯ º¸¸é ´ÙÀ½°ú °°
Àº ¼Ò½º°¡ ³ªÅ¸³¯ °Ì´Ï´Ù.
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// ¹öÃò¾ó ŰÁß¿¡ ESC¿Í F12¸¦
´·¶À»¶§ ÇÁ·Î±×·¥À» ³¡³¿
if ((nChar == VK_ESCAPE) ||
(nChar == VK_F12))
PostMessage(WM_CLOSE,
0, 0);
CFrameWnd::OnKeyDown(nChar,
nRepCnt, nFlags);
}
¿Í¿ì~ °£´ÜÇØ º¸ÀÌÁÒ~ ±×·³¿ä~ °£´ÜÇÏ°Ô Ã³¸®µÇ°Ú±Ý µÇ¾î ÀÖ´Â
°ÍÀÌ MFCÀÔ´Ï´Ù.
±× ´ÙÀ½ ȸéÀ» °»½ÅÇÏ´Â ¸Þ ¼¼Áö°¡ ÀÖ¾î¾ß ÀûÀýÇÑ À©µµ¿ì ³»ºÎ
½Ã°£¿¡ ¸ÂÃß¾î ȸéÀÌ °»½ÅÀÌ µÇ°ÚÁö¿ä~ ÀÌ ºÎºÐÀº ´ÙÀ½ ¾î¶»°Ô
󸮸¦ ÇØ¾ß ÁÁÀ» ±î³ª?
¾Õ¼ ¹è¿î ¹æ¹ýó·³ ¸Þ ¼¼Áö ºÎºÐ¿¡¼ WM_PAINT¶ó´Â ºÎºÐÀ» Ŭ¸¯
ÇÏ¿© ÇÔ¼ö¸¦ »ý¼ºÇÏ¸é µË´Ï´Ù. À©µµ¿ì âÀ» ÀÌ¿ëÇØ¼ »ç¿ëµÇ´Â
ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï¹Ç·Î º°µµÀÇ °»½Åó¸® ·çƾÀº ÇÊ¿ä ¾ø½À´Ï´Ù.
´Ü¼øÀÌ ÀÌ ¸Þ ¼¼Áö¸¦ ³Ö¾î ÁÜÀ¸·Î È¸é °»½ÅÀÌ ÀÌ·ç¾î Áö°Ô µË´Ï
´Ù.
±×·³ ´ÙÀ½°ú °°Àº Äڵ尡 »ý¼ºÀÌ µÇ¾î ÀÖÀ» °Ì´Ï´Ù.
void CMainFrame::OnPaint()
{
CPaintDC dc(this); // device
context for painting
// TODO: Add your message handler
code here
// We need do nothing.
// Do not call CFrameWnd::OnPaint()
for painting messages
}
¿©±â¼ this°¡ ³ªÅ¸³»µí ÀÚ½ÅÀÇ DC¸¦ °»½ÅÇÏ°Ô µË´Ï´Ù.
[#Âü°í] ¿©±â¼ this ¿¬»êÀÚ´Â C++¿¡¼ »ç¿ëµÇ´Â ¿¬»êÀÚ·Î ÀÚ½Å
À» ³ªÅ¸³»´Â ¿¬»êÀÚ ¶Ç´Â ÇÁ·Î±×·¥ÀÇ ¿¹¾à¾î¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Áï, ¸Þ¸ð¸®ÀÇ Æ÷ÀÎÅÍ ¿¬»êÀÚ¿Í´Â º°°³·Î 󸮵ÇÁö¸¸ ½ÇÁ¦ ¶â¾î
º¸¸é ºñ½ÁÇÑ ±â´ÉÀ» ÇÏ¸é¼ »ç¿ë»ó Àǹ̴ ´Ù¸£´Ù. ¸Þ¸ð¸®°¡
Áö½ÃÇÏ´Â °ÍÀÇ ¸íÈ®¼ºÀ» µÎ±âÀ§ÇØ this¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù.
(À̱¸ À̰ÍÀÌ ¸Â ´Ù°í ÁÖÀå ÇÒ ¼ö¾øÁö¸¸ ÀÌ·¸°Ô ÀÌÇØÇϸé ÇѰá
µµ¿òÀÌ µÇ°ÚÁö¿ä~ ^^;)
±âŸ Ȱ¼ºÈ µÇ¾î ÀÖ´ÂÁöÀÇ ¿©ºÎ¸¦ ÆÇ´ÜÇÏ´Â ¸Þ ¼¼Áöµµ ÀÖ°í ÷°¡
°¡´ÉÇÑ ¸Þ ¼¼Áö´Â Ŭ·¡½º À§ ÀÚ µå ¿¡ ÀÖ½À´Ï´Ù.
÷°¡ÇÒ ¼ö ÀÖ´Â ±â´É, ÇÏÁö¸¸ ²À ÇÊ¿äÇÑ °Í¸¸À» ³Ö¾î¾ß ÇÕ´Ï´Ù.
ÀÚ~ ÀÌ Á¤µµ µÇ¸é ¾î´À Á¤µµ MFC ÀÇ Ç®½ºÅ©¸°À» ÀÌ¿ëÇÑ °ÔÀÓÀ»
Á¦ÀÛ ÇÒ ¼öÀÖ½À´Ï´Ù. ±× ´ÙÀ½ ³ª¸ÓÁö ij¸¯ÅÍÀÇ µ¿ÀÛÀ̳ª ÀΰøÁö´É
ó¸®, Âï±â µîµîÀÇ °ÔÀÓÀÇ ±â´ÉÀº º°µµÀÇ ÇÔ¼ö·Î Á¦ÀÛÇÏ°í ¾îµð?
¹Ù·Î Application Ŭ·¡½ºÀÇ IdleÇÔ¼ö¿¡ ÷°¡ÇÏ¸é µË´Ï´Ù.
¿©±â±îÁö 1ÀåÀÇ MFC¸¦ ÀÌ¿ëÇÑ Ç®½ºÅ©¸° Ȱ¿ëÆíÀÌ¿´½À´Ï´Ù.
´ÙÀ½½Ã°£¿¡ Á¦ 2Àå À©µµ¿ì ¸ðµå¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¸µµ·Ï
ÇÏÁö¿ä~ Á¶±Ý º¹ÀâÇѵ¥ (¸Þ ¼¼Áö°¡ ¸¹°Åµç¿ä~) ÇϳªÇϳª »ìÆì
º¸¸é¼ Á¦ÀÛÀ» ÇØ º¸µµ·Ï ÇÏÁö¿ä~
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º
±¸¼º
2. ½ÇÁ¦ MFCÀÇ ¸Þ¼¼Áö ¸Ê ±¸¼º
Á¦ 2Àå MFC·Î ±¸ÇöÇÏ´Â À©µµ¿ì ¸ðµå ó¸® ¹æ¹ý
-> 1. MFCÀÇ Æ¯Â¡°ú ¸Þ¼¼Áö ±¸Á¶
¹ú½á 3¹øÂ° °ÀǸ¦ ÁغñÇØ¾ß ÇÏ´Â ½Ã°£ÀÌ µÇ¾ú±º¿ä. ¸Å¹ø °Á¸¦Áغñ
ÇÏ¸é¼ ¹«Ã´À̳ª ±äÀåµÇ°í °ÆÁ¤ÀÌ µË´Ï´Ù. ¿Ö³Ä±¸¿ä? ¾î¶»°Ô ÇÏ¸é º¸
´Ù ½±°Ô µ¶Àںе鲲 ÀÌÇØ¸¦ ½ÃÄѵ帱±î ½ÍÀº ¸¶À½¿¡... ^^;
À̹ø ½Ã°£ºÎÅÍ´Â ´ÙÀÌ·ºÆ® ¿¢½º¸¦ ÀÌ¿ëÇØ ¸Ê¿¡µðÅͳª ½ºÇÁ¶óÀÌÆ® µ¿ÀÛ
ÅøÀ» Á¦ÀÛÇÒ¼ö ÀÖ´Â ±â¹ÝÀ» ´ÙÁö±â À§ÇÏ¿© MFC¸¦ ÀÌ¿ëÇÑ À©µµ¿ìÁî ¸ð
µå¿ëÀ¸·Î °øºÎÇϵµ·Ï ÇսôÙ.
1. MFC·Î Á¦ÀÛµÈ ÇÁ·Î±×·¥ÀÇ Æ¯Â¡
ÀϹÝÀûÀ¸·Î °øÅëÀûÀΠǥÁØÀ» °¡Áö°í¼ À©µµ¿ìÁî ÇÁ·Î±×·¥À» Á¦ÀÛÇϰÔ
µË´Ï´Ù. À̰ÍÀº ÀÌ¹Ì API¸¦ °øºÎÇÏ¸é¼ À©µµ¿ìÁîÀÇ Ç¥ÁØÀ» µû¸£¸é¼
¹ß»ýµÇ´Â ÀÎÅÍÆäÀ̽ºÀÇ µðÀÚÀÎÀÇ Ç¥ÁØÈ°¡ »ý±â¾î »ç¿ëÇÏ´Â À¯Àú·Î
ÇÏ¿©±Ý È¥µ·À» ÀÏÀ¸Å´ÀÌ ¾øÀÌ Ã¼°è¼ºÀ» º¸¿©ÁÖ±â À§ÇÔÀÌ ¾Æ´Ò±î ÇÕ´Ï
´Ù.
±×·± ¸é¿¡¼ MFC·Î Á¦ÀÛÇϴµ¥¿¡µµ ¾î¶°ÇÑ °øÅëµÈ ÅëÀϼºÀÌ µû¸¨´Ï´Ù.
Åø¹ÙÀÇ »ý¼º, µµ¿ò¸» º¸±â ±â´É, ¸Þ´º±â´É µîµî µµ½º½ÃÀý¿¡´Â º¹ÀâÇÏ
°Ô ÆË¾÷ÀÌ´Ï Ç®´Ù¿îÀÌ´Ï ¾ÆÀÌÄÜ »ý¼º ¹æ¹ýÀÌ´Ï ÇÏ¿© º°µµ·Î ¹è¿ì°í
½ÀµæÇؼ ó¸®ÇÏ´Ï À̸® Àú¸® ½Ã°£µµ °É¸®°í »ç¿ëÇÏ´Â »ç¶÷À¸·Î ÇÏ¿©
½Àµæ·Âµµ ÇÊ¿ä·Î ÇÏ°Ô Çß½À´Ï´Ù. ±×·¯³ª À©µµ¿ìÁî´Â ÅëÀÏµÈ ÀÎÅÍÆäÀÌ
½º·Î ½±°Ô Á¦ÀÛÇÏ°í »ç¿ëÇÏ´Â °ÍÀÌ ¸¶À½ÀÌ µéÁÒ~
ÀÚ~ ÇÊÀÚ°¡ ¿Ö ÀÌ·± ¸»À» Çß³Ä¸é ¹Ù·Î À©µµ¿ìÁî ¸ðµå·Î Á¦ÀÛÇÏ´Â ÇÁ
·Î±×·¥¿¡ ÀÖ¾î ÀÎÅÍÆäÀ̽º ºÎºÐÀ» ½Å°æÀ» ¾È¾µ¼ö ¾ø´Ù´Â °ÍÀÌÁÒ~
ÇÏÁö¸¸ API¿¡¼´Â ¾î¶»°Ô Çß³ª¿ä? ÀÏÀÏÀÌ ÇØ´ç ºÎºÐÀ» Á¦ÀÛÇØÁÖ¾î¾ß
ÇßÁö¿ä~ ±×·¯³ª MFC´Â óÀ½ ÇÁ·ÎÁ§Æ® »ý¼º½Ã Á¶°Ç¿¡ ¸Â´Â ÄÚµå»ý¼ºÀÌ
ÀÌ·ç¾îÁö¹Ç·Î ÀÎÇØ °£´ÜÇÑ ÀÎÅÍÆäÀ̽º´Â ±¸¼ºÀÌ µÇ¾î ÀÖ´Ù´Â °ÍÀÌÁÒ~
Áö±ÝÀÌ¶óµµ ½±°Ô »ý¼ºµÈ ¼Ò½º¸¦ F7¸¦ ´·¯ ÄÄÆÄÀÏÈÄ ½ÇÇàÀ» ÇØº¸½Ã¸é
½±°Ô ¾Æ½Ç°Ì´Ï´Ù.
¸Þ¼¼ÁöÀÇ ½¬¿î °ü¸®
ÀÌ°Ç API¸¦ »ç¿ëÇÏ´Ù MFC¸¦ »ç¿ëÇϸé óÀ½ºÎÅÍ ´À³¢´Â Á¡Àε¥ ¸Þ¼¼Áö
¸¦ ÇÔ¼ö´ÜÀ§·Î °ü¸®ÇÏ°í Æ¯È÷ Ŭ·¡½º À§ÀÚµå·Î ÀÎÇØ °ü¸®µÇ¹Ç·Î Ưº°
È÷ ½Å°æ¾²Áö ¾Ê¾Æµµ ¿øÇÏ´Â ±â´ÉÀ» Ãß°¡ÇÏ¸é µË´Ï´Ù.
À̺¸´Ù MFCÀÇ Æ¯Â¡Àº ¸¹Àºµ¥ Á¦°¡ ´Ù ´Ã¾î ³õÀ» ¼ö´Â ¾ø°í, ½ÇÁ¦·Î
µ¶ÀںеéÀÌ Á¦ÀÛÀ» ÇÏ¸é¼ ÇǺηΠ´À³¢´Â °ÍÀÌ ºü¸¦°Ì´Ï´Ù.
2. À©µµ¿ìÁî ¸ðµå¿¡¼ÀÇ ¸Þ¼¼Áö ±¸Á¶
¾Õ¼ ¹è¿î Ç®½ºÅ©¸° ¸ðµå¿¡¼´Â Application°ú FrameÀ̶ó´Â µÎ°³ÀÇ
Ŭ·¡½º¸¦ ÀÌ¿ëÇß´Ù. ±×°ÍÀº º°µµÀÇ È¸é °»½ÅÀÌ ÇÊ¿ä¾ø´Ù ¾µ¶§ ¾ø´Â
¸Þ¼¼Áö·Î ÀÎÇØ ¹ø°Å·Î¿òÀ» ¾ø¾Ö±â À§ÇؼÀÌ´Ù.
Ưº°È÷ Åø¹Ù¶ó´ø°¡ ¸Þ´º°¡ ³ª¿À´Â °Íµµ ¾È´Ñµ¥ µµ±Ô¸àÆ® ¸Þ¼¼Áö´Ï
ºä¸Þ¼¼Áö°¡ ÇÊ¿ä¾ø±â ¶§¹®ÀÌ´Ù.
À̹æ¹ý¸»°íµµ ¾ÆÀ̾˷α׸¦ ÀÌ¿ëÇØ ÇÏ´Â ¹æ¹ýÀÌ Àִµ¥Ã³À½ ¼Ò½º¸¦
»ý¼ºÇÒ¶§ ´ÙÀ̾˷α׷Π»ý¼ºÇÏ¸é ¸¹Àº ·®ÀÇ ¸Þ¼¼Áö°¡ ¾ø´Âµ¥ À̰Í
À» »ç¿ëÇØ¼ °ÔÀÓÀ» Á¦ÀÛÇÏ´Â ¹æ¹ýµµ ÁÁÀ» °ÍÀÌ´Ù.
±×·¸´Ù¸é À̹øÁ¦ÀÛÇÏ´Â À©¸ðµå¿ë °ÔÀÓÀº ¾î¶²½ÄÀ¸·Î ¸Þ¼¼Áö°¡ ±¸¼º
µÇ¾î ÀÖ³ª¸¦ »ìÆìº¸¸é
+- Application : CDemoApp class
|
+- Frame : CMainFrame class
|
+- Document : CDemoDoc class
|
+- View : CDemoView class
¿ÀÀ×? ±âÁ¸ÀÇ ¸Þ¼¼Áö¿Í ÀüÇô ´Ù¸¦°ÍÀÌ ¾ø³×? À½~ ÀÌÀÌ»óÀÇ ¸Þ¼¼Áö´Â
µ¶ÀںеéÀÌ ÇÊ¿äÇÑ ´ÙÀ̾˷α׸¦ »ý¼ºÇÒ¶§ ÇÊ¿ä ÇÏÁö¸¸ Á¦°¡Á¦½ÃÇÏ´Â
MFC·Î ¿¡´Ï¸ÞÀ̼ÇÀÌ µÇ´Â ÇÁ·Î±×·¥Àº ÀÌÁ¤µµ Ŭ·¡½º¸é ÃæºÐÇÕ´Ï´Ù.
À̹ø¿¡ Á¦À۵Ǵ À©¸ðµå¿ëÀº Ç®¸ðµå¿¡ ºñÇØ View ºÎºÐÀÌ °Á¶°¡ µÇ´Â
ºÎºÐÀÌ´Ù. ±×·¯¹Ç·Î À̺κÐÀ» »ó¼¼È÷ Áý°í ³Ñ¾î °¡µµ·Ï Çϰí ÀÏ´Ü °¢
°¢ÀÇ ¸Þ¼¼Áö¿¡ ´ëÇØ ¾Ë¾Æ º¸°í Áö³ª°¡ÀÚ~
1) CAboutDlg ´Â µµ¿ò¸»À» ó¸®Çϱâ À§ÇÑ ºÎºÐÀ̵¥ Ưº°ÀÌ ½Å°æ¾µ°Ç
¾ø½À´Ï´Ù. ´Ù¸¸ ¸®¼Ò½º °ü¸®±â¿¡¼ µµ¿ò¸»ÀÌ ³ª¿À´Â ¹Ú½º¸¦
À̸®
Àú¸® ¸ð¾çÀ» ³»¾î ¸ÚÀ» µé¿© ³õÀ¸¸é ³¡~
2) CDemoApp ¿¡¼ »ç¿ëµÇ´Â ÁÖµÈ ±â´ÉÀº Idle Time¹ß»ýÇÏ´Â °ÍÀ» ÀÌ
¿ëÇØ µ¶ÀںеéÀÌ ÇÊ¿ä·Î ÇÏ´Â ±â´ÉÀ» »ç¿ëÇÏ¸é µË´Ï´Ù.
3) CMainFrame ¿¡¼´Â Áö³¹ø°ú´Â ´Ù¸£°Ô Á߿伺Àº ¶³¾îÁø´Ù. ÇÏÁö¸¸
¾øÀ¸¸é ¾ÈµÇ´Â Ŭ·¡½ºÀÔ´Ï´Ù. ±×·¯¸é ¾î¶² ±â´ÉÀ» ÷°¡ÇÏ´À³Ä?
¹Ù·Î Åø¹Ù¸¦ »ý¼ºÇÏ°í ¸Þ´ºÀ» »ý¼ºÇϰí, ±×¸®°í °¡Àå Áß¿äÇÑ
À©µµ
¿ìÀÇ ±âº» ¹ÙÅÁÀÌ µÇ´Â È¸é ¹Ú½ºÀÇ µðÀÚÀÎÀ» ÇØ¾ß °ÚÁÒ~
ÀÌ°Ç Áö
³¹ø ½Ã°£¿¡ À̾߱â ÇßÀ¸´Ï ±×°ÍÀ» ÂüÁ¶~
4) CDemoDoc ÇöÀç ¿¡´Ï¸ÞÀ̼ÇÀ» ±¸ÇöÇϹǷΠº°µµÀÇ ¹®¼¸¦ °ü¸®ÇÒ ÇÊ
¿ä´Â ¾øÁö¿ä~ ±×·¯´Ï À̺κÐÀº ½Å°æÀ» ²¨µµ µË´Ï´Ù. Ç㳪
Áö¿ì°Å
³ª ¾ø¾Ö¸é Å©³ªÅ« ¿À·ù°¡....(ÀÌ°É Áö¿ï°æ¿ì °¨´çÇÒ ¹®Á¦´Â
ÇãÇã~
¾îÂîµµ¸®·±Áö?)
5) CDemoView µåµð¾î °¡Àå Áß¿äÇÑ ÀÌŬ·¡½º´Â À©¸ðµåÀÇ °ÔÀÓÁ¦ÀÛ¿¡
Áö´ëÇÑ ¿µÇâ·ÂÀ» ¹ßÈÖÇϴ Ŭ·¡½º¶ó°í ÇØµµ °ú¾ðÀÌ ¾Æ´Ï¶ó
ÇÕ´Ï´Ù
3. Application ¸Þ¼¼ÁöÀÇ ±¸¼º
À̹ø¿¡ Á¦ÀÛÇÏ´Â Application ¸Þ¼¼Áö´Â Áö³¹ø°ú º°´Ù¸¥ °ÍÀº ¾ø´Ù
ÇÏÁö¸¸ Áö³¹øº¸´Ù ¼ö¿ùÇÏ´Ù ¿Ö³Ä¸é ½¬´Â ½Ã°£À» üũÇÏ´Â ÇÔ¼öÀ̿ܿ¡
Ãß°¡ ÇÔ¼ö¸¦ À̰÷¿¡ ÁýÁßÇÒ Çʿ䰡 ¾ø´Ù.
¸Þ¼¼ÁöÁß OnIdle¸¦ Ãß°¡Çؼ ´ÙÀ½°ú °°Àº ¼Ò½º¸¦ ¾à°£ ¼öÁ¤À» ÇØÁØ´Ù.
BOOL CMfcddex3App::OnIdle(LONG lCount)
{
CWinApp::OnIdle (lCount);
// Find the active view:
CDemo3View* pActiveView = (CMfcddex3View*)((CMainFrame*)
(m_pMainWnd))->GetActiveView
();
return pActiveView->updateFrame
();
}
¿©±â¼ CDemo3View Ŭ·¡½º´Â ¾Õ¼ ¼³¸íÇßÁö¸¸ À©¸ðµå¿¡¼ »ç¿ëµÇ´Â ¸ð
µç 󸮴 View¿¡ ÀÖÀ¸¹Ç·Î ±×°÷¿¡ È¸é °»½Åó¸® ÇÔ¼ö°¡ ÀÖ´Ù ±×·¯¹Ç
·Î À̰÷ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ¸Þ¼¼ÁöÁß ½¬´Â ½Ã°£¿¡ ȸéÀ» °»½Å ÇØÁÖ°Ú±Ý
Çϸé ÀÏ´Ü ÀÚµ¿ Çø³ÇÎÀÌ ÀϾ°ÚÁö¿ä~
¿Í¿ì...½±´Ù ½¬¿ö~ ½¬¿î°Ç ´©±¸³ª ÇÒ¼ö ÀÖ´Â °ÍÀÌÁÒ~ MFCµµ ´©±¸³ª ÇÒ
¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.
[Âü°í] ¸®¼Ò½º·Î Á¦ÀÛµÈ ´ÙÀ̾ó·Î±×ÀÇ ¸Þ ¼¼Áö
º¸Åë µ¶ÀÚºÐÀÌ Á¦ÀÛµÈ ´ÙÀ̾ó·Î±×¸¦ ȸ鿡 ¶Ù¾î¾ß Çϴµ¥ ¾î¶»°Ô ÇØ
¾ß ÇÒ±î? API¿¡¼´Â ´ÙÀ̾ó·Î±×¸¦ ¶ç¿ì±â À§ÇØ DialogBox()¶ó´Â ÇÔ¼ö
¸¦ ÀÌ¿ëÇØ¼ »ý¼ºÇϰí EndDialog()·Î ´Ý°í ÇßÀ» °Ì´Ï´Ù.
ÇÏÁö¸¸ MFC¿¡¼´Â ÇØ´ç ¸®¼Ò½ºÀÇ À̸§À» Ŭ¸¯Çϸé DoDataExchange¶ó
´Â ÇÔ¼ö°¡ Àִµ¥ ´ÙÀ̾ó·Î±×¸¦ ÃʱâÈ¿Í »ý¼ºÀ» ÇØÁÝ´Ï´Ù. ÀÌ·¸°Ô
ÇϹǷΠ½±°Ô µî·ÏÀ» ÇÒ ¼öÀÖ½À´Ï´Ù.
À̿ܿ¡µµ ¸®¼Ò½ºÀÇ ±â´ÉÀ» Ãß°¡ÇϱâÀ§ÇØ Command ÇÔ¼ö°¡ »ý±é´Ï´Ù.
ÀÌ·± °ÍÀº Á÷Á¢ ¸Þ ¼¼Áö ·¹ÆÛ·±½º³ª MFCÀÇ Àб⠱¦ÂúÀº Ã¥À» ÀÐ¾î º¸½Ã
¸é ÀÚ¼¼È÷ ³ª¿É´Ï´Ù.
- fjudy -
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º
±¸¼º
2. ½ÇÁ¦ MFCÀÇ ¸Þ¼¼Áö ¸Ê ±¸¼º
Á¦ 2Àå MFC·Î ±¸ÇöÇÏ´Â À©µµ¿ì ¸ðµå ó¸® ¹æ¹ý
1. MFCÀÇ Æ¯Â¡°ú ¸Þ¼¼Áö ±¸Á¶
2. DirectX »ç¿ë À§Ä¡¿Í ÀüüÀûÀÎ ÇÁ·Î±×·¥
¿¡±¸±¸....4¹øÂ° ¸¶Áö¸· ±ÛÀ» ½á¾ß Çϴµ¥ ÀÌ°É ±ô¹Ú ÀØ°í ´Ù¸¥ ÀÏÀ»
ÇÏ´Ùº¸´Ï...
ÀÎÅͳݿ¡ µ¹¾Æ ´Ù´Ï´Ù º¸¸é Á¦ ±ÛÀÌ ÀÌ °÷ Àú °÷¿¡ ÀÖ´õ±º¿ä~ ^^;
¸¹ÀÌ Àоî ÁÖ½Ã°í °øºÎÇϽô ºÐµé²² °¨»ç µå¸®¸ç, ¾ÕÀ¸·Î ´õ¿í ´Ù¾ç
ÇÑ ÁÖÁ¦·Î °Á Ȱµ¿À» ÇÒ±î ÇÕ´Ï´Ù.
Áö±Ý ÀÛ¾÷(¸·³ëµ¿)ÇÏ´Ù°¡ ³¯»õ°í ±ÛÀÌ ½áÁú±î ½Í³×¿ä?
1. ´ÙÀÌ·ºÆ®¸¦ »ý¼ºÀ» ÇØ¾ß Çϴµ¥?
MFC¸¦ »ç¿ëÇÏ¸é¼ Ãʺ¸Àڷμ óÀ½¹®Á¦°¡ ¾îµð¿¡ ´ÙÀÌ·ºÆ® ¿¢½ºÀÇ ÃÊ
±âȸ¦ ¾î´À ºÎºÐ¿¡ ÇØ¾ß ÇÒ±î? ¾î¶² Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿¡´Ù ³õ¾Æ¾ß ÇÒ±î
? ¾Æ´Ï¸é º°µµÀÇ »ý¼ºÀ̳ª Ãʱâȸ¦ Çϱâ À§ÇÑ ¸Þ ¼¼Áö°¡ Á¸ÀçÇÏ´Â °Í
Àº ¾Æ´Ò±î? ÀÌ·± »ý°¢À» ÇÕ´Ï´Ù.
# ÇÁ·Î±×·¡¸Ó°¡ ¾Ë¾Æ¾ß ÇÒ ¸í¾ð -----------------------------------
ÇÁ·Î±×·¡¸Ó°¡ »ý°¢ÇÑ ¸ðµç »ý°¢Àº ¸ðµÎ ÇÁ·Î±×·¥À¸·Î Á¦ÀÛÀÌ °¡´ÉÇÏ´Ù.
±×·¯¹Ç·Î Áö±Ý »ý°¢ÇÏ´Â °Í¿¡ ´ëÇØ Àß¾ÈµÈ´Ù¸é ±×°ÍÀº ±æÀ» ¹ß°ßÀ» ¸ø
ÇßÀ»»Ó! ¾ðÁ¨°¡´Â ±×°ÍÀ» Á÷Á¢ Á¦ÀÛÇÒ ¼ö ÀÖ´Ù.
-----------------------------------------------------------------
±×·¸´Ù¸é ´ÙÀÌ·ºÆ® ¿¢½º¸¦ ÃʱâÈÇϱâ À§ÇÑ ¸Þ¼¼Áö´Â ¾î¶²°ÍÀÎ ±æÀ»
ã¾Æ º¸ÀÚ~
MFC 3ÆíÀÇ °Á¿¡ À̹ø¿¡ À©¸ðµå·Î Á¦ÀÛÀº View¸¦ Áß½ÉÀ¸·Î Á¦ÀÛÀ» ÇÑ
´Ù°í Çß´Ù. ±×·¸´Ù¸é ´«Ä¡°¡ ÀÖ´Â µ¶ÀÚ¶ó¸é Ŭ·¡½º À§Àڵ带 view Ŭ
·¡½º¿¡ ¸ÂÃß¾î ³õ°í ¾ÕÀ¸·Î Á¦ÀÛµÉ ¸Þ¼¼ÁöµéÀ» ÀÔ·ÂÇÒ Áغñ¸¦ Çϰí ÀÖ
À» °ÍÀÌ´Ù.
À©µµ¿ìÁ ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÀÇ Ã³¸® ¹æ¹ýÀ» ¾Ë¾Æ º¸ÀÚ~
ÀÏ´Ü ¼ö¸¹Àº À©µµ¿ìÁî°¡ ȸ鿡 ¶°ÀÖ´Ù. ±×¸®°í ±×¼Ó¿¡¼ ÀÚ½ÅÀÌ Á¦
ÀÛÇÑ ´ÙÀ̾˷α׳ª À©µµ¿ìÁî°¡ ¶ã¶§ óÀ½ ÇѹøÀº »ý¼º°ú µ¿½Ã¿¡ ȸé
¿¡ º¸¿©Áö°Ô µÈ´Ù. ±×¸®°í ±× ´ÙÀ½ºÎÅÍ´Â º¯ÈµÈ °Í¸¸ À©µµ¿ìÁîÀÚ¿ø¿¡
¸Þ¼¼Áö¸¦ º¸³»¾î º¯ÈµÈ ºÎºÐÀ» °»½ÅÇØÁØ´Ù. À̰ÍÀÌ GUI ÀÇ ÇÙ½É ¾Ë°í
¸®Áò Áï, Ä¿³ÎÀÇ À̺κп¡ ÇØ´çÇÏ´Â ºÎºÐÀ̶ó°í ÇÒ¼ö Àִµ¥ ÇÏ¿©°£
±íÀÌ µé¾î°¥ ÇÊ¿ä¾øÀÌ ¿©±â±îÁö¸¸ À̾߱â Çϰí(±Ã±ÝÇϽŠºÐÀº ½Ã½ºÅÛ
ÇÁ·Î±×·¥À̳ª ¿î¿µÃ¼Á¦¿¡ ´ëÇØ °ü·Ã ¼ÀûÀÌ ¼Á¡¿¡ ÁñºñÇϹǷΠ¿©±â¼
¹ø¿ª¼ÀûÀº ¾²·¹±âÀÌ°í ¿ø¼µéÀ» »çº¸½Ã´Â °ÍÀÌ ÀÖ¾î¿ä~ Ã¥Àº »¡°»ö,
³ë¶û»ö, ÆÄ¶û»öÀ¸·Î ¸¹ÀÌ ³ª¿Í ÀÖ´õ±º¿ä~ ^^;) MFCÀÇ ¸Þ¼¼Áö ±¸Á¶µµ
ÃÖÃÊÀÇ Ãʱâȸ¦ ÇØÁÖ´Â ºÎºÐ°ú ³ªÁß¿¡ °»½ÅÀÌ µÇ´Â ºÎºÐ, ±×¸®°í ÇÊ
¿ä½Ã À¯ÀúÀÇ °Á¦¸Þ¼¼Áö³ª ¾î¶² ¿ÜºÎÀÇ ¸Þ¼¼Áö·Î ÀÎÇØ º¯È¸¦ °»½ÅÇÏ
±âÀ§ÇÑ ¸Þ¼¼Áö·Î ³ªÀ§¾î Áý´Ï´Ù.
#Âü°í
À©µµ¿ìÁî ¸Þ¼¼Áö °ü·ÃµÈ Á¤º¸´Â À©µµ¿ìÁî NT ¼ÀûÀÌ ÀÚ¼¼È÷ ³ª¿Í ÀÖÀ¸
¹Ç·Î À©µµ¿ìÁî NT°ü·Ã ÇÁ·Î±×·¡¹Ö Ã¥À» Âü°í Çϼ¼¿ä~ (°æÁ¦°¡ ¾î·Á¿ì
´Ï Ã¥À» »ç½ÃÁö ¸¶½Ã°í µµ¼°üÀ̳ª ¼Á¡¿¡¼ ÀÐ¾î¼ Âü°í¸¸Çϼ¼¿ä~
±×·³ µµ¿òÀÌ µÉ°Ì´Ï´Ù. ¿©À¯°¡ ÀÖÀ¸½Å ºÐÀº NT°ü·Ã ¼Àûµµ ÇѱÇÀº °¡
Áö°í °è½Ã´Â °Íµµ ... ^^; )
±×·¸´Ù¸é ÀÏ´Ü ÃÖÃÊ¿¡ »ý¼ºÀ» ÇÏ¸é¼ ´ÜÇѹø¸¸ ¸Þ¼¼Áö°¡ ¹ß»ýµÇ´Â ÇÔ
¼ö¸¦ ¸¸µé¾î º¸ÀÚ¸é ¿ª½Ã Ŭ·¡½º À§ÀÚµå·Î °¡¼¼¿ä~ (ÀÌ¹Ì °¡ ÀÖ´Ù±º¿ä
~)
¸Þ¼¼ÁöÁß¿¡ OnInitialUpdate¸¦ ¼±ÅÃÇØ¼ º¸¸é
void Ŭ·¡½º¾ßView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// ´ÙÀÌ·ºÆ® ¿¢½º¸¦ »ý¼ºÇÑ´Ù. 640x480ÀÇ
Å©±â·Î
m_DD.Create (*this, 640, 480);
// ÆÄ·¹Æ®¸¦ »ý¼ºÇϰí
m_Palette.Create ();
m_DD.SetPalette (m_Palette);
// À¯Àú°¡ »ç¿ëÇÒ Æò¸éÀ» »ý¼º
m_Surface.Create();
............
............
}
º¸Åë º¸¿©Áֱ⠰ü·Ã Ŭ·¡½º´Â CView¿¡¼ »ó¼ÓÀ» ¹Þ½À´Ï´Ù. ±×·¯´Ï
CViewÀÇ ÇüÀ» Âü°íÇÏ´Â °ÍÀº ´ç±ÙÀÌÁÒ? ´ÙÀÌ·ºÆ®¿¢½º´Â ÇϳªÀÇ ÇÁ·Î±×
·¥¿¡ Çѹø¸¸ »ý¼ºÀÌ µÇ´Ï À§ÀÇ ¸Þ¼¼Áö°¡ ÀÌÁ¶°Ç¿¡ ¸ÂÀ¸´Ï ÇÊ¿äÁ¶°ÇÀÎ
°Í°ú µ¿½Ã¿¡ ÃæºÐÁ¶°ÇÀÌÁÒ~ (À×? ÇÊ¿ä´Â ¾Æ´Ñµí~~--;)
2. Âï¾î Áֱ⵵ ÇØ¾ß Çϴµ¥...
ȸ鿡 ÇϳªÀÇ º¯È°¡ »ý±â¸é ±×°ÍÀ» ±×·ÁÁÖ´Â ¸Þ¼¼Áö´Â ´ç¿¬ÀÌ ÀÖ¾î
¾ß ȸ鿡 ¹«¾ð°¡°¡ µîÀåÇÕ´Ï´Ù. ¾ø¾îµµ µÇÁö¸¸ ±×·¡µµ ÀÖÀ¸¸é ....
±×·¯¹Ç·Î À̰ÍÀ» °¡´ÉÇÏ°Ô ÇØÁÖ´Â ¸Þ¼¼Áö¸¦ ã¾Æ º¸ÀÚ¸é (µÚÀûµÚÀû~)
À×? ´©±¸ÁÒ? Paint¸¦ ¾²½Ã´Ù°í ÇϽźÐÀÌ?
Paintµµ ¸Â±äÇÕ´Ï´Ù¸¸ Á¦°¡ ¿©±â¼ ±¸ºÐÀ» º°µµ·Ï ¢±â´Â ¹¹ÇÏÁö¸¸ ÀÎ
À§¼º¹®Á¦·Î Paint¿Í Draw¸¦ ±¸ºÐÀ» Áþ´Âµ¥ ÀÏ´Ü ÀÚ¿¬ÀûÀÎ °ÍÀ» Ãß±¸ÇÏ
´Â ÇÊÀڷνã Draw¸¦ ¾²·Á°í ÇÕ´Ï´Ù.
void Ŭ·¡½º¸Â¾ÆView::OnDraw(CDC* pDC)
{
CMfcddex3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for
native data here
}
¿ä·¸°Ô »ý¼ºÀÌ µÇ¾î ÀÖÁÒ? ÀÌ ºÎºÐÀº ¹Ù²Ù°Å³ª Ãß°¡ÇÒ°Ç ¾ø½À´Ï´Ù. ´Ù
¸¸ µ¶ÀÚ´ÔµéÀÌ Ãß°¡ÇÏ½Ç °ÍÀÌ ÀÖÀ¸½Ã´Ù¸é Ãß°¡ÇØ ³ÖÀ¸¼Åµµ µË´Ï´Ù.
±×·¸´Ù¸é ¿©±â¼ ½ÇÁ¦·Î °ÔÀÓÀ» ÁøÇàÇÏ´Â ºÎºÐÀº ¾î´À ºÎºÐÀϱî?
¾Õ¼¼ ¹è¿î Àüü¸ðµå MFC¸¦ »ý°¢Çغ¸ÀÚ °Å½Ã¼´Â ¾ÖÇø®ÄÉÀÌ¼Ç Å¬·¡½º¿¡
ȸéÀ» º¹±¸ÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé¾î ¸¶Ä¡ µµ½ºÀÇ °ÔÀÓÀ» Á¦ÀÛÇϵí Á¦ÀÛÀ»
Çß´Ù. À̹ø¿¡µµ ´Ù¸¦ °ÍÀº ¾ø´Ù.
µµ½º¿¡¼ °ÔÀÓÀ» Á¦ÀÛ ÇÒ ¶§ Main¿¡ ¸ù¶¥ Áý¾î ³Ö´Â ¹æ¹ýó·³ ´ÙÀ½ ÇÔ¼ö
´Â ±×·¯ÇÑ ¹æ½ÄÀ¸·Î ÄÚµùÀÌ µÇ¾î ÀÖ±ä Çѵ¥
BOOL Ŭ·¡½º¸¶Á®View::Main()
{
// if (!((CMainFrame*)m_pMainWnd)->m_bActive)
// return
FALSE;
// Ȱ¼ºÈ°¡ µÇ¾î ÀÖ´À³Ä?¿¡ °ü·ÃµÈ º¯¼öÀÇ °ªÀ» Âü°íÇÏ´Â °ÍÀε¥
// ÀÌÇÁ·Î±×·¥¿¡¼ ¹è°æÀ» º¹±¸Çϴµ¥ ÇÊ¿ä¾ø´Ù.
DWORD thisTickCount;
// ½Ã°£À» äũÇϱâÀ§ÇÑ
RECT rcRect;
DWORD delay[4]
= {50, 78, 13, 93};
int i;
PALETTEENTRY pe[256];
// ÆÄ·¹Æ®¸¦ ´ã±âÀ§ÇÑ
HRESULT ddrval;
// ÇöÀç ½Ã°£À» º¸°£Çϰí
thisTickCount = GetTickCount();
for(i=0; i<3; i++)
{
if((thisTickCount - m_lastTickCount[i])
> delay[i])
{
// Move
to next frame;
m_lastTickCount[i]
= thisTickCount;
m_currentFrame[i]++;
if(m_currentFrame[i]
> 59)
m_currentFrame[i]
= 0;
//
Added to move the sprites.
if
(++m_xpos[i] > (640-64))
m_xpos[i]
= 0;
if
(++m_ypos[i] > (480-64))
m_ypos[i]
= 0;
}
}
// 640x480ÀÇ ÇÑ ÇÁ·¹ÀÓÀ» °¡Á®¿À±â À§ÇÑ ±×¸² Å©±â
rcRect.left = 0;
rcRect.top = 0;
rcRect.right = 640;
rcRect.bottom = 480;
while( 1 )
{
ddrval = m_DD.BackBuffer().BltFast
(0, 0, m_Surface, rcRect,
DDBLTFAST_NOCOLORKEY
);
if( ddrval == DD_OK )
{
break;
}
if( ddrval == DDERR_SURFACELOST
)
{
restoreAll();
}
if( ddrval != DDERR_WASSTILLDRAWING
)
{
return
TRUE;
}
}
if(ddrval != DD_OK)
{
return TRUE;
}
for(i=0; i<3; i++)
{
rcRect.left = m_currentFrame[i]%10*64;
rcRect.top =
m_currentFrame[i]/10*64 + 480;
rcRect.right = m_currentFrame[i]%10*64
+ 64;
rcRect.bottom = m_currentFrame[i]/10*64
+ 64 + 480;
while( 1 )
{
ddrval
= m_DD.BackBuffer().BltFast (m_xpos[i], m_ypos[i],
m_Surface,rcRect,
DDBLTFAST_SRCCOLORKEY );
if(
ddrval == DD_OK )
{
break;
}
if(
ddrval == DDERR_SURFACELOST )
{
restoreAll();
}
if(
ddrval != DDERR_WASSTILLDRAWING )
{
return
TRUE;
}
}
}
// Flip the surfaces
while( 1 )
{
ddrval = m_DD.Paint (); // Âï¾î~
¹«Á¶°Ç Âï¾î~
if( ddrval == DD_OK )
{
break;
}
if( ddrval == DDERR_SURFACELOST
)
{
restoreAll();
}
if( ddrval != DDERR_WASSTILLDRAWING
)
{
break;
}
}
return TRUE;
}
(À̰ŠMFC ¸Â¾Æ¿ä? ¸ð¾ç¸¸ MFC ¾Æ´Ï ¿¹¿ä? ) ¿ï ¶ö ¶ó~ ºÐ¸íÈ÷ À̹æ¹ýÀ»
»ç¿ëÇÏ¸é °ÔÀÓ Á¦ÀÛ ÅøÀ» SDI·Î ±¸¼ºÇÏ°í ´ÙÀÌ·ºÆ®ÀÇ Æò¸éÀ» Àâ°í º¹Àâ
ÇÑ Ã³¸®¾øÀÌ ÀÎÅÍÆäÀ̽º ºÎºÐÀ» ½Å°æ ½á¼ ÅøÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Ù.
´Ù½Ã Á¤¸®¸¦ ÇÏÀÚ¸é~
1. ¸Þ ¼¼Áö¸¦ ±¸¼ºÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.
2. ´ÙÀÌ·ºÆ® ¿¢½º¸¦ MFC¿¡ ÀÀ¿ëÇÏ´Â ¹æ¹ýÀº ´Ù¾çÇÏ´Ù.
1) ´ÙÀ̾ó·Î±×·Î »ý¼ºÇؼ Á¦ÀÛ
2) µµÅ¥¸ÕÆ®¿Í ºä °¡ ¾øÀÌ Á¦ÀÛÇÑ´Ù.
3) À©µµ¿ì ¸ðµå¿¡¼ Ãæµ¹¾øÀÌ »ç¿ëÇÑ´Ù.
3) ±âŸ ¹æ¹ý
3. ¾îµð¿¡¼ »ý¼ºÇÏ°í ¾îµð¼ ¼Ò¸êÀ» ÇÏ´ÂÁö¸¦ ÆÄ¾ÇÇÑ´Ù.
[ ¸Þ ¼¼Áö ºÐ¼®À» ÅëÇÑ À§Ä¡°áÁ¤ ]
4. ÀÀ¿ë ÇÁ·Î±×·¥½Ç·ÂÀ» ½×´Â´Ù.
Á¦°¡ À§ÀÇ 2¹ø¿¡¼ 2),3)À» ´Ù·ç¾î º¸¾Ò´Âµ¥ ¾ÕÀ¸·Î ±âȸ°¡ ÀÖ´Ù¸é
±âŸ¹æ¹ýÀ» ¾Ë·Á µå¸®°í º¸´Ù ´Ù¾çÇÑ ¹æ¹ýÀÌ ³ª¿Í µ¶Àںе鲲¼ ¼±ÅÃ
À» ÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¶§°¡ ¿À±â¸¦ ¹Ù¶ó¸é¼ ´ÙÀÌ·ºÆ® ¿¢½º¸¦ MFC
¿¡¼ »ç¿ë ÇÏÀÚ ÆíÀ» ¸¶°¨ÇϰڽÀ´Ï´Ù.
¾ÕÀ¸·Î º¸´Ù ºü¸¥ ¹æ¹ýÀ¸·Î ȸ鿡 Âï´Â ¹æ¹ý, 3Â÷¿ø À½ÇâÈ¿°ú ó¸®
¹æ¹ý, ±âŸ Á¦°¡ °¡Áö°í ÀÖ´Â Á¤º¸¸¦ ±â¼úÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
ÀÌ¹Ì ¾Ë°í °è½Ã´Â ºÐµéÀº ¾Æ¹« °Íµµ ¾Æ´ÏÁö¸¸ óÀ½ °øºÎÇϰųª Á¢ÇÏ´Â
ºÐµé¿¡°Ô ¸¶¶¥ÇÑ ÀÚ·á°¡ ¾ø¾î °í»ýÇϽô ºÐµéÀ» »ý°¢ÇÏ¸é ²Ï µµ¿òÀÌ
µÇ´Â ±ÛÀ» Àû¾î º¸¾Ò½À´Ï´Ù.
-
fjudy -