[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ I 08/30 20:26 153 line
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
¿äÁò¿¡ °ÔÀÓÀ» Á¦ÀÛÇϴµ¥ ÀÖ¾î µµ½º¿ë°ú À©µµ¿ìÁî¿ëÀ̶ó´Â ºÐ¾ß·Î
³ª´©¾îÁ® ÀÖ´õ±º¿ä.
¿äÁò ±¹»ê °ÔÀÓÀº ¿ö³« ¶Ù¾î³ °ÍµéÀÌ ¸¹¾Æ¼ °ÔÀÓ ½ÃÀå¿¡ ³ª°¡¼
¾î¶² °ÔÀÓÀ» »ç¾ß ÇÒÁö ¸ð¸£°Ú´õ±º¿ä~
°ÔÀÓÀº ¸¸µå´Â Àç¹Ìµµ ÀÖÁö¸¸ ½ÇÁ¦·Î Á¦À۵Ǿî ÀÖ´Â °ÔÀÓÀ» Áñ±æÁÙ
¾Æ´Â °ÔÀÓ ¸ÞÀÌÄ¿µéÀÌ µÇ¾úÀ¸¸é ÇÕ´Ï´Ù.
»ç½Ç 94³âµµ¿¡ ½è´ø ½ºÅ©¸³ÅÍ¿¡ °üÇÑ ±ÛÀ» °è¼Ó À̾°¡¾ß Çϴµ¥
Á¦°¡ ½Ã°£ÀÌ ¾ø´Ùº¸´Ï(ÇΰèÀΰ¡?) ´ë½Å ´ÙÀÌ·ºÆ®¿¡ °üÇÑ ±Û·Î ´ë½Å
ÇÏ·Á°í ÇÕ´Ï´Ù.
¾ó¸¶Àü¿¡ DirectX 5.0ÀÌ ³ª¿ÔÁÒ? 3D±â´ÉÀÌ ¾öû³ª°Ô ÁÁ¾Æ Á³´õ±º¿ä
±â´ÉÇâ»óÀÌ ÀÌÁ¨ 3Â÷¿ø °ÔÀÓÀ» °ÔÀÓ ¸ÞÀÌÄ¿¶ó¸é ´©±¸³ª ÇÒ¼ö ÀÖ´Â
¼öÁØÀ̴ϱî¿ä~
ÀÏ´Ü ´ÙÀÌ·ºÆ® ¿¢½º¶ó´Â °³¹ßÅøÀ» »ç¿ëÇÏ·Á¸é ºñÁê¾ó 2.0ÀÌ»óÀÌ
ÀÖ¾î¾ß ÇÕ´Ï´Ù. (´ç¿¬ 32ºñÆ® °³¹ßÅøÀ» ¶æÇÏ´Â °ÍÀ̰ÚÁÒ~)
¶Ç´Â º¼·£µåÀÇ ºô´õ¶ó´Â °ÍÀ» ¾²½Ã¸é µË´Ï´Ù.
ÀÏ´Ü ´ÙÀÌ·ºÆ®(ÀÌÇÏ ÆíÀÇ»ó ´ÙÀÌ·ºÆ®¶ó°í¸¸ Ç¥½ÃÇϰÚÀ½)¸¦ ¼³Ä¡ÇÏ
°í ³ª¸é »ùÇÃÀ̶ó´Â µð·ºÅ丮·Î °¡¼ °¬°¡Áö µ¥¸ð¸¦ º¸½Ê½Ã¿ä?
¾Æ´Ï ÀÌ·²¼ö°¡? ¶Ç´Â À̰Թ¹¾ß? ÀÌ°Í ¹Û¿¡ ¾ÈµÇ? ÇÏ´Â µîµîÀÇ ¿©
·¯°¡Áö Ç¥ÇöÀ» ÇϽÇÅÙµ¥...
¿ì¼± Foxbear¶ó´Â ÇÁ·Î±×·¥¿¡´Â 2D¿¡¼ Ç¥ÇöµÇ´Â ¸ðµç ±â¹ýµéÀÌ
µé¾î ÀÖ´Ù°í ÇÒ¼ö ÀÖ´õ±º¿ä~ (¸¹Àº ¿¹Á¦¸¦ Âü°í ÇϽÉÀÌ ÁÁÀ» µí...)
¸ÕÀú Âü°í ¼ÀûÀ» º¸½Ã·Á¸é...
1. ÀÚü ¿Â¶óÀÎ ¸Þ´º¾ó (´ç¿¬ ¿µ¹®ÀÌÁÒ~ ¹ø¿ª °¡´ÉÇÑÀÚ¸¸...^^;)
2. Windows 95 Game °³¹ßÀÚ °¡À̵å - µµ¼ÃâÆÇ ¿¡ÇÁ¿ø
3. À©µµ¿ì 95¿ë Game SDK Àü·« °¡À̵å - Á¤º¸¹®È»ç
4. À©µµ¿ì API ¹ÙÀ̺í I, II - »ý°¢¾È³²
5. À©µµ¿ì ÇÔ¼ö ·¹ÆÛ·±½º »ó,Áß,ÇÏ (2¸¸8õ¿ø Â¥¸® 3±ÇÀΰ¡?
- ¿ª½Ã ±â¾ï¾È³²)
6. Inside Visual C++
7. MFC °ü·Ã Ã¥ÀÚ
8. ±âŸ À©µµ¿ìÁî °ü·Ã Ã¥ÀÚ¹× Âü°í ÇÒ¸¸ÇÑ Ã¥µé
¿ì¿Í~ ¸¹ÁÒ? Àü À§¿¡¼ ¸ðµç Ã¥À» ÀÐ¾î º¸Áø ¸øÇßÁö¸¸...^^;
Âü°í´Â Ç׽à Çϰí ÀÖ½À´Ï´Ù. Ã¥À» ÆÄ´Â »ç¶÷ÀÌ ¾Æ´Ï¹Ç·Î µµ¼°üÀ̳ª
¼Á¡¿¡¼ Àá½Ã º¸½Ã°Å³ª Âü°í Çϱâ À§ÇØ º¹»ç³ª ÂüÁ¶ Çϼ¼¿ä~
±»ÀÌ »ç½Ç ºÐÀº »ç½Ã±¸¿ä~ (ÇÁ·Î±×·¡¸Ó¶ó¸é Ã¥¿¡ ¾²´Â µ·Àº ¾Æ±î¿ö
ÇÏ¸é ¾ÈµÇ°ÚÁÒ~)
º»·ÐÀ¸·Î µé¾î°¡ÁÒ~ ±¦È÷ Ã¥¿¡ °üÇÑ À̾߱⸸ ¸¹ÀÌ ´Ã¾î ³õÀºµí..--;
1. ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ´Â ¸ð½Äµµ
¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
¦¢ À©µµ¿ì »ý¼º, ÃʱâÈ ÇÑ´Ù. ¦¢
¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
¦¢ DirectDrawÀÇ ÀÎÅÍÆäÀ̽º ¦¢
¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
¦¢ Off ScreenÀ¸·Î ºñÆ®¸Ê º¹»ç ¦¢
¦¦¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¥
¦£¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¤ ¦£¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¤
¦¢ ½ºÇÁ¶óÀÌÆ® Blt ¦¢ ¦¢ ¹è°æ Blt ¦¢ <- ÈÄ¸é ¹öÆÛ·Î
¦¦¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¥ ¦¦¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¥ º¸³»´Â °úÁ¤
¦£¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¤
¦¢ ½ÇÁ¦ º¸À̴ ȸéÀ¸·Î Fliping ¦¢
¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
±×¸² 1 : ´ÙÀÌ·ºÆ® ¾×½º Ãâ·Â °úÁ¤ ¸ð½Äµµ
À§¿¡¼ º¸¸é ÀÎÅÍÆäÀ̽º ÇÏ´Â ºÎºÐ¿Ü¿¡´Â µµ½º¿¡¼ °ÔÀÓÀ»
Á¦ÀÛÇÏ´Â °úÁ¤°ú Èí»çÇÏ´Ù°í º¼¼ö ÀÖÁÒ~
»ç½Ç ÀÎÅÍÆäÀ̽º ºÎºÐÀº ÀÚ½ÅÀÇ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â
ºÎºÐÀ̶ó°í »ý°¢Çصµ µÉ°Ì´Ï´Ù.
2. DirectDrawÀÇ µ¥ÀÌÅÍ ½ºÆ®·°ÃÄ
´ÙÀÌ·ºÆ®¸¦ »ç¿ëÇϱâ À§Çؼ± Å«Áö¸·ÇÑ ±¸Á¶Ã¼µéÀ» ¾Ë¾Æ¾ß
ÇÑ´Ù. À̹ø¿¡´Â ±× ±¸Á¶¸¦ ¾Ë±â À§ÇØ ºÐ¼®À» ÇØº¸ÀÚ.
ÀÚ¼¼ÇϰԴ ÇÏÁö ¾Ê°í ´ë° ÀÌ·¸´Ù°í Á¤ÀǸ¸ ÇϰڴÙ.
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
DDCAPS
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
ºñµð¿À Ä«µåÀÇ »óŸ¦ È®ÀÎ¹× Ã¼Å©ÇÑ´Ù.
¿¹) ¸Þ¸ð¸®ÀÇ ¾ç, Çϵå¿þ¾îÀÇ ´É·Â(3D)
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
DDRVAL
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
DirectDraw ÇÔ¼öµéÀÌ ¹ÝȯÇÏ´Â °ªÀ» ¶æÇÑ´Ù.
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
DDSCAPS
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
DDCAPS¿Í °ÅÀÇ ºñ½ÁÇѵ¥ DDCAPS´Â Çϵå¿þ¾îÀÇ ±â´ÉÀ»
üũÇÏ´Â °ÍÀ̶ó¸é À̰ÍÀº ¼ÒÇÁÆ®¿þ¾îÀÇ ±â´ÉÀ» üũÇÑ´Ù.
Áï, DirectDrawSurfaceÀÇ ´É·ÂÀ» üũÇÑ´Ù.
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
DDSURFACEDESC
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
»ý¼ºÇÑ °¢°¢ÀÇ Ç¥¸é(¶Ç´Â ¹öÆÛ)¿¡ ´ëÇÑ Off ScreenÀ»
¶æÇÑ´Ù.
À×? À̰ÍÀÌ ÀüºÎÀΰ¡? ÀÏ´Ü Draw¿¡ °üÇÑ °ÍÀ» ´Ù·çµµ·ÏÇÏ
±â·Î Çϰí À̰ÍÀÌ ¿©±â¼ ¸¶Ä¡°í...
3. DirectDrawÀÇ »ý¼º
±×·³ ½ÇÁ¦·Î DirectDraw¸¦ ¾î¶»°Ô ÀÎÅÍÆäÀ̽º Çϰí ÃʱâÈ
ÇÏ´ÂÁö ¾Ë¾Æ º¾½Ã´Ù.
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
HRESULT DirectDrawCreate(GUID FAR *lpGUID,
LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter)
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
À©µµ¿ìÁî °ü·Ã ÇÔ¼ö¸¦ º¸¸é Create°ü·Ã ÇÔ¼ö¸¦ ¸¹À̺¼¼ö
ÀÖ½À´Ï´Ù. ´ÙÀÌ·ºÆ®µµ ºñ½ÁÇÑ ¹æ½ÄÀ» ¾²´Âµ¥ µ¥ºÎºÐ ÃʱâÈ
¶Ç´Â »ý¼ºµîÀ» ÇÒ¶§ ¾²ÀÌ´Â ÇÔ¼öµéÀÌ Create¶ó´Â ºÎºÐÀÌ
¸í½ÃµÇ¾î ÀÖ½À´Ï´Ù.
±×·³ À§ÀÇ ÇÔ¼öÀÇ ÀÎÀÚµéÀº ¹«¾ùÀ» ¶æÇÒ±î¿ä?
lpGUID´Â µð½ºÇ÷¹ÀÌ µð¹ÙÀ̽º¸¦ ¶æÇÕ´Ï´Ù. À̰ÍÀÌ ¹«½¼ ¶æ
À̳ı¸¿ä? ȸ鿡 ³ªÅ¸³ª±â À§ÇÑ ÀåÄ¡¸¦ ¶æÇÑ´Ù´Â À̾߱âÁÒ
º¸Åë À̰ªÀÌ NULLÀ̸é GDI¿¡ °øÀ¯µÈ µð½ºÇ÷¹À̸¦ ¶æÇÕ´Ï´Ù
lpDD´Â DirectDraw ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ Æ÷ÀÎÅ͸¦ °¡¸®Å°°í,
¸¶Áö¸· ÀÎÀÚ´Â ÇâÈÄ »ç¿ëµÇ±â À§ÇØ ¿¹¾àÇØµÐ °ÍÀ̶ó°í ÇÕ´Ï
´Ù. º¸Åë NULLÀ̶ó°í ÇÏ¸é µË´Ï´Ù.
LPDIRECTDRAW lpDD;
HRESULT ddrval;
ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
if(ddrval != DD_OK)
{
return FALSE;
}
¾ÆÁÖ °£´ÜÇÏÁÒ? OLE COM¿¡¼ ¹ÝȯµÇ´Â ÇüÀº HRESULT¸¦ »ç¿ë
ÇÕ´Ï´Ù. ¿À·ù°¡ ¹ß»ýÇÏ¸é ½Å¼ÓÇÑ Ã³¸®¸¦ À§Çؼ HRESULT¸¦
»ç¿ëÇÕ´Ï´Ù.
À§ÀÇ ¿¹Á¦´Â »ý¼ºÇϰíÀÚ ÇÏ´Â DirectDraw °´Ã¼¸¦ ¼±¾ðÇÏ´Â
°£´ÜÇÑ ¿¹Á¦ ÀÔ´Ï´Ù.
///////////////////////////////////////////
ÀÏ´Ü ¿À´ÃÀº ¿©±â±îÁö ÀÔ´Ï´Ù. °ð (Á¶¸¸°£) µÎ¹øÂ° ±ÛÀ» ¿Ã¸®
µµ·Ï ÇϰڽÀ´Ï´Ù. ¸¹Àº ºÐµé²² Âü°í°¡ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥À¸·Î
Àû¾îº¸¾Ò½À´Ï´Ù.
¼º³²¿¡¼ ¿Ü·Î¿òÀ» ´Þ·¡¸ç....
ÀÌÁذï(LeeChen) µå¸².
#1384 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [2] 09/02 22:37 183 line
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
Áö³¹ø¿¡ ¾îµð±îÁö Çß´õ¶ó....^^;
À̰÷¿¡ °¡²û¾¿ µé·Á º¸Áö¸¸ ¿äÁò °ø¸ðÀü¶§¹®¿¡ ±×·±Áö ¹«Ã´À̳ª
Ȱ±â ÀÖ¾î º¸ÀÔ´Ï´Ù.
¿À´ÃÀº À©µµ¿ìÁî·Î °ÔÀÓÀ» Á¦ÀÛÇØ º¸´Â µÎ¹øÂ° ½Ã°£ Áñ°Ì°Ô Á¦
ÀÛÇØ º¾½Ã´Ù.
º¸Åë µµ½º¿ë °ÔÀÓÀ» Á¦ÀÛÇÒ¶§´Â Çϵå¿þ¾îÀûÀÎ °ÍÀ» °³¹ßÇØ¾ß ÇÏ
°Å³ª (¼Óµµ ¹®Á¦·Î...) »ó¾÷ÀûÀÎ ¶óÀ̺귯¸®¸¦ »ç¼ Á¦ÀÛÇÏ´Â
°æ¿ì°¡ ´Ù¼ö¿´À» °Ì´Ï´Ù.
±×¸®°í, ¸ÖƼ Å×½ºÅ·À» Çϱâ À§ÇÑ ÀÚ±¸Ã¥À» ³»³õ±âµµ ÇÏ¿´ÁÒ~
´ç¿¬ À̰ÍÀ» ¾å»ðÇÑ ÇÁ·Î±×·¥¹æ½ÄÀ̶ó°íµé ÀϺο¡¼´Â Ç¥ÇöÇϸé
¼ »ç¿ëÀ» ÇßÁÒ~
À©µµ¿ìÁî´Â ¾î¶³±î¿ä? »ç½Ç ¸ÖƼÅ×½ºÅ·, ³×Æ®¿öÅ©»óÀÇ Ç÷¹ÀÌ,
»ç¿îµåÀÇ ´Ù¾çÇÑ Á¦¾î, °Å±â´Ù 3Â÷¿ø ¹æ¹ý±îÁö ½±°Ô ½Å°æ¾²Áö
¾Ê°í Ç¥ÇöÇÒ¼ö ÀÖ´Â ½Ã´ëÀÎ°Í °°½À´Ï´Ù.
À×? ÀÚ²Ù »ïõÆ÷·Î ºüÁö´Â ±º¿ä~
1. ÇÁ·Î¼¼¼¸¦ µ¶Á¡Çϱâ
ÀÏ´Ü °ÔÀÓÀ» À§Çؼ´Â ÇÁ·Î¼¼¼¸¦ µ¶Á¡ÇÒ Çʿ伺ÀÌ ÀÖ°Ú´Ù
°í »ý°¢ÇϽÃÁÒ? ´ç¿¬ ´ÙÀÌ·ºÆ®·Î À̰ÍÀ» »ç¿ëÀÚ°¡ ¸¸µé±â
¹Ù¶óÁö ¾Ê°í ÀÚü ¿¡¼ Áö¿øÇÕ´Ï´Ù. ¹Ù·Î
SetCooperativeLevel()À̶ó´Â ´ëÇ¥ÀûÀÎ ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
HRESULT SetCooperativeLevel(LPDIRECTDRAW lpDD, HWND hWnd,
DWORD dwFlags)
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
lpDD´Â ¾Õ¿¡¼ »ý¼ºµÈ DirectDraw °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦
¶æÇÕ´Ï´Ù. µÎ¹øÂ°°ÍÀº ´ç¿¬ À©µµ¿ìÁî Çڵ鷯°ÚÁÒ?
º¸Åë ÀÌÇîµé·¯´Â ÀÛ¾÷Àüȯ(ALT+TAB)¿¡ °üÇÑ ¸Þ¼¼Áö¸¦ º¸³¾
¶§ »ç¿ëµÇ¾î Áý´Ï´Ù.
¸¶Áö¸· dwFlags¿¡ °üÇÑ°Ç ´ÙÀ½ÀÇ ³»¿ëÀ» º¸½Ã¸é ¼³¸íº¸´Ù
½±°Ô ÀÌÇØ°¡...
--------------------------------------------------------------
DDSCL_ALLOWMODEX ModeX¸¦ Áö¿øÇÑ´Ù. DirectDraw´Â ÀúÇØ»óµµÀÎ
320x200, 3200x400ÀÇ X¸ðµå¸¦ Áö¿øÇÕ´Ï´Ù.
DDSCL_ALLOWREBOOT Àüü ȸéÀ» »ç¿ëÇÒ¶§ Ctrl+Alt+DelÀ» °¡´ÉÇÏ
ÇÕ´Ï´Ù.
DDSCL_EXCLUSIVE ÇØ»óµµ¸¦ ¹Ù²Ù°Å³ª Çø®ÇÎ ÀÛ¾÷À» À§Çؼ
exclusive level »óÅ·ΠÇÑ´Ù.
DDSCL_FULLSCREEN GDI¸¦ »ç¿ëÇÏÁö ¾Ê´Â ÀüÃ¼È¸é ¸ðµå¸¦ »ç¿ë
°¡´ÉÇÏ°Ô ÇÑ´Ù.
DDSCL_NORMAL ÀϹÝÀûÀÎ À©µµ¿ìÁî â¿¡¼ ÇÁ·Î±×·¥À» °¡´É
ÇÏ°Ô ÇÕ´Ï´Ù.
DDSCL_NOWINDOWCHANGES Ȱ¼ºÈ »óÅ¿¡ ÀÖ´Â ÇÁ·Î±×·¥À» minimize
ÇÒ¼ö ¾ø°Ô ÇÕ´Ï´Ù.
--------------------------------------------------------------
¿Í¿ì ¹«½¼ ¿É¼ÇÀÌ ÀÌ·¸°Ô ¸¹Àº°¡? º¸Åë ÇÁ·Î±×·¥¿¡¼´Â
À§ÀÇ Äڵ带 Á¶ÇÕÇØ¼ »ç¿ëÇÕ´Ï´Ù. ¿©±â¼ Á¶ÇÕÀ̶õ°ÍÀº
OR, AND¸¦ ÇÑ´Ù´Â ¶æÀÔ´Ï´Ù.
°£´ÜÇÑ ¿¹¸¦ º¸ÁÒ~
ddrval=lpDD->SetCooperativeLevel(hwnd,
DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
¾ÆÁÖ °£´ÜÇØ º¸À̽ÃÁÒ?
2. ºñµð¿À ¸ðµå ¼³Á¤
¾Õ¼ ¹è¿î °ÍÀº ´ÜÁö ÇÁ·Î¼¼¼(CPU)ÀÚ¿øÀÇ µ¶Á¡ÇÏ´Â °ÍÀ»
¹è¿ö º¸¾Ò½À´Ï´Ù.
À̹ø¿¡´Â ºñµð¿À ¸ðµå¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¾½Ã´Ù.
¹°·Ð °ü·ÃÃ¥ÀÚ¸¦ º¸½Ã¸é ÀÚ¼¼È÷ ¾Ë¼ö ÀÖÁö¸¸, ±×·¡µµ...
Ȥ½Ã³ª... Ã¥ÀÌ ¾øÀÌ À̱۷Π¹è¿òÀ» ½ÃÀÛÇÏ´Â ºÐÀ» À§ÇØ
´ÙÀÌ·ºÆ®´Â 320x200, 320x400 640x480ÀÇ ÇØ»óµµ¸¦ Áö¿øÇÕ
´Ï´Ù. 256Ä®¶ó¸¦ ±âº»À¸·Î ÇÏÁö¸¸ Åõ·çÄ®¶ó±îÁö Áö¿øÀÌ
µË´Ï´Ù. º¸Åë 640x480x256¿¡¼ °¡Àå È¿À²ÀûÀÎ ±â´ÉÀ»
Á¦°øÇÑ´Ù°í ¸Þ´º¾ó¿¡ ³ª¿Í ÀÖ´õ±º¿ä!
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
HRESULT SetDisplayMode(LPDIRECTDRAW lpDD,
DWORD dwWidth, DWORD dwHeight,
DWORD dwBpp)
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
¿ª½Ã ù¹øÂ° ÀÎÀÚ´Â DirectDraw¸¦ ¶æÇÏ´Â °ÍÀ̰ÚÁÒ~
dwWidth¿Í dwHeight´Â °¡·Î ¼¼·Î ÇØ»óµµ¸¦ ¶æÇÏ´Â °ÍÀ̱¸¿ä
¸¶Áö¸· dwBpp´Â Ä÷¯¼ö¸¦ ¶æÇÕ´Ï´Ù.
±×·³ ¿¹Á¦¸¦ º¸ÁÒ~
ddrval=lpDD->SetDisplayMode(640, 480, 8);
À§ÀÇ ¿¹Á¦´Â ¹Ù·Î 640*480*256À» ¶æÇÕ´Ï´Ù.
¾ÆÁÖ ½±ÁÒ~ ^^;
ÀÚ~ ¿©±â±îÁö Á¤¸®ÇØ º¸ÁÒ~ ù¹øÂ° µÎ¹øÂ° ±ÛÀ» ÀÐ¾î º¸¼Åµµ
¾ÆÁ÷ ÀÌÇØ°¡ µÇÁö ¾ÊÁÒ~ ´ç¿¬È÷ ¾ÆÁ÷Àº ±×¸® Áß¿äÇÏÁö´Â
¾ÊÀº ³»¿ëÀεíÇÕ´Ï´Ù. (´ç¿¬ÇÑ ³»¿ëÀ̹ǷÎ...^^;)
//¿ì¼± »ç¿ëµÉ ´ÙÀÌ·ºÆ® º¯¼öµéÀ» ¼±¾ðÇØ¾ß °ÚÁÒ~
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE lpDDSPrimary;
LPDIRECTDRAWSURFACE lpDDSBack;
DDSCAPS ddscaps;
DDSURFACEDESC ddsd;
HRESULT hr;
//±×´ÙÀ½¿¡ ´ÙÀÌ·ºÆ® µå·Î¿ì¿¡ °üÇÑ »ý¼ºÀÚ¸¦ »ý¼ºÇßÁÒ~
hr = DirectDrawCreate(NULL, &lpDD, NULL);
if(hr != DD_OK)
{
// ¿¡·¯ °ü·Ã 󸮸¦ ÇØ¾ß °ÚÁÒ?
// º¸Åë ¿¡·¯¶ó°í Ç¥½Ã¸¦ ÇÏ°í ºüÁ® ³ª°©´Ï´Ù.
}
// ÀÚ~ ±×·³ À̹ø¿¡´Â ÇÁ·Î¼¼¼¸¦ µ¶Á¡ÇØ¾ß °ÚÁÒ~
hr = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE |
DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX);
if(hr != DD_OK)
{
// µ¿ÀÏÇÑ ¿¡·¯ 󸮸¦ ÇÏ¸é µÇ°ÚÁÒ~
}
// ¿©±â¼ ÇØ»óµµ¸¦ ¼³Á¤ÇØ¾ß °ÚÁÒ!
hr = lpDD->SetDisplayMode(640, 480, 8);
if( hr != DD_OK)
{
// ´ç¿¬ ¿¡·¯ 󸮰ÚÁÒ~
}
// ¿©±â±îÁö....
///////////////////////////////////////////////////////////////
ÀÏ´Ü ¿À´ÃÀº ¿©±â±îÁö ÀÔ´Ï´Ù. ½±ÁÒ? ¾Æ´Ñ°¡?......(²ôÀû²ôÀû)
¼¼¹øÂ° ±ÛÀ» ½á¾ß °Ú´Âµ¥.....À×? ...´«¿¡....ÇͱⰡ....
´ÙÀ½¿¡´Â ¹öÆÛÀÇ »ý¼º°üÇØ¼ ÀåÆíÀÇ ±ÛÀ» ½áº¸µµ·Ï ÇØº¸°Ú½À´Ï´Ù.
±×¸®°í ÆäÀÌÁö Çø®Çο¡ °üÇØ¼´Ù·ç¾î º¸±¸¿ä~
´ÙÀ½°ú °°ÀÌ ¿¬ÀçÇØ ³ª°¡µµ·Ï ÇϰڽÀ´Ï´Ù.
*1. ´ÙÀÌ·ºÆ® Àü¹Ý¿¡ °üÇØ¼...
*2. ´ÙÀÌ·ºÆ® »ý¼º°ú ÇÁ·Î¼¼¼ µ¶Á¡, ¸ðµå ¼ÂÆÃ
3. ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º Àü¹Ý¿¡ °üÇØ
4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ, ºñÆ®¸Ê º¹»ç
5. ´ÙÀÌ·ºÆ® ÆÈ·¹Æ® °ü¸®
6. Lock°ú Unlock, Blt, BltFast
7. ´ÙÀÌ·ºÆ® »ç¿îµå ó¸®
8. Á¶À̽ºÆ½
9. °£´ÜÇÑ 2D °ÔÀÓÀ» Á¦ÀÛ
ÀÏ´Ü ¿©±â±îÁö°¡ 1Æí.....
2ÆíÀº °¡´ÉÇÒÁö ¸ð¸£Áö¸¸....
10. ´ÙÀÌ·ºÆ® 3DÀü¹Ý¿¡ °üÇØ¼...
11. ¿À¹ö·¹ÀÌ Ç¥¸é°ú Z¹öÆÛ, À̹ÌÁö ȸÀü, ¾ËÆÄ È¥ÇÕ±â´É
12. ´ÙÀÌ·ºÆ®¸¦ ÀÌ¿ëÇØ 3D ÅØ½ºÃÄ ÀÔÈ÷±â
13. ´ÙÀÌ·ºÆ®¸¦ ÀÌ¿ëÇÑ ½Ç½Ã°£ ·£´õ¸µ
14. ´ÙÀÌ·ºÆ® ¿¢½º¿¡ OpenGLÀ» ÀÌ¿ëÇÏÀÚ.
15. 3DS ºÐ¼®°ú ¿ÀºêÁ§ Àоî Ç¥ÇöÇϱâ
15. ÄùÀÌÅ©¸¦ Èä³»³»ÀÚ.
16. ¹ö ¬ªÈÀÌÅ͸¦ ¸¸µéÀÚ.
17. ±âŸ µîµî.
2ÆíÀº ¾ÆÁ÷ Á¦°¡ ¾ÕÀ¸·Î ½Ã°£ÀÌ ¾îÂî µÉÁö? ½Í¾î Àå´ãÀº ÇÒ¼ö
¾ø¾î¼ .... --; ±×·¯³ª 1ÆíÀº È®½ÇÈ÷ ¿¬ÀçÇØ ³ª°¡ °Ú½À´Ï´Ù.
ÇöÀç ÀÛ¾÷À» ÁøÇàÁßÀÌ¶ó¼ ±ÛÀ» »¡¸® ¿Ã¸®Áö ¸øÇÏ´Â °Í¿¡ ´ëÇØ
Á˼ÛÇÏ°Ô »ý°¢ÇÕ´Ï´Ù.
3Â÷¿ø¿¡ µé¾î°¡¸é ³»¿ëÀÌ 1Æí¿¡ ¹è·Î Áõ°¡Çϰڱº¿ä...
À½...ŸÀÌÇΠĥ ½Ã°£ÀÌ ÀÖÀ¸·Á³ª? ^^;
¸¹Àº ºÐµé²² Âü°í°¡ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥À¸·Î Àû¾îº¸¾Ò½À´Ï´Ù.
¼º³²¿¡¼ ¿Ü·Î¿òÀ» ´Þ·¡¸ç....
ÀÌÁذï(LeeChen) µå¸².
#1385 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [3] 09/08 08:14 254 line
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
------------------------------------------------------------
[LeeChen°ú ÇÔ²² - À©µµ¿ìÁîÆí ¸ñÂ÷]
*1. ´ÙÀÌ·ºÆ® Àü¹Ý¿¡ °üÇØ¼...
*2. ´ÙÀÌ·ºÆ® »ý¼º°ú ÇÁ·Î¼¼¼ µ¶Á¡, ¸ðµå ¼ÂÆÃ
*3. ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º Àü¹Ý¿¡ °üÇØ
4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ, ºñÆ®¸Ê º¹»ç
5. ´ÙÀÌ·ºÆ® ÆÈ·¹Æ® °ü¸®
6. Lock°ú Unlock, Blt, BltFast
7. ´ÙÀÌ·ºÆ® »ç¿îµå ó¸®
8. Á¶À̽ºÆ½
9. °£´ÜÇÑ 2D °ÔÀÓÀ» Á¦ÀÛ
------------------------------------------------------------
Áö³¹ø±îÁö ¸ðµå ¼ÂÆÃ¿¡ °üÇÑ°Í ±îÁö ¹è¿ü½À´Ï´Ù. ÀÚ¼¼ÇѱÛÀ»
¿Ã¸®Áö ¸øÇÏ´Â °Í¿¡ ´ëÇØ¼ Áø½ÉÀ¸·Î Á˼ÛÇÏ°Ô »ý°¢ÇÕ´Ï´Ù.
¿ö³« Ãʺ¸´Ùº¸´Ï....^^;
À̹ø¿¡´Â ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º°ú ºñÆ®¸Ê¿¡ °üÇØ¼ ¾Ë¾Æ º¾½Ã´Ù.
±×Àü¿¡ Áö³¹ø¿¡ Çß´ø °Í¿¡ ´ëÇÏ¿© Àá½Ã »ìÆì º¸°í °©½Ã´Ù.
// 1Â÷ Ç¥¸é(Primary Surface)¸¸ »ý¼ºÇϱâ
LPDIRECTDRAWSURFACE lpPrimary;
DDSURFACEDESC ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
lpDD->CreateSurface(&ddsd, &lpPrimary, NULL);
À×? Áö³¹ø°Å¿Í´Â ´Ù¸¥µ¥....--;
´Ù¸¥°Í ¾îº¸ÀÌ¿¹¿ä~ ´ÜÁö ÇÔ¼ö Çϳª°¡ ÀÖÁÒ? ¸Þ¸ð¸®¸¦ Ŭ¸®¾î
ÇØÁÖ´Â ÇÔ¼ö¹Û¿¡...
LPDIRECTDRAWSURFACE´Â IDirectDrawSurfaceÀÇ Æ÷ÀÎÅÍ ÇüÀÔ´Ï´Ù.
ÂÁ~ DDSURFACEDESC´Â »ý¼ºµÉ Ç¥¸éÀÇ Æ¯¼ºÀ» ¾Ë·ÁÁÖ´Â ±¸ÃÊüÀÔ
´Ï´Ù.
À½... ¹¹~´Ù¸¥°ÍÀº ¾îºÌÀÌÁÒ~
Áö³¹ø¿¡ »©¸ÔÀº °ÍÀÌ ÀÖÁÒ~ ¹»±î¿ä? ¹»±î? ¹»±î.....(²ôÀû~²ôÀû~)
Áö²û±îÁö »ý¼º½ÃŲ °ÍÀ» Á¾·á½ÃÄÑ¾ß °ÚÁÒ~
Á¦°ÅÇÏ´Â ¹æ¹ýÀº...
lpPrimary->Release();
lpDD->Release();
¿ä°Å...¹Ù·Î ¿ä°Å¶ø´Ï´Ù. À½...°£´ÜÇÏÁÒ~
¾ðÁ¦Àΰ¡? Áú¹®¶õÀ» ÅëÇØ ÇѱÛÀ̳ª ¹®ÀÚ¸¦ ¾î¶»°Ô Âï³Ä°í ÇϽôõ
±º¿ä~ º¸Åë À©µµ¿ìÁî API¸¦ ¹è¿ìÁö ¾Ê°í ±×³É À©µµ¿ìÁî ÇÁ·Î±×·¥
À» ÇϽðڴٰí ÇÑ´Ù¸é ´ç¿¬ ÀÌ·±ÂÊÀÇ ¹æ¹ýÀ» ¾Ë¼ö°¡ ¾øÀ» °Ì´Ï´Ù.
´ÙÀ½ ¿¹Á¦¸¦ ¸ÕÀú º¸ÁÒ~
<¿¹Á¦ : ´ÙÀÌ·ºÆ®¿¡¼ ±ÛÀÚÂï±â >
HDC hdc;
if(lpDDSPrimary->GetDC(&hdc) == DD_OK)
{
Rectangle(hdc, ....);
SetTextColor(hdc, ....);
SetBkCOlor(hdc, ....);
TextOut(hdc, ....);
lpPrimary->ReleaseDC(hdc);
}
GDI¸¦ »ç¿ëÇÏ´Â °ÍÀ̵¥, À̰ÍÀÌ ¹«¾ðÁö´Â À©µµ¿ì °Á¶õÀ» Âü°í
ÇØ¼ ÀÌÇØ¸¦ ÇϼÌÀ¸¸é ÇÕ´Ï´Ù. ´ÙÀÌ·ºÆ® µå·Î¿ì Ç¥¸éÀº DC¸¦ ¾ò
¾î GDI ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô ÇØÁֹǷΠÇÁ¶ó¸Ó¸®¿¡¼ °£´ÜÈ÷ GDIÇÔ¼ö
¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â °ÍÀÌÁÒ~
À§ ¿¹Á¦ ÇÔ¼ö¿¡ ´ëÇØ¼´Â À©µµ¿ìÁî API¹ÙÀ̺íÀ» ÂüÁ¶ ÇØÁÖ¼¼¿ä~
<¼Ò½º: À§ÀÇ ¿¹Á¦ Àüü ¼Ò½º>
#include <windows.h>
#include <ddraw.h>
BOOL initDirectDraw(HWND hWnd);
void closeDirectDraw();
void Draw();
LPDIRECTDRAW lpDD = NULL;
LPDIRECTDRAWSURFACE lpPrimary = NULL;
.
.
// À©µµ¿ì ÇÁ·Î½ÃÁ®¿Í ¸ÞÀÎ ÇÔ¼ö´Â »ý·« --;
// °øÅëºÎºÐÀ̹ǷÎ...
.
.
BOOL initDirectDraw(HWND hWnd)
{
HRESULT hr;
// »ý¼º°ú ¸ðµå ¼³Á¤
hr = DirectDrawCreate(NULL, &lpDD, NULL);
if(hr != DD_OK) return FALSE;
hr = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE |
DDSCL_FULLSCREEN);
if(hr != DD_OK) return FALSE;
hr = lpDD->SetDisplayMode(640, 480, 8); //640*480*256 Mode
if(hr != DD_OK) return FALSE;
// 1Â÷ Ç¥¸é »ý¼º
DDSURFACEDESC ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
lpDD->CreateSurface(&ddsd, &lpPrimary, NULL);
return TRUE;
}
// DirectDraw Primary ¸¦ ¼Ò¸ê½ÃÅ´.
void closeDirectDraw()
{
if(lpPrimary != NULL)
lpPrimary->Release();
if(lpDD != NULL)
lpDD->Release();
}
void Draw()
{
LPSTR str = "Hello!, ³ª¿¡ À̸§Àº ÁذïÀ̾ß~";
HRESULT hr;
HDC hDC;
hr = lpDDSPrimary->GetDC(&hDC);
if(hr == DD_OK)
{
TextOut(hDC, 300, 200, str, strlen(str));
lpPrimary->ReleaseDC(hDC);
}
}
3. ºñÆ®¸Ê
°ÔÀÓÀ» ¸¸µç´Ù¸é PCX¸¦ ¸¹ÀÌ »ç¿ëÇßÀ» °Ì´Ï´Ù. Á¦ÀÛ°ú »ç¿ëÇϱâ
ÆíÇÏ´Ù´Â ÀÌÀ¯¸¸À¸·Î....À½...
±×·±µ¥ À©µµ¿ìÁî¿¡¼´Â ºñÆ®¸ÊÀÌ Á¸Àç ÇÑ´Ù´Â °ÍÀº ÀÌ¹Ì ÆäÀÌÆ®
ºê·¯½¬¸¦ ÅëÇØ ¾Ë°í °è½ÃÁÒ?
À©µµ¿ìÁî´Â ºñÆ®¸Ê ±âº»À¸·Î »ç¿ëÇϰí ÀÖ½À´Ï´Ù.
±×·³...µµ´ëü ¾î¶² ±¸Á¶¸¦ Çϰí Àֱ⿡ ºñÆ®¸ÊÀ» »ç¿ëÇÒ±î¿ä~
< DIB ±¸Á¶ >
+-------------------+
| BITMAPFILEHEADER |
+-------------------+
| BITMAPINFOHEADER | --+--> BITMAPINFO
+-------------------+ |
| RGBQUAD | --+
+-------------------+
| Image Data |
+-------------------+
À©µµ¿ìÁî´Â ÀÇÁ¸Àû ºñÆ®¸Ê(DDB)°ú ÀåÄ¡ µ¶¸³Àû ºñÆ®¸Ê (DIB)
µÎ°¡Áö¸¦ Á¦°øÇÕ´Ï´Ù. ÀÇÁ¸Àû ºñÆ®¸ÊÀº ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â
ºñÆ®¸ÊÀ» ÀǹÌÇÕ´Ï´Ù.
// BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER {
WORD bfType; // ASCII °ª "BM"
DWORD bfSize; // ÆÄÀÏ »çÀÌÁî
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits; // ÆÄÀÏ Ã³À½ºÎÅÍ bitmap±îÁö ¹ÙÀÌÆ® ¼ö
} BITMAPFILEHEADER;
BITMAPFILEHEADER´Â À§¿Í °°ÀÌ ¼±¾ð µÇ¾î ÀÖ½À´Ï´Ù.
À×? À̰ÍÀÌ ÀüºÎ ÇÊ¿ä ÇѰÍÀº ¾Æ´Ï¿©¿ä~ ¿©±â¼ ÇÊ¿äÇÑ °ÍÀº bfType¿Í
bfSizeÀε¥..bfType´Â ÀÌ ÆÄÀÏÀÌ ºñÆ®¸ÊÀÎÁö¸¦ ³ªÅ¸³À´Ï´Ù. ºñÆ®¸ÊÀº
16Áø¼ö·Î 4d42À̰í WORD·Î "BM"À» ³ªÅ¸³À´Ï´Ù.
±×¸®±¸ bfSize´Â ÆÄÀÏ »çÀÌÁî Àε¥..ºñÆ®¸Ê ÆÄÀÏ¿¡¼
BITMAPINFOHEADERºÎÅÍÀÇ Æ÷ÀÎÅ͸¦ °è»êÇϴµ¥ »ç¿ëÇÕ´Ï´Ù.
BITMAPFILEHEADER bmfh;
dwDibSize = bmfh.bfSize - sizeof(BITMAPFILEHEADER);
// BITMAPINFO
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
º¸´Ù½ÃÇÇ BITMAPINFOHEADER¿Í RGBQUAD·Î ±¸¼º µÇ¾î ÀÖ½À´Ï´Ù.
// BITMAPINFOHEADER
typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize;
LONG biWidth; // X Å©±â
LONG biHeight; // Y Å©±â
WORD biPlanes; // Plane¼ö Àε¥ Ç×»ó 1
WORD biBitCount;
DWORD biCompression; // ¾ÐÃà ÇüÅÂ.
DWORD biSizeImage; // ¹ÙÀÌÆ® ´ÜÀ§·Î ºñÆ®¸ÊÀÇ Å©±â.
LONG biXPelsPerMeter; // ¹ÌÅÍ´ç ¼öÆò Çȼ¿ ¼ö
LONG biYPelsPerMeter; // ¹ÌÅÍ´ç ¼öÁ÷ Çȼ¿ ¼ö
DWORD biClrUsed;
DWORD biClrImportant; // Áß¿äÇÑ Ä÷¯¼ö
} BITMAPINFOHEADER;
biSize´Â BITMAPINFOHEADER±¸Á¶ÀÇ Å©±â
biBitCount´Â Çȼ¿´ç ºñÆ® ¼ö
biClrUsed´Â »ç¿ëµÈ Ä®·¯ ¼ö¸¦ ¶æÇÏ¸ç °ªÀÌ 0ÀÌ¸é ºñÆ®¸ÊÀº
biBitCount¿¡ ´ëÇÏ´Â ÃÖ´ëÀÇ Ä÷¯¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
// RGBQUAD
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
DIBÀÇ Ä®·±´Â ÀÌ ±¸Á¶·Î Ç¥Çö µÇ´Âµ¥.. 16Ä®·¯ ºñÆ®¸ÊÀº
16 RGBQUAD±¸Á¶,256Ä®·¯´Â 256 RGBQUAD±¸Á¶, ¿¹¿ÜÀûÀ¸·Î
24ºñÆ® Ä®·¯´Â Ä®·¯ Å×À̺íÀÌ ¾ø´ä´Ï´Ù.
ÇöÀç DIB°¡ °¡Áö°í ÀÖ´Â Ä®·¯¼ö¸¦ °è»êÇÏ·Á¸é....
BITMAPINFO lpBi;
...
...
if(lpBi->bmiHeader.biClrUsed != 0)
nColor = lpBi->bmiHeader.biClrUsed;
else
switch(lpBi->bmiHeader.biBitCount)
{
case 1: nColor = 2; break;
case 4: nColor = 16; break;
case 8: nColor = 256; break;
case 24: nColor = 0; break;
}
°£´ÜÇÏÁÒ..À½..¿©±â¼ Ä®·¯ ¼ö¸¦ °è»êÇÏ´Â ÀÌÀ¯´Â ³ªÁß¿¡
¼³¸íÇÒ Palette»ý¼º¿¡ ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù.
(Âü°í·Î ÀúÀåµÇ´Â ¹æ½ÄÀº bottom-up¹æ½ÄÀ¸·Î ÀúÀå µË´Ï´Ù.)
// À̹ÌÁö µ¥ÀÌÅ͸¦ ¾ò´Â ¹æ¹ý
lpBi + lpBi->bmiHeader.biSize + (nColor * sizeof(RGBQUAD));
À¸¾Ç~....Ãâ±Ù ½Ã°£ÀÌ....ÆÈ·¹Æ® ºÎºÐÀº »ý·«...´ÙÀ½ ±âȸ¿¡..
Çϵµ·Ï ÇÏÁÒ...¹«·Á Çѽ𣵿¾È...±Ã¸® ³¡¿¡ ²ôÀûÀ̴µ¥...
´ÙÀ½¿¡ °Á¿¡ ÀÖ±âÀü¿¡...´ÙÀÌ·ºÆ® ¿¢½ºÀÇ ¿¹Á¦Áß¿¡
SDK\SAMPLES\MISC\ÀÇ DDUTIL.CPP¸¦ Çѹø¾¿ ºÐ¼®ÇØÁÖ¼¼¿ä~
¸¹Àº ºÐµé²² Âü°í°¡ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥À¸·Î Àû¾îº¸¾Ò½À´Ï´Ù.
¼º³²¿¡¼ ¿Ü·Î¿òÀ» ´Þ·¡¸ç....
ÀÌÁذï(LeeChen) µå¸².
#1386 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [4] 09/09 21:19 470 line
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
------------------------------------------------------------
[LeeChen°ú ÇÔ²² - À©µµ¿ìÁîÆí ¸ñÂ÷]
*1. ´ÙÀÌ·ºÆ® Àü¹Ý¿¡ °üÇØ¼...
*2. ´ÙÀÌ·ºÆ® »ý¼º°ú ÇÁ·Î¼¼¼ µ¶Á¡, ¸ðµå ¼ÂÆÃ
*3. ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º Àü¹Ý¿¡ °üÇØ
*4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ, ºñÆ®¸Ê º¹»ç
5. ´ÙÀÌ·ºÆ® ÆÈ·¹Æ® °ü¸®
6. Lock°ú Unlock, Blt, BltFast
7. ´ÙÀÌ·ºÆ® »ç¿îµå ó¸®
8. Á¶À̽ºÆ½
9. °£´ÜÇÑ 2D °ÔÀÓÀ» Á¦ÀÛ
------------------------------------------------------------
¾î¶»°Ô µµ¿òÀÌ µÇ´ÂÁö ¸ð¸£°Ú±º¿ä~ ÃÖ´ëÇÑ ½±°Ô ¼³¸íÇÏ·Á±¸
Çϴµ¥ ÀߵǴÂÁö´Â Àú¿ª½Ã Àß ¸ð¸£°Ú½À´Ï´Ù. ¿ö³« Ãʺ¸À̰í
°°Àº Ãʺ¸ ÀÔÀå¿¡¼ ¼³¸íÀ» µå¸®´Â °ÍÀÌ´Ï...^^;
Ȥ½Ã³ª °øºÎÇϽôٰ¡ Áú¹®ÀÌ ÀÖÀ¸½Ã¸é ¼½¿¾øÀÌ Áú¹®ÇØ
ÁÖ¼¼¿ä~ Ȥ½Ã Àú¿¡°Ô Á÷Á¢ Áú¹®À» ÇÏ°í ½ÍÀ¸½Ã¸é, °¡Â÷ ¾÷
ÀÌ ¿¬¶ôÀ» ÁÖ¼¼¿ä~ ¿¬¶ôó¶óµç°¡ ¸Þ¼¼Áö¸¦ ³²°Ü Áֽøé
¾ðÁ¦µç....
¹ú½á 4¹øÂ° °Á¸¦ ¾²°Ô µÇ´Â±º¿ä~ °ÅÀÇ ÇÑ´ÞÀÌ µÇ¾î °¡ÁÒ?
(À×? º¸¸§Àΰ¡?)
ÇÏ¿©°£ ¸¹Àº À©µµ¿ìÁî °ÔÀÓ¸ÞÀÌÄ¿¿¡°Ô µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÏ´Â
¸¶À½À¸·Î Àû½À´Ï´Ù.
4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ
4-1. ¸éÀÇ »ý¼º
¿©±â¼ ¸»ÇÏ´Â ¸éÀ̶õ 2Â÷ ¸éÀ» À̾߱â Çϴ°ÍÀÌ´Ù. µµ½º
°ÔÀÓÀ» Á¦ÀÛÇß´ø »ç¶÷À̶ó¸é ÀÌÇØ°¡ ºü¸¦ ÅÙµ¥, °ÔÀÓÀÇ
¿¡´Ï¸ÞÀ̼ÇÀ» ±¸ÇöÇϱâ À§Çؼ´Â º¸ÀÌ´Â ÆäÀÌÁö¿¡ ±×¸²À»
ÂïÀ¸¸é ±ô¹ÚÀÓÀÌ »ý±â´Â °ÍÀ» ¾Ë°ÍÀÔ´Ï´Ù. À̰ÍÀº ¼öÁ÷º¹
±Í ÀÌÀü¿¡ ±×¸²À» Âï°Ô µÇ¸é ±×¸¸ÅÀÇ µô·¹ÀÌ·Î ÀϾ´Â
Çö»óÀ̶ó°í ÇÕ´Ï´Ù. ±×·¡¼ º¸ÀÌÁö ¸¹Àº ¶ÇÇϳªÀÇ ÆäÀÌÁö
¿¡ Âï°í ¼öÁ÷º¹±Í°¡ ³¡³²°ú µ¿½Ã¿¡ ÇÑÀåÀÇ ±×¸²À» ½÷»è~
ÇÏ¸é ±ô¹ÚÀÓÀÌ »ý±âÁö ¾Ê½À´Ï´Ù.
¹Ù·Î ÀÌ¿ø¸®°¡ À©µµ¿ìÁî¶ó°í º°¼ö°¡ ÀÖ°Ú½À´Ï±î? °°Àº ÄÄ
Ç»Åͱâ°è¸¦ »ç¿ëÇϰí ÀÖ°í ´ÜÁö OS¶ó´Â ¿î¿µÃ¼Á¦¸¸ÀÌ ¹Ù²î
¾ú´Ù´Â °Í ¹Û¿¡´Â Â÷À̰¡ ¾ø½À´Ï´Ù.
´ÙÇàÀ̵µ ´ÙÀÌ·ºÆ®´Â 2¹øÂ° ¸é(2Â÷ Ç¥¸é)À» ¸¸µé¾î Çø®ÇÎ
À» ÇÒ¼ö ÀÖ°Ô ¹è·Á¸¦ ÇØ³õ¾Ò½À´Ù.
º¸Åë º¸ÀÌ´Â ¸é(1Â÷ Ç¥¸é)°ú º¸ÀÌÁö ¾Ê´Â ¸é(2Â÷ Ç¥¸é)À»
»ý¼ºÀ» ÇØµÎ¾î¾ß »ç¿ëÇÒ¼ö°¡ Àִµ¥ Áö³¹ø±îÁö´Â 1Â÷¸é
¸¸À» »ý¼ºÇÏ°í »ç¿ëÇß¾ú½À´Ï´Ù.
À̹øºÎÅÍ´Â ¾î° ¼Ò½º°¡ ±æ¾î ÁúµíÇÕ´Ï´Ù. ±×·³ ¼Ò½º¸¦
°£´ÜÈ÷ ºÐ¼®À» ÇÏ´Â Â÷¿ø¿¡¼ º¼±î¿ä?
LPDIRECTDRAWSURFACE lpPrimary;
LPDIRECTDRAWSURFACE lpBack;
DDSURFACEDESC ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.dwBackBufferCount = 1;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP | DDSCAPS_COMPLEX;
hr = lpDD->CreateSurface(&ddsd, &lpPrimary, NULL);
if(hr != DD_OK) return;
DDSCAPS ddscaps;
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hr = lpFrontBuffer->GetAttachedSurface(&ddscaps, &lpBack);
if(hr != DD_OK) return;
Áö³¹ø°ú ´Ù¸¥ °ÍÀÌ ¹«¾ùÀÌ ÀÖÀ»±î¿ä? À½...(²ôÀû~²ôÀû~)
DDSCAPS ddscaps;
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hr = lpFrontBuffer->GetAttachedSurface(&ddscaps, &lpBack);
if(hr != DD_OK) return;
ÀÌ ºÎºÐÀÌ Ãß°¡ µÇ¾úÁö¿ä~ ¿©±â¼ ƯÀÌÇÑ °ÍÀº ddscaps.dwCaps =
DDSCAPS_BACKBUFFER; ÀÔ´Ï´Ù. ¿É¼ÇÀº ±×³É º¸±â¸¸ ÇØµµ ÀÌÇØ°¡ µÇ
½ÃÁÒ?
DDSURFACEDESC±¸Á¶Ã¼ ¸â¹ö¿¡¼ dwFlagsÀÇ DDSD_BACKBUFFERCOUNT´Â
BackBuffer¸¦ ¸¸µé°Ú´Ù´Â °ÍÀ» ³ªÅ¸³»°í dwBackBufferCount´Â
BackBuffer¸¦ ¸î °³ ¸¸µé°ÍÀΰ¡¸¦ Á¦½ÃÇÏ°Ô µË´Ï´Ù.
ÀÏ´Ü Áö±ÝÀº Çϳª¸¸ ¸¸µé¾ú½À´Ï´Ù. ddsCapsÀÇ dwCaps¸â¹ö¿¡
DDSCAPS_FLIP °ú DDSCAPS_COMPLEX´Â Çø³Çΰú º¹ÇÕÇ¥¸éÀ» ÀÌ¿ëÇϰÚ
´Ù´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
4-2. ¸éÀÇ Çø®ÇÎ
º¹ÇÕÇ¥¸éÀ̶õ lpBack À̿ܿ¡ Çϳª ÀÌ»óÀΠǥ¸éÀ» ¸»ÇÕ´Ï´Ù. ÀÌ·¸°Ô
Çϸé Ç¥¸éÀÇ »ý¼ºÀÌ ³¡³³´Ù. BackBuffer Ç¥¸éÀÇ ¾îµå·¹½º¸¦ ¾ò±â
À§Çؼ DDSCAPS±¸Á¶Ã¼¸¦ ¼±¾ðÇϰí IDirectDrawSurfaceÀÇ ¸â¹öÀÎ
GetAttachedSurface¸¦ È£ÃâÇÕ´Ï´Ù. GetAttachedSurface´Â
DDSCAPS¿¡¼ ¿ä±¸Çϴ Ư¼ºÀÇ Ç¥¸éÀ» ¾òÀ» ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
¿©±â±îÁö°¡ º¹ÇÕ Ç¥¸é Áï, 2Â÷ Ç¥¸é »ý¼ºÀÇ ³»¿ëÀÌ ³¡³³´Ï´Ù.
±×·³ ¿©±â¼ ³¡³ª´À³Ä? ¾Æ´ÏÁÒ~ ´ç¿¬ 2Â÷ ¸éÀ» ¸¸µé¾úÀ¸´Ï
¿¡´Ï¸ÞÀ̼ÇÀÌ °¡´ÉÇÑ Çø®ÇÎÀ» ÇØºÁ¾ß °ÚÁÒ~
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
HRESULT Flip(LPDIRECTDRAWSURFACE lpDDSurface,
LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,
DDWORD dwFlags)
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
¼³¸í: Çø®ÇÎ ¹æ½ÄÀ» »ç¿ëÇÏ¿© ¾Ö´Ï¸ÞÀ̼ÇÇÒ °æ¿ì ºñµð¿À·¥
½ºÄµ ½ÃÀÛ ¾îµå·¹½º¸¦ ¾ò¾î ¿À´Â µµÁß¿¡ ??³çÀ» ÀüȯÇÏ
¸é ȸéÀÌ ¶³¸®°Ô µÇ¹Ç·Î Flip()ÇÔ¼ö´Â ¸ð´ÏÅÍÀÇ ÁÖ»ç
¼±ÀÌ ¼öÁ÷ Àç ÁÖ»ç ½Ã¿¡ ȸéÀ» °»½ÅÇÕ´Ï´Ù.
ù ¹øÂ° ÀÎÀÚÀÎ lpDDSurface´Â Çø³µÉ Ç¥¸éÀÇ ¾îµå·¹½º¸¦
¿ä±¸Çϴµ¥ NULL·Î ¼³Á¤ÇÏ¸é ¼ø¼´ë·Î Çø³µË´Ï´Ù.
µÎ ¹øÂ°´Â Ç÷¡±×Àε¥ DDFLIP_WAITÀ¸·Î ¼¼Æ®ÇØÁÖ¸é Çø³ÀÌ
ÀϾ ¶§ ±îÁö ±â´Ù¸³´Ï´Ù. ¼¼Æ®ÇØÁÖÁö ¾ÊÀ¸¸é ¹Ù·Î
DERR_WASSTILLDRAWING ¿¡·¯¸¦ ¸®ÅÏÇÕ´Ï´Ù.
¹Ù·Î À̰ÍÀ» ÀÌ¿ëÇÏ¸é µÇ´Â °ÍÀÌÁÒ~ °£´Ü °£´Ü ÇϰԸ¸ º¸À̽ÃÁÒ
±×·³ ¿ä°ÍÀº ¾î¶»°Ô ¾µ±î?
hr = lpPrimary->Flip(NULL, DDFLIP_WAIT);
\\ ¿ÀÇÁ½ºÅ©¸° Ç¥¸é »ý¼ºÇϱâ
LPDIRECTDRAWSURFACE lpDDBackOff;
DDSURFACEDESC ddsd;
HRESULT hr;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwHeight = height;
ddsd.dwWidth = width;
hr = lpDD->CreateSurface(&ddsd, &lpDDBackOff, NULL);
³ôÀÌ(height),Æø(width)¿¡ ÇØ´çÇÑ Å©±âÀÇ ¿ÀÇÁ ½ºÅ©¸°À» »ý¼º
ÇÏ´Â °ÍÀε¥ Áö±Ý±îÁö ÇØ¿Ô´ø°Í°ú º°Â÷À̰¡ ¾øÀ» °Ì´Ï´Ù.
±âÁ¸ÀÇ GDI¿¡¼ º»´Ù¸é ÇϳªÀÇ ¸Þ¸ð¸®DC¸¦ ¸¸µå´Â°Í°ú ºñ½ÁÇÕ
´Ï´Ù.
IDirectDrawSurface´Â Ç¥¸éÀÇ ÀϹÝÀûÀÎ ºñÆ®¸ÊÀ» ¾²±â À§Çؼ
Blt¸â¹ö ÇÔ¼ö¸¦ Á¦°øÇÕ´Ï´Ù. À̰Ϳ¡ ´ëÇØ¼´Â Áö³ 3¹øÂ°
°Á¿¡¼ ºñÆ®¸Ê¿¡ °üÇØ ´Ù·ç¾úÀ¸¹Ç·Î 3¹øÂ° °Á¸¦ ÂüÁ¶ÇØ
ÁÖ¼¼¿ä~
DDBLTFX ddBltfx;
HRESULT hr;
ddbltfx.dwSize = sizeof(ddBltfx);
ddbltfx.dwFillColor = color;
hr = lpSurface->Blt(lpBackOffRect,
NULL,
NULL,
DDBLT_COLORFILL | DDBLT_WAIT,
&ddbltfx);
ÀÌ ÄÚµå´Â ȸ鿡 colorÀÇ Ä®·¯·Î lpSurfaceÀÇ lpBackOffRect¿¡
¸í½ÃµÈ ¿µ¿ª¿¡ ä¿ì´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.
BltÀÇ ÆÄ¶ó¹ÌÅͺÎÅÍ »ìÆìº¸ÀÚ. ù ¹øÂ°´Â º¹»çµÉ lpSurfaceÀÇ
¿µ¿ª(RECT±¸Á¶Ã¼ÀÇ ¾îµå·¹½º)À» ³ªÅ¸³À´Ï´Ù. µÎ ¹øÂ°´Â ¼Ò½ºÀÇ
Ç¥¸éÀÇ ¾îµå·¹½ºÀÌ°í ±× ´ÙÀ½Àº ¼Ò½ºÀÇ º¹»ç ¿µ¿ª, ´ÙÀ½Àº BltÀÇ
Ç÷¡±× ¸¶Áö¸·À¸·Î ±¸Á¶Ã¼´Â BltÀÇ ÇàÀ§¸¦ Á¤ÇØÁÖ´Â DDBLTFX±¸Á¶
üÀÇ ¾îµå·¹½ºÀÔ´Ï´Ù.
¿©±â¼ DDBLT_COLORFILL Àº ȸéÀ» DDBLTFX ±¸Á¶Ã¼¿¡ ¸í½ÃµÈ »ö
À¸·Î Ä¥ÇØÁÖ¶ó´Â À̾߱â~
´ç¿¬È÷ lpSurfaceÀÇ Ã¤¿öÁú ¿µ¿ª lprect¸¸ ÇÊ¿ä·Î ÇÏ°Ô µË´Ï´Ù.
Blt°¡ ´Ù¸¥ ÀÌÀ¯·Î ÇØ¼ ¹Ù·Î ½ÇÇàµÇÁö ¾Ê¾ÒÀ» ¶§ ȤÀº ½ÇÆÐÇßÀ»
¶§ DDERR_WASSTILLDRAWING¿¡·¯°¡ ¹ß»ýÇÏ´Â µ¥ DDBLT_WAITÀº ÀÌ
¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ ´Ù½Ã ½ÃµµÇÕ´Ï´Ù.
±×·³ ¿¡·¯ Äڵ忡 ´ëÇÑ Ã³¸®¸¦ ¾î¶»°Ô ÇÒ±î¿ä~
while(1)
{
hr = lpBackOff->Blt(.....);
if(hr != DDERR_WASSTILLDRAWING)
break;
}
¿Í¿ì~ ½±ÁÒ~
±×·³ ´ÙÀ½Àº lpBackOff¿¡ ´Ù¸¥ lpBackOffSrc¸¦ º¹»çÇÏ´Â °ÍÀ»
¾Ë¾Æ º¸ÁÒ~
lpBackOff->Blt(lpBackRect, // NULLÀ̸é Àüü ¿µ¿ª.
lpBackOffSrc, // ¼Ò½º Ç¥¸é.
lpBackSrcRect, // NULLÀ̸é Àüü ¿µ¿ª.
DDBLT_WAIT,
NULL);
lpBackOffSrcÀÇ lpBackSrcRect¿¡ ÁöÁ¤µÈ ¿µ¿ª¿¡ ¼Ò½ºÀÇ
lpBackRect¿¡ ¸í½ÃµÈ ¿µ¿ªÀ» º¹»çÇÕ´Ï´Ù.
BltFast ¿ª½Ã ºñ½ÁÇÕ´Ï´Ù. ¿©±â¼´Â ÇÔ¼öÀÇ ¼³¸íÀ¸·Î
³Ñ¾î °¡°Ú½À´Ï´Ù. (»ç½Ç ¿¹Á¦¸¦ ÅëÇØ¼ ¾Ë°Ô µÉÅ×´Ï...)
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
HRESULT BltFast(LPDIRECTDRAWSURFACE lpDDSurface,
DWORD dwX, DWORD dwY,
LPDIRECTDRAWSUFACE lpDDSrcSurface,
LPRECT lpSrcRect, DWORD dwTrans )
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
lpDDSurface : BltFast ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ºñÆ®¸ÊÀÇ bitµéÀ»
º¹»çÇÒ ¸ñÀûÁö
dwX, dwY : ¸ñÀûÁö ÁÂÇ¥
lpDDScrSurface : º¹»çÇÒ ºñÆ®¸Ê
lpSrcRect : º¹»çÇÒ ºñÆ®¸ÊÀÇ ¿µ¿ª
dwTrans : º¹»çÇÒ ºñÆ®¸ÊÀÇ Æ¯¼ºÀ» ¼³¸íÇÏ´Â ¸Å°³ º¯¼öµé
ÀÌÇÔ¼ö´Â BltÇÔ¼ö¿¡ ºñÇØ 10%Á¤µµÀÇ ºü¸¥ È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ½À
´Ï´Ù¸¸ Ŭ¸®ÇÎÀ» »ç¿ëÇҽà ¼Óµµ¿¡´Â È¿°ú°¡ ¾ø½À´Ï´Ù.
4-3. ÆÈ·¹Æ® ó¸®
´ÙÀÌ·ºÆ®¿¡¼µµ ÀÏ¹Ý µµ½º °ÔÀÓÁ¦ÀÛ¿¡¼¿Í °°ÀÌ Ä®·¯Å°¸¦ ÁöÁ¤ÇÒ
¼ö ÀÖ½À´Ï´Ù. Áï, Åõ¸í»öÀ» ÁöÁ¤ÇÏ¿© ³ªÅ¸³ªÁö ¾Ê°Ô ÇÏ´Â È¿°ú¸¦
´ÙÀÌ·ºÆ®µµ ÇÒ¼ö ÀÖ½À´Ï´Ù. (´ç¿¬ ±×·¡¾ß °ÔÀÓÀÌ µÇ°ÙÁÒ~ ^^;)
DDCOLORKEY ddck;
ddck.dwColorSpaceLowValue = 255;// ¶Ç´Â 16Áø¼ö·Î 0xff
ddck.dwColorSpaceHighValue = 255; // »óµ¿
lpSurface->SetColorKey(DDCKEY_SRCBLT, &ddck);
º¸Åë À©µµ¿ìÁî¿¡¼´Â 256Ä®¶óÁß¿¡¼ ¾Õ¿¡ 10»ö°ú µÚ¿¡ 5»öÀ»
»ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ¹°·Ð À©µµ¿ìÁî ¸ðµåÀϰæ¿ì¿¡´Â À̰ÍÀ» °¨¾È
ÇØ¼ °ÔÀÓÀ» Á¦ÀÛÇØ¾ß °ÚÁÒ~ Ç㳪 µ¶Á¡ Ç®½ºÅ©¸° ¸ðµå¿ë °ÔÀÓ¿¡¼
´Â º¸Åë 255¹øÂ°ÀÇ Èò»ö(255, 255, 255)¸¦ Åõ¸í Ä÷¯·Î »ç¿ëÇÕ´Ï´Ù.
¹°·Ð À̰ÍÀº »ç¿ëÇÏ´Â »ç¶÷¸¶´Ù ´Þ¸® »öÀ» Á¤ÇØ ÁÙ¼ö ÀÖ½À´Ï´Ù.
±×·¯³ª ±âÁ¸ÀÇ À©µµ¿ìÁîÀÇ bltÇÔ¼ö°¡255¹ø Èò»öÀ» Åõ¸íÄ÷¯·Î
»ç¿ëÇϱ⿡...
±×·³ ÀÌÁ¨ ½ºÇÁ¶óÀÌÆ® ÇÔ¼ö¸¦ ¸¸µé¼ö ÀÖ°ÚÁÒ?
¸¶Áö¸·À¸·Î ¼Ò½º¸¦ ¿Õ⠻Ѹ®¸é¼ 4¹øÂ° °Á¸¦ ÁÙÀϱî ÇÕ´Ï´Ù.
±×·³ ¼Ò½º¸¦ ºÐ¼®ÇØ º¸¼¼¿ä~ Âü Àç¹Ì ÀÖÀ» °Å¿¹¿ä~ ^^;
À̼ҽº´Â ±èÁ¤(ozzy96)¾¾²²¼ ÀÛ¼ºÇϽаÍÀε¥ ±×³É À̰÷¿¡
¿Ã·Á º¾´Ï´Ù. (È÷È÷~ Àú¿¡ ¹«ÁöÇÔ¶«½Ã...^^;)
//==============================================================
#include <windows.h>
#include <ddraw.h>
#define BALLSIZE 40
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
BOOL InitDDraw(HWND hwnd); // IDirectDraw»ý¼º°ú Ç¥¸é »ý¼º
void DestroyDDraw();
BOOL FillBuffer(LPDIRECTDRAWSURFACE lpSurface, LPRECT lprect, DWORD color);
// ÁöÁ¤µÈ ¿µ¿ªÀ» color·Î ä¿öÁØ´Ù.
void Test(HWND hwnd);
void CreateBall(); // lpOffscreen¿¡ ºÓÀº ¿øÀ» ±×·ÁÁØ´Ù.
char szWinName[]="Test";
LPDIRECTDRAW lpDD = NULL;
LPDIRECTDRAWSURFACE lpFrontBuffer = NULL;
LPDIRECTDRAWSURFACE lpBackBuffer = NULL;
LPDIRECTDRAWSURFACE lpOffscreen = NULL;
POINT CirclePoint; // ¿øÀÇ ÁÂÇ¥
int cx, cy; // º¼ ÁÂÇ¥ÀÇ Áõ°¡Ä¡
int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,
LPSTR lpszArgs,int nWinMode)
{
HWND hwnd;
MSG msg;
WNDCLASS WndClass;
WndClass.hInstance=hThisInst;
WndClass.lpszClassName=szWinName;
WndClass.lpfnWndProc=WindowFunc;
WndClass.style=0;
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.lpszMenuName=NULL;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
if(!RegisterClass(&WndClass)) return 0;
hwnd=CreateWindow(
szWinName,
"Direct Draw Demo",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
HWND_DESKTOP,
NULL,
hThisInst,
NULL);
ShowWindow(hwnd,nWinMode);
UpdateWindow(hwnd);
// ´ÙÀÌ·ºÆ® ÃʱâÈ
if(!InitDDraw(hwnd)) return 0;
Test(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
RECT rcDes;
switch(message)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostMessage(hwnd, WM_CLOSE, 0, 0);
return 0;
}
break;
case WM_TIMER:
cx = (CirclePoint.x >= 0 &&
CirclePoint.x <= 680 - BALLSIZE)?
cx : ~cx;
cy = (CirclePoint.y >= 0 &&
CirclePoint.y <= 440 - BALLSIZE)?
cy : ~cy;
CirclePoint.x += cx;
CirclePoint.y += cy;
SetRect(&rcDes, CirclePoint.x, CirclePoint.y,
CirclePoint.x + BALLSIZE, ptCurBall.y + BALLSIZE);
// BackBuffer¸¦ °ËÁ¤»ö(0¹ø Ä®·¯)À¸·Î Áö¿î´Ù.
FillBuffer(lpBackBuffer, NULL, 0);
// Source Color Key¸¦ »ç¿ëÇÒ °ÍÀ» ÁöÁ¤.
lpBackBuffer->Blt(&rcDes, lpOffscreen, NULL,
DDBLT_WAIT | DDBLT_KEYSRC, NULL);
lpFrontBuffer->Flip(NULL, DDFLIP_WAIT);
break;
case WM_DESTROY:
KillTimer(hwnd, 1);
DestroyDDraw();
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
BOOL InitDDraw(HWND hwnd)
{
HRESULT hr;
// IDirectDraw»ý¼º°ú¸ðµå ¼³Á¤
hr = DirectDrawCreate(NULL, &lpDD, NULL);
if(hr != DD_OK) return FALSE;
hr = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE |
DDSCL_FULLSCREEN);
if(hr != DD_OK) return FALSE;
hr = lpDD->SetDisplayMode(640, 480, 8);
if(hr != DD_OK) return FALSE;
// FrontBuffer¿Í BackBuffer¸¦ »ý¼º
DDSURFACEDESC ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.dwBackBufferCount = 1;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP | DDSCAPS_COMPLEX;
hr = lpDD->CreateSurface(&ddsd, &lpFrontBuffer, NULL);
if(hr != DD_OK) return FALSE;
// Back bufferÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ½
DDSCAPS ddscaps;
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hr = lpFrontBuffer->GetAttachedSurface(&ddscaps, &lpBackBuffer);
if(hr != DD_OK) return FALSE;
// ¿ÀÇÁ½ºÅ©¸° »ý¼º
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwHeight = BALLSIZE;
ddsd.dwWidth = BALLSIZE;
hr = lpDD->CreateSurface(&ddsd, &lpOffscreen, NULL);
if(hr != DD_OK) return FALSE;
return TRUE;
}
// ¿ÀÇÁ½ºÅ©¸°¿¡ ºÓÀº »ö °øÀ» ±×¸®°í Ä®·¯Å°¸¦ ÁöÁ¤
voidCreateBall()
{
FillBuffer(lpOffscreen, NULL, 0xff);
HBRUSH hbrush, hold;
HDC hdc;
HRESULT hr;
if(hr = lpOffscreen->GetDC(&hdc) == DD_OK)
{
hbrush = CreateSolidBrush(RGB(255, 0, 0));
hold = SelectObject(hdc, hbrush);
Ellipse(hdc, 0, 0, BALLSIZE, BALLSIZE);
SelectObject(hdc, hold);
lpOffscreen->ReleaseDC(hdc);
}
// Set Color key
DDCOLORKEY ddck;
ddck.dwColorSpaceLowValue = 0xff;
ddck.dwColorSpaceHighValue = 0xff;
lpOffscreen->SetColorKey(DDCKEY_SRCBLT, &ddck);
}
void Test(HWND hwnd)
{
SetTimer(hwnd, 1, 10, NULL);
ptCurBall.x = 300;
ptCurBall.y = 200;
xcin = cy = 2;
CreateBall();
}
BOOL FillBuffer(LPDIRECTDRAWSURFACE lpSurface, LPRECT lprect,
DWORD color)
{
DDBLTFX ddbltfx;
HRESULT hr;
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = color;
hr = lpSurface->Blt(lprect, NULL, NULL,
DDBLT_COLORFILL | DDBLT_WAIT,
&ddbltfx);
return hr == DD_OK;
}
void DestroyDDraw()
{
if(lpBackBuffer != NULL) lpBackBuffer->Release();
if(lpFrontBuffer != NULL) lpFrontBuffer->Release();
if(lpOffscreen != NULL) lpOffscreen->Release();
if(lpDD != NULL) lpDD->Release();
}
//==========================================================
»ç½Ç ½ÇÁ¦ °ÔÀÓ¿¡ ¾µ¼ö ÀÖ´Â ¼Ò½ºÀÔ´Ï´Ù. ±×·¯³ª À̹ÌÁö¸¦
°¡Áö°í ÇÏÁö¸¸ ¾Ê¾ÒÀ»»Ó ´Ù¸¥ ºÎºÐÀÌ ¾ø½À´Ï´Ù.
¿øÀ» ±×¸®°í ÇÑ´Ù°í ÀÌ°É ¾îµð½á~ ÇÏ°í »ý°¢ÇϽÉÀº ¾ÈµË´Ï
´Ù. À½..¼Ò½º¸¦ Á¦°¡ Á÷Á¢ Á¦ÀÛÇÏÁö ¸øÇؼ Á˼ÛÇÏ°Ô »ý°¢
ÇÕ´Ï´Ù. ¾ÕÀ¸·Î ´õ¿í ÁÁÀº ³»¿ëÀ¸·Î Àû¾î º¸°Ú½À´Ï´Ù.
¸¹Àº ºÐµé²² Âü°í°¡ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥À¸·Î Àû¾îº¸¾Ò½À´Ï´Ù.
¼º³²¿¡¼ ¿Ü·Î¿òÀ» ´Þ·¡¸ç....
ÀÌÁذï(LeeChen) µå¸².
#1389 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [5] 10/07 00:22 254 line
////////////////////////////////////////////////////////////
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
°Á°¡ ¹«Ã´À̳ª ´Ê¾î Á³ÁÒ? ÀÌ ±ÛÀ» Àоî Áֽô ¸¹Àº µ¶Àںеé
°ú Àú¿¡°Ô ¾Æ³¦ ¾ø´Â ¼º¿øÀ» º¸³» ÁֽŠºÐµé²² Áø½ÉÀ¸·Î °¨»çµå
¸³´Ï´Ù.
±×µ¿¾È º¸³»ÁֽŠÁúÃ¥°ú °Ý·Á¸¦ ÇØÁֽŠ´öºÐ¿¡ ÈûÀ» ¾ò¾î °è¼ÓÀû
ÀÎ °Á¸¦ ÇØ ³ª°¡±â·Î Çß½À´Ï´Ù. (´ç¿¬ÇÑ ¼Ò¸®¸¦....^^;)
------------------------------------------------------------
[LeeChen°ú ÇÔ²² - À©µµ¿ìÁîÆí ¸ñÂ÷]
*1. ´ÙÀÌ·ºÆ® Àü¹Ý¿¡ °üÇØ¼...
*2. ´ÙÀÌ·ºÆ® »ý¼º°ú ÇÁ·Î¼¼¼ µ¶Á¡, ¸ðµå ¼ÂÆÃ
*3. ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º Àü¹Ý¿¡ °üÇØ
*4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ, ºñÆ®¸Ê º¹»ç
*5. ´ÙÀÌ·ºÆ® ÆÈ·¹Æ® °ü¸®
6. Lock°ú Unlock, Blt, BltFast
7. ´ÙÀÌ·ºÆ® »ç¿îµå ó¸®
8. Á¶À̽ºÆ½
9. °£´ÜÇÑ 2D °ÔÀÓÀ» Á¦ÀÛ
------------------------------------------------------------
5. ´ÙÀÌ·ºÆ® ÆÄ·¹Æ® °ü¸®
´ÙÀÌ·ºÆ®¸¦ ½áº¸½Å ºÐµéÀº 8ºñÆ®(256 color) ÀÌ»óÀ» Áö¿øÇÑ´Ù´Â
°ÍÀ» ¾Ë°í ÀÖÀ» °Ì´Ï´Ù. ¶ÇÇÑ »óÀ§ Ä÷¯ º¸´Ùµµ 8ºñÆ®±â´ÉÀÌ ¹«
ôÀ̳ª °ÇÏ´Ù°í ÇÒ¼ö ÀÖ´õ±º¿ä~
´ç¿¬ ¸¹Àº °ÔÀÓµéÀÌ 8ºñÆ®¸¦ Áö¿ø ÇÏ°í ¾ÆÁ÷±îÁö´Â 8ºñÆ®¿¡¼
°ÔÀÓÀ» Á¦ÀÛÇØµµ ¹«³Çϱ⠶§¹®ÀÌÁÒ~
À©µµ¿ìÁî °Ô½Ã¶õÀ» º¸´Ï Çѵ¿¾È 16ºñÆ® Ä®¶ó¿¡ ´ëÇØ ³íÀÇ Çϰí
ÀÖÀ¸½Ã´õ±º¿ä~ (À¸...--; )
´ÙÀÌ·ºÆ®¿¡¼ ÆÄ·¹Æ®¸¦ ó¸®ÇÏ´Â °úÁ¤À» »ìÆì º¸¸é ´ÙÀ½°ú °°
Àº µµ½ÄÇ¥°¡ Á¦ÀÛÀÌ µÇ¾î Áý´Ï´Ù.
+---------------------------------------------------------+
| ÆÈ·¡Æ® »ý¼º (DDLoadPalette) |
+---------------------------------------------------------+
|
+---------------------------------------------------------+
| »ý¼ºµÈ ÆÈ·¹Æ®¸¦ Àü¸é ¹öÆÛ¿¡ ¼ÂÆÃ(SetPalette) |
+---------------------------------------------------------+
|
+---------------------------------------------------------+
| À̰÷¿¡¼´Â À̹ÌÁö°¡ ÂïÈ÷´Â 󸮰¡ µÇ°ÚÁÒ~ |
| ´ç¿¬ ½ºÇÁ¶óÀÌÆ®°¡ ÀÖ´Â À̹ÌÁö¸¦ ¶æÇÏ´Â °ÍÀÌÁÒ~ |
+---------------------------------------------------------+
|
+---------------------------------------------------------+
| Åõ¸í»öÀ» ¼³Á¤ÇØ¾ß °ÚÁÒ~ (DDSetColorKey) |
+---------------------------------------------------------+
< ÆÈ·¹Æ® ¼ÂÆÃ ¸ð½Äµµ >
¾î¶§¿ä? ¸ð½Äµµ¸¸ º¸°íµµ °¨ÀÌ ¿À½Ã´Â ºÐµµ °è½ÃÁÒ? (À½...)
±×·¸´Ù¸é À̰Á¸¦ ÀÐ¾î º¸½ÇÇÊ¿ä ¾ø°Ú±º¿ä~ (ÇÏÇÏÇÏ~ ^^;)
´ÙÀÌ·ºÆ®ÀÇ ÆÈ·¹Æ® °´Ã¼´Â ¿©·¯°³¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
¹«¾ùÀ» »ç¿ëÇÏ¸é µÉ±î¿ä? Áö±Ý±îÁö »ç¿ëÇÒ¶§ »ý¼ºÇÒ¶§´Â ¾î¶²
½ºÅ¸ÀÏÀÇ ÇÔ¼ö¸¦ »ç¿ëÇßÁÒ?
¿ä°Å CreatePalette¶ó±¸¿ä~ ´ç±ÙÀÌÁÒ~´ëÃæ °¨À¸·Î ¸¶Ã߽ôÂ
ºÐµµ °è½Ã±º¿ä~ ±×·¸´Ù¸é CreatePalette·Î »ý¼ºµÈ ÆÈ·¹Æ®´Â
¾î¶² ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ ¼±ÅõǾî Áú±î¿ä?
¾ÆÇÏ~ ±Ù¹æ ¸¶Ã߽ô ±º¿ä~ SetPalette()ÇÔ¼ö!
ÀÐ¾î µéÀÎ ºñÆ®¸ÊÀÇ ÆÈ·¹Æ® Á¤º¸¸¦ ÆÈ·¹Æ® ¿£Æ®¸®¿¡ ä¿ì°í
´ÙÀÌ·ºÆ® µå·Î¿ìÀÇ APIÀÎ CreatePalette()ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼
ÆÈ·¹Æ®¸¦ »ý¼ºÇÏ¸é µË´Ï´Ù.
ÀÏ´Ü ÆÈ·¹Æ®¸¦ ÀÐ¾î µéÀ϶§´Â
LPDIRECTDRAWPALETTE lpPalette;
.....
.....(¾î¼°í Àú¼°í...)
lpPalette = DDLoadPalette(lpDD, "Palette");
//¿©±â¼ "Palette"´Â Palette.bmp¸¦ ¶æÇÕ´Ï´Ù.
.....
.....(¾î¼°í Àú¼°í...)
±×·¸´Ù¸é ÀÌÂë¿¡¼ CreatePalette() ÇÔ¼ö´Â ¾î¶² °ÍÀΰ¡?
µµ´ëü ¾î¶² °ÍÀ̱淡? ±Ã±ÝÇϽÃÁÒ~ Çѹø »ìÆì º¸ÁÒ~
=======================================================
HRESULT CreatePalette(
LPDIRECTDRAW lpDD,
DWORD dwFlags,
LPPALETTEENTRY lpColorTable,
LPDIRECTDRAWPALETTE FAR *lplpDDPlaette,
lUnknown FAR *pUnkOuter )
=======================================================
ÇÔ¼ö ÀÎÀÚ ¼³¸í :
lpDD : DirectDraw °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ
dwFlags : Ä÷¯ ¿£Æ®¸®ÀÇ Æ÷¸äÀ» ´ÙÀÌ·ºÆ®¿¡ Àü´ÞÇϱâ
À§ÇÑ ¸Å°³ º¯¼ö
lpColorTable : RGB¿£Æ®¸®¿¡ ´ëÇÑ ¸Å°³º¯¼ö
pUnkOuter : º¸Åë NULL°ªÀ» °¡Áü
DDLoadPalette()ÇÔ¼ö ³»ÀÇ CreatePalette()ÇÔ¼öÀÇ dwFlags´Â
DDPCAPS_8BIT·Î 256°³ÀÇ »ö»ó Á¤º¸¸¦ »ý¼ºÇÕ´Ï´Ù. ¸¸¾à 16
ºñÆ®·Î ÇϰíÀÚ ÇÑ´Ù¸é 8BIT´ë½Å 16BIT·Î ÁÖ½Ã¸é µÇ°ÚÁÒ~
ÀϹÝÀûÀ¸·Î Àü¸é ¹öÆÛÀÇ ÆÈ·¹Æ®¸¦ °ü¸®Çϸç
DDSCL_EXCLUSIVEMODEÇ÷¡Å©¿Í DDSCK_FULLSCREEN Ç÷¡±× ¼³Á¤
µÇ¾î ÀÖ´Ù¸é GDIÆÈ·¹Æ® º¸´Ù ºü¸¨´Ï´Ù.
´ÙÀ½Àº ´ÙÀÌ·ºÆ® ¼Ò½º¿¡ ÀÖ´Â ÆÄ·¹Æ® ó¸®ÇÏ´Â ÇÔ¼öÀÇ ¼Ò½º
ÀÔ´Ï´Ù. ÇÊÀÚ°¡ µû·Î À̺κÐÀÇ ¼Ò½º°¡ ¾øÀ¸¹Ç·Î ÀÖ´Â °ÍÀ¸·Î
´ëü ÇϰڽÀ´Ï´Ù. º¸½Ã´Â ºÐµé²² ¾çÇØ ºÎʵ右´Ï´Ù.
//
// DDLoadPalette ÇÔ¼ö
//
// ºñÆ®¸ÊÀÇ ÆÄ·¹Æ®¸¦ ´ÙÀÌ·ºÆ® µå·Î¿ì¿¡ »ý¼ºÇÏ´Â ÇÔ¼ö
//
// ¸¸¾à ÆÄ·¹Æ® ¿ÍÀÏÀÌ ¾ø°Å³ª NULLÀÌ¸é »ý¼ºÀ» µðÆúÆ®·Î ÇÕ´Ï´Ù.
// ( 332 palette ? )
//
extern "C" IDirectDrawPalette * DDLoadPalette(IDirectDraw *pdd,
LPCSTR szBitmap)
{
IDirectDrawPalette* ddpal;
int i;
int n;
int fh;
HRSRC h;
LPBITMAPINFOHEADER lpbi; // ºñÆ®¸Ê Çì´õ
PALETTEENTRY ape[256]; // 256 ±¸Á¶¸¦ °¡Áö°ÚÁÒ?
RGBQUAD * prgb; // RGB ¿£Æ®¸®
//
// ÀÏ´ÜÀº µðÆúÆ® ÆÄ·¹Æ®·Î ¸Â±¸°í º¸ÀÚ~ ( 332 palette )
//
for (i=0; i<256; i++)
{
ape[i].peRed = (BYTE)(((i >> 5) & 0x07) * 255 / 7);
ape[i].peGreen = (BYTE)(((i >> 2) & 0x07) * 255 / 7);
ape[i].peBlue = (BYTE)(((i >> 0) & 0x03) * 255 / 3);
ape[i].peFlags = (BYTE)0;
}
//
// ¸¸¾à¿¡ ºñÆ®¸Ê ÈÀÏÀÌ Á¸ÀçÇÑ´Ù¸é ´ç¿¬ Àоî¾ß Áö!
//
if (szBitmap && (h = FindResource(NULL, szBitmap, RT_BITMAP)))
{
lpbi = (LPBITMAPINFOHEADER)LockResource(LoadResource(NULL, h));
prgb = (RGBQUAD*)((BYTE*)lpbi + lpbi->biSize);
// ÆÄ·¹Æ® ±¸Á¶¸¦ ÆÄ¾ÇÇÏ´Â ºÎºÐÀÌ °ÚÁÒ~
if (lpbi == NULL || lpbi->biSize < sizeof(BITMAPINFOHEADER))
n = 0;
else if (lpbi->biBitCount > 8)
n = 0;
else if (lpbi->biClrUsed == 0)
n = 1 << lpbi->biBitCount;
else
n = lpbi->biClrUsed;
//
// ºñÆ®¸Ê Ä®¶óÀÇ ±¸Á¶°¡ RGB±¸Á¶°¡ ¾Æ´Ï°í BGRÀ̱¸Á¶À̹ǷÎ
// ¹Ù²ã ÁÖ¾î¾ß ÇÑ´Ù.
//
for(i=0; i<n; i++ )
{
ape[i].peRed = prgb[i].rgbRed;
ape[i].peGreen = prgb[i].rgbGreen;
ape[i].peBlue = prgb[i].rgbBlue;
ape[i].peFlags = 0;
}
}
else if (szBitmap && (fh = _lopen(szBitmap, OF_READ)) != -1)
{
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
_lread(fh, &bf, sizeof(bf));
_lread(fh, &bi, sizeof(bi));
_lread(fh, ape, sizeof(ape));
_lclose(fh);
if (bi.biSize != sizeof(BITMAPINFOHEADER))
n = 0;
else if (bi.biBitCount > 8)
n = 0;
else if (bi.biClrUsed == 0)
n = 1 << bi.biBitCount;
else
n = bi.biClrUsed;
//
// ºñÆ®¸Ê Ä®¶óÀÇ ±¸Á¶°¡ RGB±¸Á¶°¡ ¾Æ´Ï°í BGRÀ̱¸Á¶À̹ǷÎ
// ¹Ù²ã ÁÖ¾î¾ß ÇÑ´Ù.
//
for(i=0; i<n; i++ )
{
BYTE r = ape[i].peRed;
ape[i].peRed = ape[i].peBlue;
ape[i].peBlue = r;
}
}
// 256»öÀ» ÃʱâÈ ÇÑ´Ù.
pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL);
return ddpal;
}
¡Ø Ç®½ºÅ©¸°°ú À©µµ¿ìÁî ¸ðµåÀÇ ÆÈ·¡Æ® »ç¿ë½Ã Â÷ÀÌÁ¡
1. µ¶Á¡ ¸ðµå (Full Screen Mode)
Ç® ½ºÅ©¸°(µ¶Á¡ ¸ðµå)ÀÇ ÇÁ·Î±×·¥¿¡¼´Â ¹°¸®Àû ÆÈ·¹Æ®ÀÇ
RGBÀÇ Ã¹¹øÂ° °ª°ú ¸¶Áö¸· °ªÀÎ °ËÀº»ö°ú Èò»öÀ» Á¦¿ÜÇÑ ¸ð
µç »öÀ» Á¦¾î ÇÒ¼ö ÀÖ½À´Ï´Ù. ´Ü ¿©±â¼ ¾ÕÀÇ °ËÁ¤»ö°ú ¸Ç³¡
ÀÇ Èò»öÀº ¹Ýµå½Ã ÀÌ»öÀÌ¿©¾ß ÇÕ´Ï´Ù.
¾ÕÀÇ »ö°ú µÚÀÇ Èò»öÀ» ¹Ù²Ü¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ¿¹¿Ü ¹æ¹ý
À» »ç¿ëÇØµµ µÇÁö¸¸ ¾î¶² ±×·¡ÇÈ Ä«µå¿¡¼´Â ÀÌ·¯ÇÑ ¹®Á¦·Î
ÆÄ·¹Æ®°¡ ±úÁö´Â ¹®Á¦°¡ ¹ß»ý µÉ¼öµµ ÀÖ½À´Ï´Ù.
2. À©µµ¿ìÁî ¸ðµå (Normal Screen Mode)
À©µµ¿ìÁî ¸ðµå¿¡¼´Â ¹°¸®Àû ÆÈ·¹Æ®ÀÇ ¾ÕÀÇ 10°³¿Í µÚÀÇ 10°³
ÀÇ »öÀº ÀÌ¹Ì ¿¹¾àÀÌ µÇ¾îÀÖ½À´Ï´Ù. ´©°¡ ¿¹¾à ÇßÀ» ±î¿ä?
(±×·¸´Ù¸é ÇÁ·Î±×·¡¸Ó°¡ ¿¹¾àÀ» ¹Ì¸® ÇÏ¸é ¾ÈµÇ³²? ^^;)
À̰ÍÀº À©µµ¿ìÁî¶ó´Â ¿î¿µÃ¼Á¦°¡ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ÀÌ·±°Í
¶§¹®¿¡ ±×¾Æ¹«¸® È£È ½º·¯¿î »öÀ» ½áµµ À̺κÐÀ» »ç¿ëÇØ¼´Â
¾ÈµÇ¹Ç·Î À©µµ¿ìÁî âÀÌ »öÀÌ º¯ÇÏÁö ¾Ê°í Ç÷¹À̰¡ µÇ´Â °Í
ÀÔ´Ï´Ù. ¸¸¾à À©µµ¿ìÁî°¡ ¾²´Â »öÀ» ħ¹üÇÒ¼öµµ ÀÖÁö¸¸ µÉ¼ö
ÀÖ´ÂÇÑ Ä§¹üÀ» ÇÏÁö ¾Ê´Â °ÍÀÌ º¸±â°¡ ÁÁÁö ¾ÊÀ» ±î¿ä?
¾î° ¿À´Ãµµ ºÎ½ÇÇÑ ³»¿ë¸¸À» ¼³¸íÇÑ »ùÀÌ µÈ°Í °°¾Æ ÇãÀüÇϱº
¿ä~ ´ÙÀ½¿¡´Â ´õ¿í´õ ¾ËÂù ³»¿ëÀ» °¡Áö°í °Á¸¦ ÇØº¸°Ú½À´Ï´Ù
Áú¹®ÀÖÀ¸½Ã¸é °¡Â÷ ¾øÀÌ Áú¹®ÇØÁֽøé Á¤¼º°Í ´äº¯Çص帮°Ú½À
´Ï´Ù.
Áö±Ý±îÁö ¹«¼Ò¼Ó ¼º³²ÀÇ º°¶¥ Çϴö¥ Áö±¸¶¥ÀÇ ÀÌÁذï(LeeChen)
ÀÌ¿´½À´Ï´Ù.
ÄÄÇ»ÅÍÀÇ ¼¼°è´Â ´ç½ÅÀÇ ²ÞÀ» ½ÇÇöÇØ
¹«ÇÑÇÑ °¡´É¼ºÀ» º¸¿© ÁÙ¼ö ÀÖ½À´Ï´Ù.
- LeeChen -
#1390 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [6] 10/07 12:30 183 line
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
Áö³ ½Ã°£¿¡´Â ´ÙÀÌ·ºÆ®ÀÇ ÆÈ·¹Æ® °ü¸®¿¡ °üÇØ¼ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù.
À̹ø ½Ã°£¿¡´Â Lock°ú UnLockÀ» ¹è¿öº¸°Ú½À´Ï´Ù. º¸Åë ¸Þ¸ð¸®¸¦
»ç¿ëÇϴµ¥ ÀÖ¾î¼ ÀÚ½ÅÀÌ »ç¿ëÇϰí ÀÖ´Â µ¿¾È »ç¿ëÇϰí ÀÖ´Â ¹üÀ§
¿¡ ´ëÇØ¼´Â ¾î¶°ÇÑ ´Ù¸¥ ÀÛ¾÷ÀÇ Ä§¹üÀÌ À־ ¾ÈµË´Ï´Ù.
¸¸¾à ÀÌ·± °ÍÀÌ Çã¿ëµÈ´Ù¸é ¸Þ¸ð¸® ¿¡·¯³ª ¿À¹öÇ÷ΠÇö»óÀ¸·Î ÀÎÇØ
½Ã½ºÅÛÀÌ ´Ù¿îÇö»óÀÌ ÀϾ´Ï´Ù.
( ÇÊÀÚ´Â ¾ÆÁ÷±îÁö´Â ÀÌ·±ÀÏÀÌ ¾ø¾úÀ¸¹Ç·Î ½ÇÁ¦·Î ¿À¹ö Ç÷ο쳪
½Ã½ºÅÛ ¿¡·¯ Çö»óÀÌ ÀÖ´ÂÁö È®ÀÎÀ» ÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ°Í ¿ª½Ã
ÁÁÀº °æÇèÀÌ µÇ´Ï±î¿ä~ ^^;)
´Ù½Ã º»·ÐÀ¸·Î µé¾î¿Í¼ ¾Õ¿¡¼ ¿ì¸®´Â ºñÆ®¸Ê¿¡ ´ëÇØ¼ ¹è¿üÀ¸¸ç
ºñÆ®¸ÊÀ» Âï´Â ¹æ¹ý¿¡ ´ëÇØ¼µµ ¹è¿ü½À´Ï´Ù. ¶ÇÇÑ ÆÈ·¹Æ® ¸¦ ó¸®
ÇÏ´Â ¹æ¹ýÀ» ¹è¿ü½À´Ï´Ù. ÀÌÁ¤µµ¶ó¸é ¾î´ÀÁ¤µµ °ÔÀÓÀ» Á¦ÀÛÇÒ ¼ö
ÀÖÁö¸¸ ¾îµð À̰Ǹ¸ °¡Áö°í °¡´ÉÇϰڽÀ´Ï±î~
Chap 6-1. Lock/Unlock Function
DirecDrawSurface´Â ºñµð¿À ¸Þ¸ð¸®¸¦ »ç¿ëÇϰųª ½Ã½ºÅÛ ¸Þ¸ð¸®¸¦
»ç¿ëÇÒ ¼ö Àִµ¥ ºñµð¿À ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °æ¿ì ½Ã½ºÅÛ ¸Þ¸ð¸®¸¦
»ç¿ëÇÏ°Ô µË´Ï´Ù.Ç¥¸éÀ» ¾îµð¿¡ »ý¼ºÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é
ºñµð¿À ¸Þ¸ð¸®¿¡ Ç¥¸éÀÌ »ý¼ºµË´Ï´Ù.
ºñµð¿À ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ °æ¿ì¿¡ Surface´Â ºñµð¿À Ä«µå¿Í Á÷Á¢ °Å·¡
¸¦ ÇÏ°Ô µË´Ï´Ù. ±×·¯¹Ç·Î Àü¸é Surface´Â Ç×»ó ºñµð¿À ¸Þ¸ð¸®¿¡ Á¸
ÀçÇÏ°Ô µË´Ï´Ù. Çø®ÇÎÀ» ÇÏ°Ô µÈ´Ù¸é Àü¸é Surface¿Í Èĸé Suface
¿ª½Ã ºñµð¿À ¸Þ¸ð¸®¿¡ Á¸Àç ÇÏ°Ô µË´Ï´Ù.
ºñµð¿À Surface¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â Àü¸é Surfaceº¸´Ù Èĸé Surface´Â
Ä¿¼´Â ¾ÊµË´Ï´Ù. ±×·¯³ª ½Ã½ºÅÛ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ °æ¿ì ÀÌ·¯ÇÑ Á¦ÇÑ
Àº ¾ø½À´Ï´Ù.
Áö±Ý±îÁö´Â »ç½Ç ºñµð¿À ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¸¸À» ¾ð±ÞÇß½À´Ï´Ù.
¿À´ÃÀÇ ÁÖÁ¦°¡ ÁÖÁ¦ÀÎ ¸¸Å ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡¼ ºñµð¿À ¸Þ¸ð¸®·Î
Àü¼ÛÇÏ´Â ¹æ¹ýÀ» À̾߱â ÇÏ·Á ÇÕ´Ï´Ù.
À̹æ¹ýÀ» ¾Ë°Ô µÇ¸é ÀÚü ½ºÇÁ¶óÀÌÆ® Æ÷¸ËÀ» »ç¿ëÇß´ø(±âÁ¸ÀÇ µµ½º¿ë
°ÔÀÓ)ÀÇ Æ÷¸ËÀ» ±×´ë·Î À©µµ¿ìÁî·Î Æ÷ÆÃÇÒ¼ö ÀÖ°ÚÁÒ? ^^;
À̹ÌÁö¸¦ Ç¥¸éÀ¸·Î º¹»çÇϱâ À§Çؼ´Â ºñµð¿À ¸Þ¸ð¸®¸¦ ¾ò¾î¾ß Çϴµ¥
ºñµð¿À ¸Þ¸ð¸® ³»¿¡ Á¸ÀçÇÏ´Â DirectDrawSurfaceÀÇ °æ¿ì ´ÙÀÌ·ºÆ®ÀÇ
Lock¸¦ »ç¿ëÇÕ´Ï´Ù. »ç½Ç Lock´Â ÀÏ¹Ý API¿¡µµ Á¸Àç ÇϹǷΠÀ̰ÍÀ»
À߸ø ÀÌÇØ ÇÏ½Ã¸é ¾ÈµË´Ï´Ù.
Ç¥¸éÀ¸·Î À̹ÌÁö¸¦ Àü¼ÛÇÒ ¶§ ºñµð¿À ¸Þ¸ð¸®ÀÇ ³»¿ëÀÌ ¼Ò½ÇµÇÁö ¾Ê°Ô
Çϱâ À§Çؼ ´ÙÀÌ·ºÆ®´Â Lock¿Í UnlockÀÇ ½ÇÇà »çÀÌ¿¡ Win16LockÀ»
»ç¿ëÇÕ´Ï´Ù. ÀÌÇÔ¼ö´Â À©µµ¿ìÁî¿¡¼ »ç¿ëÇÏ´Â Global Systemm LockÀÔ
´Ï´Ù. ¹Ù·Î GDI°¡ Video Display Driver sk ´Ù¸¥ 16ºñÆ® ÄÄÆ÷³ÍÆ®¸¦
»ç¿ëÇϱâ À§ÇÑ Lock ¶ó°í º¸½Ã¸é µË´Ï´Ù.
ÀÌÂëÇØ¼ ±×·± ±×·¸°Ô ¶°µé¾î ´ë´Â LockÀº µµ´ëü ¾î¶² ±¸Á¶Àϱî?
ÇϽô ºÐÀÌ °è½Ã°ÚÁÒ? ¾îµð Çѹø »ìÆì º¾½Ã´Ù.
==========================================================
HRESULT Lock( LPDIRECTDRAWSURFACE lpDDSurface,
LPRECT lpDestRect,
LPDDSURFACEDESC lpDDSurfaceDesc,
DWORD dwFlags,
HANDLE hEvent)
==========================================================
ÇÔ¼ö ÀÎÀÚ ¼³¸í:
lpDDSurface : LPDIRECTDRAWSURFACE ±¸Á¶Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ
lpDestRect : Ç¥¸é ¿µ¿ªÁß lockµÇ´Â ¿µ¿ªÀ» ³ªÅ¸³»´Â RECT±¸Á¶Ã¼ Æ÷ÀÎÅÍ
lpDDSurfaceDesc : LPDDSURFACEDESC ±¸Á¶Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ
dwFlags : DDLOCK_SURFACEMEMORYPTR, DDLOCK_EVENT,
DDLOCK_WAITÀÇ ¼¼ °¡Áö Áß ÇϳªÀÇ Ç÷¡±× ¼³Á¤
¸¸¾à bltÁß¿¡ lockÀ» ½ÃµµÇϸé WASSTILLDRAWING¿¡·¯°¡
¹ß»ýÇϴµ¥ À̶§´Â Ç÷¡±×¸¦ DDLOCK_WAIT·Î ¼¼ÆÃÇÑ´Ù.
hEvent : ½Ã½ºÅÛ À̺¥Æ®¿¡ ´ëÇÑ ÇÚµé
´ÙÀÌ·ºÆ®·Î ¸Þ¸ð¸®¸¦ Àü¼ÛÇÏ´Â ¹æ¹ý¿¡´Â µÎ°¡Áö Á¾·ù°¡ ÀÖ½À´Ï´Ù.
1. ÇÑ ¹ø¿¡ ÇѹÙÀÌÆ®¾¿ Àü¼Û
2. ¹ðÅ©¸¦ »ç¿ëÇÏ¿© Çѹø¿¡ 64K¾¿ µ¥ÀÌÅ͸¦ Àü¼Û
À̹æ¹ýÀº DDSCAPS_BANKSWITCHED Ç÷¡±×¸¦ »ç¿ëÇÕ´Ï´Ù.
¸¸¾à ¼º°øÇÏÁö ¸øÇϸé page fault°¡ ¹ß»ýµË´Ï´Ù.
ÀÚ~ À̹ø¿¡´Â ¾Õ¿¡¼ ¹è¿î °ÍÀ» Åäµ¥·Î 1¹ø ¹æ½ÄÀ» ÀÌ¿ëÇÑ ÇÔ¼ö¸¦
¸¸µé¾î º¾½Ã´Ù.
HRESULT ddrval;
DDSURFACEDESC ddsd;
LPSTR lpBits;
LPSTR lpSrc;
int I;
ddsd.dwSize = sizeof(ddsd);
ddrval = lpPrimary->Lock(NULL, &ddsd,, 0, NULL);
lpBits == (LPSTR) ddsd.lpPrimary;
for(i=0; I<480; I++)
{
memory(lpBits, lpSrc, 640);
lpBits += ddsd.lPitch;
lpSrc += 640;
}
ddrval = lpPrimary->Unlock(NULL);
À½...°£´ÜÇÏÁÒ? ¾Õ¿¡¼µµ À̾߱â ÇßµíÀÌ bltµÇ´Â µ¿¾È lockµÉ ¼ö ¾øÀ¸¸ç
ºñµð¿À ¸Þ¸ð¸®ÀÇ Ç¥¸éÀºÀü¸é ¹öÆÛ º¸´Ù Ŭ¼ö ¾ø°í ¶ÇÇÑ È¸é ÀüȯÀ»
À§Çؼ FlipÇÏ´Â µ¿¾È ÈÄ¸é ¹öÆÛ¸¦ lockÇÒ¼ö ¾ø½À´Ï´Ù.
Chap 6-2. Blt / BltFast Function
´ÙÀÌ·ºÆ®´Â ºñÆ®¸ÊÀ» Âï±âÀ§Çؼ BltÇÔ¼ö¿Í BltFast°¡ ÀÖ½À´Ï´Ù. À̵Î
ÇÔ¼öÀÇ Æ¯Â¡Àº Blt´Â Ŭ¸®ÇÎÇϴµ¥ Àû°ÝÀÔ´Ï´Ù. ±×·¸´Ù°í BltFast´Â
Ŭ¸®ÇÎÀ» ¸øÇÏ´À³Ä? ±×°Ç ¾Æ´Õ´Ï´Ù. º¸Åë BltÇÔ¼ö º¸´Ù BltFastÇÔ¼ö°¡
¼Óµµ°¡ 10%Á¤µµ ºü¸¨´Ï´Ù. ±×·¯³ª Ŭ¸®Çΰ°Àº 󸮸¦ ÇÏ°Ô µÇ¸é ¼Óµµ
¿¡ ´ëÇÑ È¿°ú´Â º¼¼ö ¾ø½À´Ï´Ù. ÀÌ·¸°Ô µÈ´Ù¸é µÎÇÔ¼öÀÇ ±â´ÉÀº °°Àº
°ÍÀ̳ª ´Ù¸§ ¾ø³ªº¸ÁÒ?
Blt ±¸Á¶´Â ´Ü¼øÇÏ°í ±âÁ¸ÀÇ GDIÀÇ BltÇÔ¼ö°ú ºñ½ÁÇϹǷΠBltFast¸¸À»
ºÐ¼®ÇϰڽÀ´Ï´Ù. BltFast¸¦ ÂüÁ¶Çؼ Blt ÇÔ¼ö¸¦ ºÐ¼®Çغ¸¼¼¿ä~
===========================================================
HRESULT BltFast(LPDIRECTDRAWSURFACE lpDDSurface,
DWORD dwX,
DWORD dwY,
LPDIRECTDRAWSURFACE lpDDSrcSurface,
LPRECT lpSrcRect,
DWORD dwTrans)
===========================================================
ÇÔ¼ö ÀÎÀÚ ¼³¸í :
lpDDSurface : BltFastÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ºñÆ®¸ÊÀÇ bit µéÀ» º¹»çÇÒ ¸ñÀûÁö
dwX,dwX : ¸ñÀûÁö x, yÁÂÇ¥
lpDDSrcSurface : º¹»çÇÒ ºñÆ®¸Ê
lpSrcRect : º¹»çÇÒ ºñÆ®¸ÊÀÇ ¿µ¿ª
dwTrans : º¹»çÇÒ ºñÆ®¸ÊÀÇ Æ¯¼º ¸Å°³ º¯¼öµé
ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ÙÀ½ÀÇ ¿¹Á¦¸¦ »ç¿ëÇØ º¸¾Ò½À´Ï´Ù.
Ŭ¸®ÇÎÀÌ µÇµµ·Ï ó¸® ÇÏ´Â ½ºÇÁ¶óÀÌÆ® Âï´Â ÇÔ¼öÀÇ ÁÖµÈ ³»¿ëÀÔ´Ï´Ù.
Á¦°¡ »ó¿ë°ÔÀÓ¿¡ »ç¿ëÇϰí ÀÖ´Â ½ÇÁ¦ ½ºÇÁ¶óÀÌÆ® ÇÔ¼öÀÇ ¼Ò½ºÀÔ´Ï´Ù.
RECT rc;
int tempxs, tempys;
HRESULT ddrval;
rc.left = 0;
rc.top = 0;
rc.bottom = ys;
rc.right = xs;
x-=xs/2;
y-=ys;
tempxs = x+xs;
tempys = y+ys;
if (x > 639 || y > 479) return DD_OK;
if (tempxs <= 0 || tempys <= 0) return DD_OK;
if (x < 0) { rc.left -= x; x=0; }
else if (tempxs > 639) rc.right -= (tempxs - 639);
if (y < 0) { rc.top -= y; y=0; }
else if (tempys > 479) rc.bottom -= (tempys - 479);
ddrval = lpSurface->BltFast(x, y, lpDS, &rc,
DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
return ddrval;
´Ü¼øÇÏ°í °£´ÜÇÏÁÒ~ ¹«Ã´À̳ª ½±°Ô Â¥Á® ÀÖ´Â ¼Ò½ºÀε¥ º°µµÀÇ
¼³¸íÀÌ ÇÊ¿ä ¾ø°ÚÁÒ?
´õ¿í ÀÚ¼¼ ÇÑ °ÍÀº Á¦°¡ ¾ÕÀÇ ¿¬Àç¿¡¼ ±âÀçÇß´ø Áß¿¡ Âü°í¼Àû
À» Âü°íÇϼ¼¿ä~ ±×·¯¸é ¸¹Àº µµ¿òÀÌ µÇ½Ç °Ì´Ï´Ù.
À̰ÍÀ¸·Î 6ȸ Lock/Unlock, Blt/BltFast °Á¸¦ ¸¶Ä¡µµ·Ï ÇϰڽÀ
´Ï´Ù.
¾ÕÀ¸·Î ¸î°³ÀÇ °Á¸¦ ¸¶Ä¡°í 3Â÷¿ø °Á¸¦ ÀÌ¾î¼ ÇØº¸À̰ڽÀ´Ï
´Ù. ´ÙÀÌ·ºÆ® 3D°¡ 5.0¿¡¼ ¹«Ã´À̳ª »¡¶óÁ®¼ ÀÌÁ¨ ´©±¸³ª 3Â÷¿ø
°ÔÀÓÀ» Áñ±â°í Á¦ÀÛÇÒ ¼ö ÀÖ´Â ¼öÁØÀ̶ó ´ÙÀÌ·ºÆ®¸¦ ÀÌ¿ëÇØ¼
3Â÷¿ø °ÔÀÓÀ» Á¦ÀÛÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
¼º³²ÀÇ ¹«¼Ò¼Ó º°¶¥ Çϴö¥ Áö±¸¶¥ÀÇ ÀÌÁذï(LeeChen) ÀÌ¿´½À´Ï´Ù.
´ç½ÅÀÇ ¹«ÇÑÇÑ ÀáÀç·ÂÀ» ÄÄÇ»ÅÍ´Â ¿øÇÑ´Ù.
´ç½ÅÀÇ »ó»ó ¼ÓÀÇ ²ÞÀ» ¾ïÁ¦ÇÏÁö¸»°í Áö±Ý
À̼ø°£ ½ÇÇöÀ¸·Î ¿Å°Ü¶ó~ ¹Ù·Î ÄÄÇ»ÅÍ·Î
¸»ÀÌ´Ù.
- LeeChen -
#1399 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [7] 10/19 14:38 271 line
////////////////////////////////////////////////////////////
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
¾È³çÇϼ¼¿ä~ Çѵ¿¾È ½Ã°£À» Çΰè»ï¾Æ Áö¿¬µÇ°í ÀÖ´Â À©µµ¿ìÁî
°ÔÀÓ °Á¸¦ ¼º¿øÇØÁֽô ¸¹Àº ºÐµé²² Áø½ÉÀ¸·Î °¨»çµå¸®¸ç
¾ÕÀ¸·Îµµ °è¼ÓÀûÀ¸·Î °Á¸¦ ÇϰڽÀ´Ï´Ù.
------------------------------------------------------------
[LeeChen°ú ÇÔ²² - À©µµ¿ìÁîÆí ¸ñÂ÷]
*1. ´ÙÀÌ·ºÆ® Àü¹Ý¿¡ °üÇØ¼...
*2. ´ÙÀÌ·ºÆ® »ý¼º°ú ÇÁ·Î¼¼¼ µ¶Á¡, ¸ðµå ¼ÂÆÃ
*3. ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º Àü¹Ý¿¡ °üÇØ
*4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ, ºñÆ®¸Ê º¹»ç
*5. ´ÙÀÌ·ºÆ® ÆÈ·¹Æ® °ü¸®
*6. Lock°ú Unlock, Blt, BltFast
*7. ´ÙÀÌ·ºÆ® »ç¿îµå ó¸®
8. ´ÙÀÌ·ºÆ® Á¶À̽ºÆ½ ó¸®
9. °£´ÜÇÑ 2D °ÔÀÓÀ» Á¦ÀÛ
------------------------------------------------------------
Chap 7-1. Direct Sound
¹ú½á 7¹øÂ° ´ÙÀÌ·ºÆ® »ç¿îµå¸¦ ó¸®ÇÒ ¼ö ÀÖ´Â ½Ã°£ÀÌ µÇ¾ú±º¿ä~
´ÙÀÌ·ºÆ® »ç¿îµå´Â µµ½º ½ÃÀýÀÇ »ç¿îµå´Â DMAÀü¼ÛÀ» »ç¿ëÇØ¼
¸ÖƼ»ç¿îµåµîÀ» ó¸®Çß´ø °ÍÀ¸·Î ±â¾ïÇϰí ÀÖ½À´Ï´Ù.(±×·±°¡??)
±×·¡µµ °¡²û ¸Þ¸ð¸® Ãæµ¹Çö»óÀ¸·Î ÀÎÇØ ´õ¿í ÁÁÀº »ç¿îµå ¶óÀ̺ê
·¯¸®¸¦ ´©°¡ ¸¸µå´Â°¡°¡ °ü°ÇÀ̾ú´ø ½ÃÀýÀÌ ÀÖ¾úÁÒ?
±×·¯³ª À©µµ¿ìÁîÀÇ Æ¯Â¡ÀÌ Çϵå¿þ¾î¸¦ Á¦¾îÇϴµ¥ ÀÖ¾î ½Ã°£ÀûÀÎ
ÅõÀÚ¸¦ ÇÒÇʿ䰡 ¾ø°ÚÁÒ? (^^; )
´ÙÀÌ·ºÆ® »ç¿îµå´Â ±âÁ¸ÀÇ µµ½º¿ë ¶óÀ̺귯¸®ÀÇ °æ¿ì ÇÔ¼öµéÀÌ
Ãß°¡µÉ °æ¿ì »õ·Î¿î ¶óÀ̺귯¸®°¡ ÀÌÀü¿¡ °³¹ßÇÑ ÇÁ·Î±×·¥°ú
Á¦´ë·Î ȣȯÀÌ ¾ÈµÇ°Å³ª ÀÏÁ¤ÇÑ Ç¥ÁØÀÌ ¾ø¾î ¿ì¿ÕÀÚ¿ÕÇß½À´Ï´Ù.
±×·¯³ª Component Object Model(COM)À» Áö¿øÇϹǷμ ÀÌ·¯ÇÑ
¹®Á¦´Â ¹®Á¦°¡ µÇÁö ¾Ê½À´Ï´Ù.
´ÙÀÌ·ºÆ® »ç¿îµå´Â IDirectSound¿Í IDirectSoundBuffer·Î ±¸¼º
µÇ¾î ÀÖ½À´Ï´Ù. ´ÙÀÌ·ºÆ® ¹öÆÛ´Â 1Â÷ »ç¿îµå ¹öÆÛ(Primary
Sound)¿Í 2Â÷ »ç¿îµå ¹öÆÛ(Secondary Sound Buffer)·Î ³ª´©¾î
Áý´Ï´Ù. 1Â÷ »ç¿îµå ¹öÆÛ´Â 2Â÷»ç¿îµå ¹öÆÛÀÇ ¹öÆÛ¸¦ ¹Ö½ÌÇÏ¿©
Ãâ·ÂÇϸç 2Â÷ »ç¿îµå ¹öÆÛ´Â ½ÇÁ¦ °ÔÀÓ¿¡ »ç¿ëµÇ´Â ¿ÀÁ÷ ÇϳªÀÇ
»ç¿îµå¸¸À» ´ã°í ÀÖ½À´Ï´Ù. ÀÌÇØ°¡ µÇ´ÂÁö ¸ð¸£°Ú±º¿ä?
2Â÷ »ç¿îµå ¹öÆÛ´Â »ç¿îµå ¹öÆÛÀÇ ¸Þ¸ð¸®º¸´Ù Å« ¸Þ¸ð¸® ¿µ¿ªÀ»
»ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç »ç¿îµå Ä«µå ³»ÀÇ ¸Þ¸ð¸®º¸´Ù Å« ¸Þ¸ð¸®ÀÇ
¿µ¿ªÀ» »ç¿ëÇÒ °æ¿ì ½Ã½ºÅÛ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ¶ÇÇÑ 2Â÷
»ç¿îµå ¹öÆÛÀÇ ¸ðµç À½ÇâµéÀº 1Â÷ »ç¿îµå ¹öÆÛ·Î º¸³»±â Àü¿¡
ÀÚµ¿À¸·Î ¹Í½ÌµÇ¾î º¸³»Áö°Ô µË´Ï´Ù.
¸ð½Äµµ·Î Ç¥ÇöÇϸé
+--------------------------------------------------+
| +--------------------+ |
| | 1Â÷ »ç¿îµå ¹öÆÛ | |
| +--------------------+ |
| +--------------------+ |
| | 2Â÷ »ç¿îµå ¹öÆÛ | |
| +--------------------+ |
| |
| +--------------------+ |
| | 2Â÷ »ç¿îµå ¹öÆÛ | |
| +--------------------+ |
| ..... |
| +--------------------+ |
| | 2Â÷ »ç¿îµå ¹öÆÛ | |
| +--------------------+ |
+--------------------------------------------------+
<±×¸² 7-1>
±×¸² °¡Áö°í´Â ÀÌÇØ Çϱâ Èûµé´Ù±¸¿ä? ÇѸ¶µð·Î ÇϳªÀÇ
1Â÷ »ç¿îµå ¹öÆÛ¿¡ ¿©·¯°³ÀÇ 2Â÷ »ç¿îµå ¹öÆÛ°¡ Á¸Àç°¡
°¡´ÉÇÏ´Ù´Â °ÍÀ» º¸¿© ÁÖ´Â ¸ð½Äµµ ÀÔ´Ï´Ù.
´ÙÀÌ·ºÆ® »ç¿îµå´Â ´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ÇϳªÀÇ »ç¿îµå
¸¦ Ãâ·Â ÇÏ°Ô µË´Ï´Ù.
1) ´ÙÀÌ·ºÆ® »ç¿îµå °´Ã¼ »ý¼º
2) ÇÊ¿äÇÑ »ç¿îµåÀÇ 2Â÷ ¹öÆÛ »ý¼º
3) »ý¼ºµÈ ¹öÆÛ¿¡ À½Çâ µ¥ÀÌŸ¸¦ Àü¼Û
(À̶§ lock¿Í Unlock¸¦ »ç¿ëÇÕ´Ï´Ù.)
4) 2Â÷ »ç¿îµå ¹öÆÛ¿¡ ÀÖ´Â À½ÇâµéÀ» Ãâ·Â
¾ÆÁÖ °£´ÜÇÑ ±¸Á¶¸¦ °¡Áö°í ÀÖÁÒ? ÀÌÂî º¸¸é Áö±Ý±îÁö
¹è¿ü´ø À̹ÌÁö Ãâ·Â°úµµ ºñ½ÁÇÏ´Ù°í º¼¼ö Àֳ׿ä?
±×·³ »ç¿îµå°¡ Ãâ·ÂÇϱ⠱îÁöÀÇ ¸ð½Äµµ¸¦ º¸µµ·Ï ÇÏÁÒ!
+----------+ +--+
| 2Â÷ ¹öÆÛ | --> | |
+----------+ |¸Þ| +--------------+
....... |¸ð| +--------+ | |
+----------+ |¸®|-->|1Â÷ ¹öÆÛ| ->|½ºÇÇÄ¿·Î..¹Àò|
| 2Â÷ ¹öÆÛ | --> | | +--------+ | |
+----------+ |¹Í| +--------------+
+----------+ |½Ì|
| 2Â÷ ¹öÆÛ | --> | |
+----------+ +--+
Áö±Ý±îÁö ¾Ë¾Æº» ³»¿ëÀ» Åäµ¥·Î ½ÇÁ¦ »ç¿îµå °ü·Ã ÄÚµùÀ»
ÇØº¾½Ã´Ù.
1. ´ÙÀÌ·ºÆ® »ç¿îµå »ý¼º
LPDIRECTSOUND lpDs;
HWND hwnd;
HRESULT dsrval;
dsrval = DirectSoundCreate(NULL, &lpDs, NULL);
if(dsrval != DS_OK)
return FALSE; // ´ÙÀÌ·ºÆ® »ç¿îµå »ý¼ºÀÇ ½ÇÆÐ½Ã
lpDs->SetCooperativeLevel(hwnd, DDSSCL_NORMAL);
¿©±â±îÁö°¡ »ç¿îµå °´Ã¼ÀÇ »ý¼ºÇÏ´Â Äڵ忴½À´Ï´Ù.
ÇÔ¼ö´Â ¾Õ¿¡¼ ¹è¿î ´ÙÀÌ·ºÆ® ÇÔ¼ö ±¸Á¶¿Í ´Ù¸¥°ÍÀÌ ¾øÀ¸
¹Ç·Î ÇÔ¼ö¼³¸íÀ» »ý·«ÇϰڽÀ´Ï´Ù.
ÀÚ~ À̹ø¿¡´Â 2Â÷ »ç¿îµå ¹öÆÛ¸¦ »ý¼ºÇØ º¾½Ã´Ù. ¾Õ¿¡¼
ÀåȲÇÏ°Ô ¼³¸í¸¸ ÇØ³õ°í 2Â÷ ¹öÆÛ°¡ ¹«Ã´ Áß¿äÇ졂 °Í
°°Àº »ý°¢À¸·Î µéÁö¸¸ »ìÆì º¸¸é º°°Å ¾Æ´Ï³×? ÇÏ½Ç °Ì
´Ï´Ù.
2. ÇÊ¿äÇÑ µ¥ÀÌŸÀÇ 2Â÷ ¹öÆÛ »ý¼º
LPDIRECTSOUND lpDs;
LPPCMWAVEFORMAT pcmwf;
LPDIRECTSOUNDBUFFER lpDsb;
DSBUFFERDESC dsbd = {0};
dsbd.dwSize = sizeof(dsbd);
dsbd.dwFlags = DSBCAPS_CTRLDEFAULT;
dsbd.dwBufferByte = 30000;
dsbd.lpwfxFormat = (LPWAVEFORMATEX)&pcmwf;
dsrval = lpDs->CreateSoundBuffer(&dsbd, lplpDsb, NULL);
if(dsrval != DS_OK)
return FALSE; // ´ç¿¬ ½ÇÆÐ ÇßÀ» °æ¿ì°ÚÁÒ?
¿©±â±îÁö°¡ 2Â÷ »ç¿îµå ¹öÆÛ¸¦ »ý¼ºÇÏ´Â ÄÚµå ÀÔ´Ï´Ù.
¾î¶»½À´Ï±î? ±×¸® ¾î·ÆÁö´Â ¾ÊÁÒ? 2Â÷ »ç¿îµå´Â µÎÁ¾·ù·Î
³ª´©¾î Áý´Ï´Ù. ¾î¶² °É±î¿ä?
¹Ù·Î Static Buffer¿Í String Buffer·Î ³ª´©¾î Áý´Ï´Ù.
º¸Åë ªÀº ¼Ò¸®´Â Static Buffer¿¡ ´ä°Ü Áö°í ¿©·¯¹ø ¹Ýº¹
Ãâ·Â Çϱâ À§ÇØ »ç¿ëµÇ¾î Áý´Ï´Ù. ±ä ¼Ò¸®´Â String
Buffer¿¡ ´ä°Ü Áö°Ô µÇ¸ç 2~3ȸ ¹ÝÃË Ãâ·Â Çϱâ À§ÇØ »ç¿ëµÇ
¾îÁý´Ï´Ù.
±×·¸´Ù¸é Áö±Ý±îÁö ¾ÕÀÇ 1)°ú 2)¿¡ ÇØ´çµÈ °ÍÀº ±¸ÇöÀÌ µÈ
»óŰí À½Çâ µ¥ÀÌŸ¸¦ »ý¼ºµÈ ¹öÆÛ¿¡ Àü¼ÛÇÏ´Â °ÍÀ»¾Ë¾Æ
º¾½Ã´Ù.
3. »ý¼ºµÈ ¹öÆÛ¿¡ À½Çâ µ¥ÀÌŸ¸¦ Àü¼Û
LPDIRECTSOUNDBUFFER lpDsb;
DWORD dwOffset = 0;
DWORD dwLength = 30000;
LPVOID lpvPtr;
DWORD dwBytes;
dsrval = lpDsb->Lock(dwOffset, dwLength, &lpvPtr, &dwBytes,
NULL, NULL, 0);
if(dsrval != DS_OK)
return FALSE;
// À̺κÐÀº ¾î°? ¾î´À ºÎºÐ°ú ºñ½ÁÇÏÁÒ?
// Áö³ ¹ø¿¡ ¹è¿î lock°ú unlock¸¦ ÂüÁ¶ Çϼ¼¿ä~
LPBYTE lpbSoundData;// Àü¼ÛÇÒ À½Çâ µ¥ÀÌŸ
LPVOID lpvPtr;
DWORD dwBytes;
CopyMemory(lpvPtr, lpbSoundData, dwBytes);
dsrval = lpDsb->Unlock(lpvPtr, dwBytes, NULL, 0);
if(dsrval != DS_OK)
return FALSE;
ÀÚ~ ¿©±â±îÁö°¡ ÀÏ´ÜÀº ¸¸µé¾îÁø »ç¿îµå¸¦ ´ÙÀÌ·ºÆ® ¹öÆÛ¿¡
Àü¼Û ÇØÁö°Ô µÇ¾ú½À´Ï´Ù. ¾î¶»½À´Ï±î? Áö±Ý±îÁö ¹è¿î °ÍµéÀÌ
¸ðµÎ ºñ½Áºñ½ÁÇÏÁÒ?
4. 2Â÷ »ç¿îµå ¹öÆÛ¿¡ ÀÖ´Â À½ÇâµéÀ» Ãâ·Â
LPDIRECTSOUNDBUFFER lpDsb;
lpDsb->Play(0, 0, DSBPLAY_LOOPING);
// ±âŸ ¿©·¯ 󸮵é
.......
// ³ªÁß¿¡ ¸ØÃß°í ½ÍÀ¸¸é...
lpDsb->Stop();
Ãâ·ÂÇÏ´Â °ÍÀÌ ÀÌÁ¤µµ¸é ¾î´ÀÁ¤µµ ÀÌÇØ°¡ µÇ¼Ì°ÚÁÒ?
ÇÔ¼ö°¡ ±×¸® ¾î·ÆÁö ¾Ê±â ¶§¹®¿¡ ¼³¸íº¸´Ù´Â ÄÚµùµÈ °ÍÀÌ
ÀÌÇØ ÇϱⰡ ¾î·ÆÁö ¾ÊÀ» °Ì´Ï´Ù.
±×·¸´Ù°í ¿©±â¼ »ç¿îµå 󸮰¡ ³¡³ª´À³Ä? ±×°Ç ¾Æ´ÏÁÒ!
¿ì¸®°¡ °ÔÀÓÀ» ÇÏ¸é¼ ¸¶Ä¡ »ç¶÷ÀÌ ¿À¸¥ÂÊ¿¡¼ °É¾î¿À´Â
Âø°¡À» ´À³¢°Å³ª~ ¿ÞÂÊ¿¡¼ ¿À¸¥ ÂÊÀ¸·Î »ç¶óÁ® °¡´Â
ºñÇà±â ¼Ò¸®~ ¶Ç´Â Àú¸Ö¸®¼ ¹Ù·Î ¾ÕÀ¸·Î ³¯¾Æ ¿À´Â ¹«¾ð
°¡ÀÇ ¹°Ã¼ ¼Ò¸®¸¦ ¿ì¸®´Â ¾î¶»°Ô ±¸ÇöÀ» ÇÒ°ÍÀΰ¡?
¹Ù·Î ÀÌ·¯ÇÑ ¹®Á¦´Â ¾ÆÁÖ ½±½À´Ï´Ù. º¸·ýÁ¶Àý·Î ÀÎÇØ ÀÛ°Ô
µé·È´Ù Å©°Ô µé¸®¸é Àú¸Ö¸®¼ °¡±îÀÌ ¿À´Â µíÇÏ´Â È¿°ú¸¦
º¼¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¿À¸¥ÂÊ ½ºÇÇÄ¿¸¦ Å©°Ô Çß´Ù°¡ Á¡Á¡
¿ÞÂÊ ½ºÇÇÄ¿·Î ¼Ò¸®¸¦ ³ª¿À°Ô ÇÏ¸é ¸¶Ä¡ ¿ì¸®´Â 3Â÷¿ø
À½ÇâÀ» µè´Â µíÇÑ Âø°¢À» ÇÏ°Ô µË´Ï´Ù.
ÀÌ·¯ÇÑ È¿°ú´Â ¾î¶»°Ô ¾ò´Â³Ä? ±×°ÍÀÌ ¹®Á¦±º¿ä? (^^;)
±×·¯³ª À̱ÛÀ» º¸´Â ºÐÀº ÀÌ¹Ì ¾Ë°í ÀÖ´Â ºÐµµ °è½ÇÅ×°í
¾î¶ó~ ÀÌ·± ¶Ç ¹¹¾ß~ ÇÏ´Â ºÐµµ ÀÖÀ» °Ì´Ï´Ù.
ÀÌ·²¶§¸¦ À§ÇØ ´ÙÀÌ·ºÆ® »ç¿îµå´Â ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ Á¦°øÇÕ´Ï
´Ù.
SetVolume(lpDS, DWORD, dwVolume);
// ¿ä°Ç ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¿øÇÏ´Â º¼·ýÀ¸·Î ¼Ò¸®³ª°Ô ÇÏ´Â
// ÇÔ¼ö ÀÔ´Ï´Ù.
SetPan(lpDs, DWORDm dwPan);
// Á¿ìÀÇ »ç¿îµå ¹ë·±½º¸¦ Á¶ÀýÇÏ´Â ±â´ÉÀ» ÇÏ´Â ÇÔ¼ö
SetFrequency(lpDS, LPDWORD, lpdwFrequency))
// ¼Ò¸®ÀÇ ÇÇÄ¡¸¦ Á¶Á¤ÇÕ´Ï´Ù. dwFrequency °ªÀÌ ³ôÀ»
// ¼ö·Ï ÇÇÄ¡°¡ Áõ°¡ÇÕ´Ï´Ù. ¸¸¾à Á¶Á¤Çϱâ Àü¿¡ ÇöÀç
// ÇÇÄ¡¸¦ ¾Ë±â À§Çؼ´Â GetFrequency()ÇÔ¼ö¸¦ È£Ãâ
// ÇØ¼ °ªÀ» ¾ò¾î ¿À¸é µË´Ï´Ù.
SetCurrentPosition();
// ÀÌÇÔ¼ö´Â ÇöÀç µ¥ÀÌŸÀÇ À§Ä¡¸¦ ¾Ë¾Æ ³»´Â ÇÔ¼ö ÀÔ´Ï´Ù.
// µ¥ÀÌŸÀÇ ³¡³ª´Â ºÎºÐÀ» üũÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëµÇ¾î
// Áö°ÚÁÒ?
À½..¿©±â±îÁö ¼³¸íÀ» ÇÏ¸é¼ ¾î·Æ°Ô ´À²¸ÁöÁö´Â ¾Ê³ª
½ÍÀº ¿ì·Á¸¦ ÇÏ¸é¼ ¿©±â±îÁö°¡ »ç¿îµå¸¦ ´Ù~¹è¿ü¾î¿ä~
´ÙÀÌ·ºÆ® ¿¢½º¸¦ °øºÎÇϰųª À©µµ¿ìÁ °øºÎÇϸé¼
¾î·Á¿òÀÌ Àְųª Áú¹®ÀÖÀ¸½Ã¸é °¡Â÷ ¾øÀÌ Áú¹®À» ÇØÁÖ¼¼¿ä~
±×·³ Á¦ 7ȸ °Á ´ÙÀÌ·ºÆ® »ç¿îµå¿¡ ´ëÇØ¼ ¹è¿ö º¸¾Ò½À
´Ï´Ù. ±×·³ ´ÙÀ½ ±âȸ¿¡ ´õ¿í ´õ ÁÁÀº ³»¿ëÀ¸·Î ¸¸³ª±æ
¹Ù¶ó¸é¼...
¼º³²¿¡¼ Á¶¿ëÇÑ ÁÖ¸»À» º¸³»¸é¼ ±ÛÀ» Àû¾î º¸¾Ò½À´Ï´Ù.
- ÀÌÁذï (LeeChen) -
#1400 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] <LeeChen> À©µµ¿ì °ÔÀÓÁ¦ÀÛ [8] 10/19 16:03 131 line
////////////////////////////////////////////////////////////
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen) ÀÔ´Ï´Ù.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
¾È³çÇϼ¼¿ä~ Çѵ¿¾È ½Ã°£À» Çΰè»ï¾Æ Áö¿¬µÇ°í ÀÖ´Â À©µµ¿ìÁî
°ÔÀÓ °Á¸¦ ¼º¿øÇØÁֽô ¸¹Àº ºÐµé²² Áø½ÉÀ¸·Î °¨»çµå¸®¸ç
¾ÕÀ¸·Îµµ °è¼ÓÀûÀ¸·Î °Á¸¦ ÇϰڽÀ´Ï´Ù.
------------------------------------------------------------
[LeeChen°ú ÇÔ²² - À©µµ¿ìÁîÆí ¸ñÂ÷]
*1. ´ÙÀÌ·ºÆ® Àü¹Ý¿¡ °üÇØ¼...
*2. ´ÙÀÌ·ºÆ® »ý¼º°ú ÇÁ·Î¼¼¼ µ¶Á¡, ¸ðµå ¼ÂÆÃ
*3. ´ÙÀÌ·ºÆ® ¹öÆÛ »ý¼º Àü¹Ý¿¡ °üÇØ
*4. ¸éÀÇ »ý¼º°ú Çø®ÇÎ, ºñÆ®¸Ê º¹»ç
*5. ´ÙÀÌ·ºÆ® ÆÈ·¹Æ® °ü¸®
*6. Lock°ú Unlock, Blt, BltFast
*7. ´ÙÀÌ·ºÆ® »ç¿îµå ó¸®
*8. ´ÙÀÌ·ºÆ® Á¶À̽ºÆ½ ó¸®
9. °£´ÜÇÑ 2D °ÔÀÓÀ» Á¦ÀÛ
------------------------------------------------------------
Chap 8. Direct Input
°ÔÀÓÀ» Áñ±â´Ù º¸¸é ¿À¶ô½Ç °ÔÀÓ¸¸ ¸øÇÏ´Ù´Â ÇÎÂùÀÌ »ý±â´Â °ÔÀÓ
µéÀÌ ÀÖÁÒ? ƯÈ÷ ¾×¼ÇÀ̳ª ½´ÆÃ°°Àº °ÔÀÓÀ» ¿À¶ô½Ç¿¡¼ ¹ÞÀº
°¨µ¿À» PC¿¡¼ ÇÏ´Ù º¸¸é ±×³É......
ÀÌ·±Á¡À» Á¶±ÝÀ̳ª¸¶ ´À³¢±â À§Çؼ Á¶À̽ºÆ½À̶ó´Â °ÍÀ» »ç¿ëÇÏ
¹Ç·Î ¾à°£ÀÇ °¨µ¿À» ´À³¥¼ö ÀÖ´Ù°í º¾´Ï´Ù.
µµ½º¿ë °ÔÀÓÀÌ Á¶À̽ºÆ½À» Áö¿øÇÏÁö¸¸ »ç½Ç Űº¸µå³ª ¸¶¿ì½ºÀÇ
±â´É¿¡ ´õ¿í ÀÇÁ¸ÇÏ´ø °ÍÀÌ »ç½ÇÀÔ´Ï´Ù.
¸¸¾à À̱ÛÀ» Àд ºÐÀÌ Á¶À̽ºÆ½¿¡ °üÇÑ Á¤º¸°¡ ¾ø°Å³ª ¸ð¸£´Â
ºÐÀº ¾Æ¸¶µµ Á¶±ÝÀº µµ¿òÀÌ µÉ°ÍÀ̶ó°í º¸ÀÔ´Ï´Ù.
ÀÏ´Ü Ã³À½ ÇÁ·Î±×·¥À» ½ÃÀÛÇÒ¶§ Á¶À̽ºÆ½ÀÌ ÀÖ´ÂÁö? ¾Æ´Ô ´Ù¸¥
¹«¾ð°¡°¡ Á¸Àç ÇÏ´ÂÁö? ( ¿©±â¼ ¹«¾ð°¡¶ó´Â °ÍÀº ÀÔ·Â ÀåÄ¡¸¦
¶æÇÏ´Â °ÍÀÔ´Ï´Ù.)
¹Ù·Î ÀÖ¶§ Áö¿øÇÏ´Â ÇÔ¼ö´Â joyGetCaps() ¶ó´Â °ÍÀε¥ ´ÙÀ½°ú
°°ÀÌ »ç¿ëÇÕ´Ï´Ù.
MMRESULT rc;
JOYCAPS jc;
rc = joyGetDevCaps(joy_id, &jc, sizeof(jc));
if(rc == JOYERR_NOERROR)
{
// ¿©±â¼ ¿øÇÏ´Â ÀåÄ¡ 󸮸¦ ÇÏ¸é µÇ°ÚÁÒ~
}
¿©±â¼ Á¶À̽ºÆ½¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò¾ú´Ù¸é Á¶À̽ºÆ½¿¡ x, yÃà¿¡
°üÇÑ À̵¿ °ü·Ã°ªÀ» ¾ò°Å³ª ¼ÂÆÃÀ» ÇØ¾ß °ÚÁÒ?
¹öư¼öµµ Á¤ÇØ ÁÖ´Â °ÍÀº ´ç¿¬ÇÑ °ÍÀÌ°í ¾Æ³¯·Î±× Á¶À̽ºÆ½ÀÎÁö?
ƼÁöÅ» Á¶À̽ºÆ½ ÀÎÁö µîµî ¿ª½Ã Áö¿øÇÏ´Â °Í¿¡ ´ëÇØ ¸í½Ã¸¦
ÇØÁÖ¾î¾ß ÇϰڽÀ´Ï´Ù.
JOYINFOEX joy;
joy.dwSize = sizeof(joy);
joy.dwFlag = JOY_RETURNALL;
rc = joyGetPosEx(joyid, &joy);
if(rc == JOYERR_NOERROR)
{
// Á¶À̽ºÆ½ÀÇ Á¤º¸ °ª ó¸®
}
±×·¸´Ù¸é ¿©±â¼ Á¶À̽ºÆ½ Á¤º¸ °ªÀ̶õ? ¹«¾ó±î¿ä?
¹Ù·Î ´ÙÀ½°ú °°Àº Á¤º¸°ªÀ» ÀÐ¾î ¿É´Ï´Ù.
1) x, y °¢ÃàÀÇ ÃÖ´ë ÃÖ¼Ò °ªÀÇ ¹üÀ§¿¡ ´ëÇÑ Á¤º¸
2) ÀԷ¿¡ ´ëÇÑ ½Ã°£ ¼³Á¤°ª, Áï ÀÏÁ¤ÇÑ ½Ã°£ ³½¿¡ µé¾î¿Â
Á¶À̽ºÆ½ÀÇ ÀÔ·ÂÀ» ó¸®Çϱâ À§Çؼ ¼³Á¤ÇÑ ½Ã°£¿¡ ´ëÇÑ
Á¤º¸
3) Á¶À̽ºÆ½ÀÇ Á¶Á¤¿¡ ´ëÇÑ Á¤º¸
4) Á¶À̽ºÆ½ ·¹Áö½ºÆ® Á¤º¸
JOYREGUSERVALUES uv;
DWORD type;
DWORD cb;
HKEY hkey;
cb = sizeof(uv);
if(RegOpenKey(HKEY_LOCAK_MACHINE, szRegCfgKey, &hkey))
{
if(!RegQueryValueEx(hkey, REGSTR_VAL_JOYUSERVALUES,
NULL, &type, (CONST LPBYTE)&uv, &cb))
{
}
}
À̿ܿ¡µµ ·¹Áö½ºÆ®¸®¸¦ ÀÌ¿äÇØ¼ ÀûÀýÇÏ°Ô Á¤º¸¸¦ º¯°æÇؼ
¿øÇÏ´Â Á¶À̽ºÆ½À» »ç¿ëÇØ¼ Á¤º¸µîÀ» º¯°æ »ç¿ëÇÒ¼ö ÀÖ½À
´Ï´Ù.
À̿ܿ¡µµ ´ÙÀÌ·ºÆ® Ç÷¹À̵µ Àִµ¥, ¿äÁò ±ÞºÎ»ó Çϰí ÀÖ´Â
¸Ó±× °ÔÀӵ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýµîÀÌ ´ÙÀÌ·ºÆ® Ç÷¹ÀÌ¿¡¼
Áö¿øÇÕ´Ï´Ù.
TCP/IP, IPXµîÀÇ ³×Æ®¿öÅ© »ó¿¡¼ º°µµÀÇ Áö½ÄÀ̳ª ¾î·Á¿ò
¾øÀÌ Åë½Å °ü·Ã ÇÁ·Î±×·¥À» ¸¸µé¼ö ÀÖ½À´Ï´Ù.
À̰Ϳ¡ ´ëÇØ¼´Â ´ÙÀ½ ±âȸ¿¡ °Å·ÐÇØº¸µµ·Ï ÇÏÁÒ~
»ç½Ç Á¶À̽ºÆ½¿¡ °üÇØ¼´Â ±×¸® ¸¹ÀÌ ¼³¸íÇÒ °ÍÀÌ ¾ø½À´Ï´Ù.
´Ü¼øÈ÷ ¾Õ¿¡¼ º» ³»¿ëÀÌ ÀüºÎ ÀÔ´Ï´Ù.
¿ø¼(¿Â¶óÀÎ ÇïÇÁ)¿¡¼ º¸¸é ¹«Ã´ ¸¹Àº ³»¿ëÀÇ ±ÛÀÌ ÀûÇô
Àִµ¥ °ÍÀ» Á¤¸®Çϸé ÀÌÁ¤µµ ¹Û¿¡´Â ³»¿ëÀÌ ¾ø±º¿ä~
À̰ÍÀ¸·Î Á¦ 8Àå ´ÙÀÌ·ºÆ® ÀÎDz(Á¶À̽ºÆ½ ó¸®)¿¡ ´ëÇØ ¹è¿ö
º¸¾Ò½À´Ï´Ù.
--------------------------------------------------------
¼º³²¿¡¼ Á¶¿ëÇÑ ÁÖ¸»À» º¸³»¸é¼ ±ÛÀ» Àû¾î º¸¾Ò½À´Ï´Ù.
- ÀÌÁذï (LeeChen) -
#1402 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] LeeChenÀÇ À©µµ¿ì¿ë ½´ÆÃ ¸¸µé±â #1 11/16 16:03 208 line
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen)ÀÔ´Ï´Ù.
////////////////////////////////////////////////////////////
±×µ¿¾È Àú¿¡°Ô ¾Æ³¦¾ø´Â ¼º¿øº¸³»ÁֽЏ¹Àº ÇÏÀÌÅÚ, õ¸®¾È,
³ª¿ìÄÄ °ÔÀÓ Á¦ÀÛÇÏ´Â ºÐµé²² Áø½ÉÀ¸·Î °¨»çµå¸®¸ç, °è¼ÓÇØ¼ ÀÌ
¾îÁö´Â °ÁÂÀÇ µ¶ÃË¿¡ ¹Ð·Á ÀÌ·¸°Ô ³»³õ°Ô µÇ¾ú½À´Ï´Ù. (^^;)
»ç½Ç 2D°ÔÀÓ °Á¸¦ 3ȸºÐÀ» ÀÛ¼ºÀ» ÇØ³õ¾Ò´Âµ¥ À©µµ¿ì95¶ó´Â ¿î
¿µÃ¼Á¦ÀÇ ¹ö±×·Î ÀÎÇØ ³¯¶ó °¡¹ö·Á¼ ºÎµæÀÌ ÇÏ°Ô °Á°¡ ´Ê¾î
Á³½À´Ï´Ù.
±×·³ 2D °ÔÀÓÀ» Á¦ÀÛÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
´ÙÀ½ ±Û¿¡ °üÇÑ ¸ðµç ÀúÀÛ±ÇÀº LeeChen¿¡°Ô ÀÖÀ¸¹Ç·Î º»ÀÎ Çã¶ô
¾øÀÌ »ó¾÷ÀûÀÎ ¸ñÀû¿¡ »ç¿ëµÇ°Å³ª ´Ù¸¥ °Ô½Ã¶õ¿¡ ±âÀçµÉ¼ö ¾ø½À
´Ï´Ù.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*** ¸ñ Â÷ ***
* 1. °³°ýÀûÀ¸·Î ¾Ë¾Æ º¸´Â 2D °ÔÀÓ
1. °³°ýÀûÀ¸·Î ¾Ë¾Æ º¸´Â 2D °ÔÀÓ
1-1. ±âȹ°ú ½Ã³ª¸®¿À Á¦ÀÛÀ» ÇØ¾ß ÇÑ´Ù.
°ÔÀÓÀ̶ó´Â °ÍÀÌ ±âȹÀ» Çϰí À̹ø¿¡ ¾î¶² ÃëÁö·Î Á¦ÀÛÀ» ÇÒ°Í
ÀÎÁö ±×¸®°í ¾î¶²½ÄÀÇ À帣¸¦ ¼³Á¤ÇÒÁö¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.
°ÔÀÓ Á¦À۽à º¸Åë 3°¡Áö°¡ ÀÏÄ¡ µÇ¾úÀ»¶§ ¿ì¼öÇÑ °ÔÀÓ¶Ç´Â ¶ß´Â
°ÔÀÓÀÌ µÈ´Ù°í Çϴµ¥, Çϳª´Â À¯ÀúµéÀÇ ¹Ù¶ó´Â °ÔÀÓÀÇ ½ºÅ¸ÀÏ
À» ¾ó¸¸Å ¸¸Á·Çϴ°¡? µÎ¹øÂ°´Â ÀüüÀûÀÎ °ÔÀÓÀÇ È帧ÀÌ Á¤È®
ÇØ¾ß ÇÑ´Ù. ¾î¼³Ç °ÔÀÓ ¸¸Å ½Ç¸Á°¨À» ÁÖ´Â °ÔÀÓÀº ¾øÀ» °ÍÀÌ
´Ù. ¼¼¹øÂ° ±âȹ·ÂÀÌ´Ù. ¾Æ¹«¸® ÁÁÀº ½Ã³ª¸®¿À¿Í Á¦ÀÛÀÚµéÀÌ
ÀÖ´Ù°í ÇØµµ Á¶¸®ÀÖ´Â ±âȹÀ» ÇÏÁö ¾ÊÀ¸¸é ¾ÈµÈ´Ù.
ÇöÀçÀÇ °ÔÀÓ Á¦ÀÛ»çµéÀÇ ¹®Á¦Áß¿¡ Çϳª°¡ ±âȹ·ÂÀÌ ¶³¾î Áø´Ù
´Â Á¡ÀÌ ¹«Ã´À̳ª ¾Æ½±´Ù. °æÁ¦ÀûÀÎ °ÍÀÌ µÞ¹Ùħ µÇ±â ¾î·Á¿î
±¹³» °ÔÀÓ ½ÃÀå¿¡¼ Àå±â°£ÀÇ ÅõÀÚ³ª Á¦ÀÛÀº °á±¹ º°º¼ÀÏ ¾ø
´Â °ÔÀÓÀÌ ³ª¿À°Ô µÈ´Ù. ÀÌ·± ¹®Á¦Á¡ÀÌ ¸¹Àº À¯Àú¿¡°Ô ¿Ü±¹°Ô
ÀÓÀ» ¼±È£ÇÏ°Ô ¸¸µå´Â °ÍÀ̶ó°í ÇÒ¼ö ÀÖ°Ú´Ù.
±×·¯¹Ç·Î ¾ÕÀ¸·Î °ÔÀÓÀ» Á¦ÀÛÇÏ´Â ÇÁ·Î±×·¡¸Ó³ª ±âȹÀÚµéÀº
À̰ÍÀ» Àß ¾Ë°í¼ Á¦Àۻ糪 °ÔÀÓ Á¦ÀÛ¿¡ Âü¿© ÇÏ´Â °ÍÀÌ ÁÁ
À» µí ½Í´Ù.
1-2. ½ÃÀ强 Á¶»ç
»ç½Ç ½ÃÀ强 Á¶»çµµ Áß¿äÇÑ ¸òÀ» Â÷Áö ÇÑ´Ù. ¿Ö³Ä Çϸé Á¦ÀÛ
ÇØ³õ°í ÆÈ¸®Áö ¾Ê´Â °ÔÀÓÀº ¾µ¸ð°¡ ¾øÁö ¾Ê´Â°¡?
±×·¸°Ô º¸¸é ÇöÀç ±¹³» ½ÃÀå¿¡¼ 70~80%°¡ ·ÑÇ÷¹À×À̳ª Àü·«
½Ã¹Ä·¹À̼ÇÀÌ ¾Æ´Ï°¡ ÇÑ´Ù. ±×¸®°í 10~20%°¡ ¾×¼Ç·ùÀ̰í...
±×·³ ÇÊÀÚ´Â ¾î¶² °ÍÀ» Á¦ÀÛÇÒ±î¿ä? (.... ~~!)
1-3. ¾î¶² 2D°ÔÀÓÀ» Á¦ÀÛÇÒ °ÍÀΰ¡?
Á¦ÀÛÇÏ´Â ÀÔÀå¿¡¼ ¼³¸íÀ» ÇÏ·Á´Âµ¥ ¹«Ã´À̳ª Èûµé±º¿ä?
»ç½Ç ÀÌ·¸ÄôÀú·¸Äô À̾߱â ÇØµµ Çö½ÇÀº Çö½ÇÀÌ´Ï....
°ÔÁ¦µ¿¿¡ ¸¹Àº °ø°³ °ÔÀÓÀÌ ½´ÆÃÀ̶óÁÒ? (ÀÚ·á½Ç µÚÁ® º¸ÀÚ~)
º...(ÀÚ·á½Ç µÚÁ® º¸°í ¿ÔÀ½~)
ÀÚ·á½Ç¿¡ º¸´Ï »ó¿ë°ÔÀÓÀÌ ¾Æ´ÑÀÌ»ó °ø°³¿ëÀº °ÅÀÇ ½´ÆÃ·ù°¡
ÇÇÆ¼±â´Â ÀüÀïÀ» Çϰí ÀÖ´õ±º¿ä~
¿äÁò ÇÏÀÌÅÚ °ÔÁ¦µ¿ÀÌ °ø°³ °ÔÀÓ ´ëȸ°¡ ÀÖÁÒ~ À̱ÛÀ» Àаí
Çѹø "³ªµµ µµÀüÇØ º¸ÀÚ!" ÇϽʽÿä~ µµ½º¿ëÀÌ ¾Æ´Ñ À©µµ¿ì
Áî ¿ëÀ¸·Î....
±×~~·¡¼...500¿øÀÔ´Ï´Ù°¡ ¾Æ´Ñ ½´ÆÃÀ» Á¦ÀÛÇØ º¸ÁÒ~ (^^;)
½´ÆÃÀ» ¾î¶»°Ô Á¦ÀÛÇÒ±î? (±ØÂ½~ ±ØÂ½~)
1-4. ÇÁ·Î±×·¥ÀûÀÎ °³°ýÀûÀÎ ¼³¸í
´ç¿¬ À̺κÐÀÌ ¼³¸íÀÌ ¾ÈµÇ¸é Á¦°¡ ÇÒ Çʿ䰡 ¾ø°ÚÁÒ~
À©µµ¿ìÁî¿ë °ÔÀÓÀ» Á¦ÀÛÇÏ´Â À§Çؼ´Â ´ÙÀ½°ú °°Àº Á¶°ÍÀÌ
ÇÊ¿ä ÇÕ´Ï´Ù.
1) ºñÁê¾ó ¾¾ ¹öÀü 5.0 »ç¿ë
(±×·¯³ª ¾ÈÁ¤¼ºÀº ¹öÀü 4.2°¡ ÁÁ¾Æ¼ 4.2¸¦ ±ÇÀåÇÔ)
2) ¸Þ¸ð¸®´Â ´ç¿¬ ÃÖ¼Ò »ç¾çÀÎ 32¸Þ°¡ÀÌ»óÀº µÇ¾î¾ß °ÚÁÒ~
3) Æ÷Åä¼¥ ¹öÀü 4.X (±×·¡ÇÈ ¼öÁ¤ ÀÛ¾÷½Ã ÇÊ¿ä)
( ¸¸¾à ¾ø´Ù¸é µð·°½º ÆäÀÎÅÍ¶óµµ ÇÊ¿äÇÔ )
4) ´ÙÀÌ·ºÆ®¿¢½º ¹öÀü 5.0 °³¹ßÀÚ¿ë
5) ±âŸ µîµî
ÀÚ~ ±×·³ ÀÌÁ¦ ¹«¾ó ´õ ¾Ë¾Æ º¸¾Æ¾ß ÇÒ±î¿ä?
¾øÀ¸¸é ¸»±¸.....
°£´ÜÇÑ È¾ ½ºÅ©·Ñ µÇ¸é¼ ½Î¿ì´Â ´Ü¼øÇÏ¸é¼ ´Ü±â°£¿¡ ¿¹
Á¦·Î Àû¿ëÇϱ⿡ Àû´çÇÑ ½ºÄÉÀÏ·Î Á¦ÀÛÇÑ´Ù.
1-5. °¢Á¾ ÀÚ·á ±¸Á¶ Á¤¸®
½´ÆÃ¿¡¼ »ç¿ëµÇ´Â ÀÚ·á ±¸Á¶¸¦ ¾Ë¾Æ º¸ÁÒ. ¸ðµç ½´ÆÃÀÌ
ÀÌ·¸°Ô Á¦À۵ȴٴ °ÍÀº ¾Æ´Õ´Ï´Ù. ´Ù¸¸ À̰÷¿¡¼ Á¦ÀÛ
ÇÏ´Â °ÔÀÓ¿¡ ÇÑÇÏ¿© ÀڷᱸÁ¶¸¦ Á¤¸® ÇÏ´Â °ÍÀÔ´Ï´Ù.
1) ŸÀÏÀÇ ±¸Á¶
[BYTE] ÃѰ¹¼ö // 255¸¦ ³ÑÁö ¾ÊÀ» µíÇÏ¿©
[BYTE] x Å©±â // Å©±â ¿ª½Ã ±×¸® Å©Áö ¾ÊÀ½
[BYTE] y Å©±â
[BYTE] ½ÇÁ¦ µ¥ÀÌŸµé // µ¥ÀÌŸ µ¢¾î¸® ??
2) ¸ÊÀÇ ±¸Á¶
[2 byte] x Å©±â // »çÀÌÁî°¡ ¾ó¸¸ÇÒÁö ¸ð¸§
[2 byte] y Å©±â
[ BYTE ] ½ÇÁ¦ µ¥ÀÌŸµé
3) ½ºÇÁ¶óÀÌÆ®ÀÇ ±¸Á¶
ŸÀÏ ±¸Á¶¿Í µ¿ÀÏ
ÀÚ·á ±¸Á¶´Â ±×¸® º¹ÀâÇÏÁö°¡ ¾ÊÁÒ? ^^;
ÀÏ´Ü À§ÀÇ 3°³ÀÇ ÀڷḸ Á¸Àç ÇÑ´Ù¸é ȸ鿡 Ãâ·ÂÇÏ´Â
°ÍÀº ¾î·ÆÁö ¾ÊÀº ¹®Á¦°ÚÁÒ?
1-6. »ç¿ëµÇ´Â ÇÔ¼öÀÇ Ç¥ÁØ
°´Ã¼ ÁöÇâÀ» »ç¿ëÇÑ °ÔÀÓÀ̱⿡ Ŭ·¡½º¶ó°í ¸í½ÃÇÏ´Â
°ÍÀÌ ´õ¿í ³ªÀ» Áöµµ ¸ð¸£°Ú±º¿ä~
ÀÏ´Ü Å¸ÀÏÀ» °ü¸®´Â ´õºí ¸µÅ©µå ¸®½ºÆ®·Î ÀÌ·ç¾îÁ®
ÀÖ½À´Ï´Ù. MFC¿¡ º¸¸é CObject¸¦ »ç¿ëÇÏ¸é ½±°Ô À̰Í
À» ±¸Çö ÇÒ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ À̰÷¿¡¼´Â Ãʺ¸ÀÚºÐ
À» À§ÇÑ °ÁÂÀ̹ǷΠC++ÀÇ ±âº»ÀûÀÎ ¿ÀÆÛ·£µå¸¦ ÀÌ¿ë
ÇÏ¿© ´õºí ¸µÅ© ±¸Á¶¸¦ ÀÛ¼ºÇϰڽÀ´Ï´Ù.
class TileClass :
{
public:
void Load(char *fname);
void Save(char *fname);
void Put() { Put(m_x, m_y); }
void Put(int x, int y);
void Set(int x, int y) { m_x=x; m_y=y; }
TileClass &operator + (TileClass &t);
TileClass *prev;
TileClass *next;
BYTE *data;
int m_x;
int m_y;
};
µ¥° ÀڷᱸÁ¶¸¦ ¹ÙÅÁÀ¸·Î ÇØ¼ Ŭ·¡½º°¡ Á¤Àǰ¡ µÇ
¾ú³ª ½Í±º¿ä? ÀÌÁ¤µµ¸é ¾µ¸¸ ÇѰ¡? ÇÏ¿©°¡ À§ÀÇ ³»¿ë
À» ÄẺ¾Æ ¸ÔµíÀÌ ¸¸µç °ÍÀ̶ó....
±×·³ À̹ø¿¡´Â ¸Ê¿¡ °ü·ÃµÈ Ŭ·¡½º¸¦ Á¤ÀÇ ÇØ º¸ÁÒ~
class MapClass :
{
public:
void Load(char *fname);
void Save(char *fname);
void Put() { Put(m_xPos, m_yPos); }
void Put(int x, int y);
BYTE Get() { Put(m_xPos, m_yPos); }
BYTE Get(int x, int y);
void Set(int x, int y) { m_xPos=x; m_yPos=y; }
BYTE *data;
int m_xLen;
int m_yLen;
int m_xPos;
int m_yPos;
};
ÀÚ..½ºÇÁ¶óÀÌÆ®´Â ¾î¶² ±¸Á¶Àϱî? ŸÀϰú °°¾Æ¿ä~
º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ ±¸Á¶°¡ ´Ùµé ºñ½Á ºñ½ÁÇÕ´Ï´Ù.
³ªÁß¿¡¶óµµ ¼Ò½º¸¦ º¸¸é ÀÌÇØ°¡ ½¬¿ö¾ßÁÒ~ ±×·¡¼
¼Ò½º´Â µÉ¼ö ÀÖÀ¸¸é ¾î·ÆÁö ¾Ê°Ô Á¦ÀÛÇØ¾ß °ÚÁÒ~
ÀÚ...¿À´ÃÀº À̸¸ÅÀÔ´Ï´Ù.
´õ±æ°Ô ¾²°í ½Í°í ´õ¿í ¾ËÂù ³»¿ëÀ¸·Î ¿©·¯ºÐ ¾Õ¿¡ ³»³õ
°í ½ÍÀºµ¥....ÀÌ·¸°Ô ½Ç·ÂÀÌ ¾ø´Ùº¸´Ï...^^;
¿À´ÃÀº ¼º³²ÀÌ ¾Æ´Ï°í ½Ã°ñÀÇ »ê¼Ó¿¡ ÀÖ´Â ÀÛÀº º°Àå¿¡¼
±ÛÀ» ¾¹´Ï´Ù. À̰÷¿¡¼µµ ³«¿±ÀÌ ¸¹ÀÌ ¶³¾îÁ³±º¿ä~
°Ü¿ïÀÌ ¼ºÅ ´Ù°¡ ¿À´Â ´À³¦À̱º¿ä~
°¨±â Á¶½ÉÇϼ¼¿ä~
- LeeChen -
#1516 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] LeeChen:MFC¿¡¼ °ÔÀÓÀ» ¸¸µéÀÚ 01 03/20 01:31 308 line
=================================================================
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen)ÀÔ´Ï´Ù.
=================================================================
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1 Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
-> 1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º ±¸¼º
¸¹Àº ºÐ²²¼ "¾ðÁ¦³ª °Á¸¦ Çϳª¿ä?"¶ó°í ¸¹Àº Áú¹®À» ÇØ¿À½Ã´õ±º¿ä~
»ç½Ç 2D °Á¸¦ ÇØ³õ°í º»ÀÇ¾Æ´Ï°Ô ÀÚ·á°¡ ³¯¶ó °¡´Â ¹Ù¶÷¿¡~
( Á¦ Çϵ尡 °£È¤ ¸ØÃߴ ¢À» Çϰŵç¿ä~ ±×·¯¸é ½Ã½ºÅÛÀÌ ´Ù¿îÀÌ....)
Áö³¹ø¿¡´Â ÁÖ·Î API¸¦ À§ÁÖ·Î ´ÙÀÌ·ºÆ® ¿¢½º¸¦ ¼³¸íÀ» ÇÑ°Í °°½À´Ï´Ù.
À̹ø¿¡´Â ¸¹Àº ·®ÀÇ °Á´ ¾ÈµÉ°Í °°Àºµ¥ °£´ÜÇÏ°Ô Áý°í ³Ñ¾î °¡·Á°í
±ÛÀ» ¾²±â·Î ÇÏ¿´½À´Ï´Ù. ±â´Ù·Á Áֽô ºÐµéµµ °è½Ã°í ÇØ¼...
Á¦°¡ ´ÙÀÌ·ºÆ® ¿¢½º¶ó´Â °ÍÀ» óÀ½ Á¢ÇѰÍÀº 2¹öÀü¶§ ¿´½À´Ï´Ù. ¹ú½á
2³âÀÌ»óÀÌ Áö³µ±º¿ä~ ±×ÈÄ·Î ¹öÀüÀÌ 3.0....5.2±îÁö ³ª¿Í Àִµ¥ À̹Ì
°ÔÀÓ °ü·ÃµÇ ·çƾÀº 3¹öÀü¿¡¼ È®°íÈ÷ ÀÚ¸®°¡ ÀâÈù °Í°°½À´Ï´Ù.
5.0Àº 3Â÷¿ø ±â´ÉÀ» Çâ»óÇÑÁ¡¿¡¼ Á¶±Ý ³ª¾Æ Á³°í~ 5.2´Â DVD±â´ÉÀ»
÷°¡Çß´Ù°í ÇÏ´Â ±º¿ä~
±×¸®°í ¾ÕÀ¸·Î ³ª¿Ã 6.0¿¡¼´Â ¾î¶»°Ô ³ª¿ÃÁö´Â ¸ð¸£Áö¸¸ 3Â÷¿ø ±â´ÉÀÌ
Opengl°ú È¥ÇÕÇüÅ·Π³ª¿Ã°Í °°´Ù´Â Àü¸ÁÀÌ ¸¹´õ±º¿ä~
Á¦°¡ º»°ÝÀûÀ¸·Î À̾߱â ÇÒ°Ç ÀÌ·± °ÑÄ¡ÀåÀÇ ±â´ÉÇâ»óÀÌ ¾Æ´Ñ ½Ç¼ÓÀÖ´Â
±â´É Çâ»óÀ» º¸ÀÚ¸é, »õ·Î¿î ÀÎÅÍÆäÀ̽º IDDVideoPortContainer,
DirectDrawColorControl,IDirectDrawVideoPort, ±×¸®°í
IDirectDrawSurface3Æ÷ÇÔ µÇ¾î ÀÖ°í, IDirectDrawSurface2°¡ º¸Ãæ °øÀ¯
µÇ¾î ÀÖ°í. ÁÖ¿äÇÑ °³¼±µÈ Á¡Àº ³ÐÀº Ç¥¸éÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.
»ç½Ç À̺κÐÀº Á¦°¡ ÀÎÅͳÝÀ» ÅëÇØ ¾òÀº ÀڷḦ¹ø¿ªÇؼ ¿Ã¸®·Á´Ù
ÀÌ·¸°Ô ´Ù½Ã ÆíÁýÇØ¼ ¿Ã¸³´Ï´Ù. °¢°¢À¸ ±â´ÉÀº ÀÌ¹Ì 5.0 ·¹ÆÛ·±½ºÀÇ
¼µÎ¿¡ ³ª¿À´Â °ÍÀε¥ ÀÚ¼¼ÇÑ °ÍÀº ·¹ÆÛ·±½º¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä~
(ÇØ¼®ÀÌ ¾ÈµÇ½Ã´Â ºÐÀº Àú¿¡°Ô Áú¹®À» Áּŵµ µË´Ï´Ù. )
Áö±Ý ÀÎÅͳÝÀ» ÅëÇØ °ÔÀÓ ÄÄÇ»ÅÍ µ¿ÇâÀ» »ìÆì º¸¸é 3Â÷¿øÀ» °¡Áö°í
Ä¡¿ÇÑ ÀüÀïÀ» Ä¡·ç°í ÀÖ´õ±º¿ä~ ƯÈ÷ ¿ÀÇÂÁö¿¤À̳Ä~ ´ÙÀÌ·ºÆ®¿¢½º³Ä~
ÀÇ µÎÁø¿µÀÌ Ä¡¿ÇÏ°í °£È¤ µ¶ÀÚÀûÀÎ ±×·¯³ª ±×¸® ÈûÀ» ¹ßÈÖÇÒ¼ö ¾ø´Â
µ¶Àڳ뼱À» Ãß±¸ÇÏ´Â ÆÀÀ̳ª ȸ»çµµ ÀÖ´õ±º¿ä~
¾î·°Å³ª 3Â÷¿ø¿¡¼ ¸¹ÀÌ »ç¿ëÇϰí ÀÖ´Â °ÍÀº ¿ÀÇÂÁö¿¤°ú ´ÙÀÌ·ºÆ® ¿¢½º
Àε¥ ¿ÀÇÂÁö¿¤Àº ÀÌ¹Ì ¸®´ª½º³ª À¯´Ð½º, ±×¸®°í ¼Ö¶ó¸®½º, ¿À¿¡½ºÅõ,
À©µµ¿ìÁî 95µîµî ¸¹Àº ¿î¿µÃ¼Á¦¿¡¼ »ç¿ëµÇ¾î ¿Ô°í ±â´É¶ÇÇÑ Æí¸®ÇϰÔ
µÇ¾î ÀÖ¾î ÇÔ¼ö ·¹ÆÛ·±½º¸¸À» °¡Áö°í 3Â÷¿ø °¨°¢ÀÌ ÀÖ´Â(°³³äÀÌ ÀâÇô
ÀÖ´Â) µ¶ÀÚ¶ó¸é ´©±¸³ª ±¸ÇöÇÒ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.
±×·± ¹Ý¸é ´ÙÀÌ·ºÆ® ¿¢½º´Â ºü¸£´Ù´Â °ÍÀ» Ãß±¸ÇÏÁö¸¸ ¿ö³« ¸¹Àº
º¯¼ö¿Í ÀÎÀÚ¿ÍÀÇ ÀüÀïÀ» ÇѹÙÅÁÄ¡·ç°í ³ÈÄ¿¡¾ß °¡´ÉÇÏ´Ï Á¶±Ý ¹ø°Å
·Ó´õ±º¿ä~
ÇÏÁö¸¸ ´ÙÀÌ·ºÆ® 3Â÷¿øÀ» °¢ÀÚ º»ÀÎÀÇ ±¸¹Ì¿¡ ¸Â°Ô Àß ±¸¼ºÇسõ°í
³ª¸§µ¥·Î ÀÎÅÍÆäÀ̽º¸¦ ±¸¼º¸¸ µÈ´Ù¸é ¿ÀÇÂÁö¿¤º¸´Ù Æí¸®ÇÏ°Ô ¾µ¼öµµ
ÀÖ°ÚÁÒ~ (À̰ÍÀº µ¶ÀÚÀÇ ¸ò!)
ÀÏ´Ü ¸¹Àº µ¶ºÐµéÀÌ MFC¸¦ µÎ·Á¿öÇϰí ÀÖ´Â °Í °°¾Æ ´ÙÀÌ·ºÆ®¿¢½º¸¦
¾î¶»°Ô Çϸé MFC¿Í ½±°Ô Á¢¸ñÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¸¦ 2Â÷¿ø ÇÁ·Î±×
·¥°ú 3Â÷¿ø ÇÁ·Î±×·¥À» °¢°¢ Á¦ÀÛÇÏ¸é¼ ¹è¿ö º¸µµ·Ï ÇÏÁÒ~
(¾à°£ ±ÛÀÌ ¾î»öÇÒ ¼öµµ Àִµ¥ ÀÚ·áÁß ¿ø¾î¸¦ ±×µ¥·Î ¹ø¿ªÇؼ ³ÖÀº
ºÎºÐµµ ÀÖ´Ùº¸´Ï Á¶±Ý ÀÌ»óÇÒ ¼öµµ Àִµ¥ Á¦°¡ ³ª¸§µ¥·Î Á¤¸®ÇÏ·Á°í
Çߴµ¥ ¾ÆÁ÷ ÀÚ·áµéÀÌ Á¤¸®°¡ ¾ÈµÇ¾î ÀÌ·¸°Ô ¼µÑ·¯ ÀÛ¼ºÇØ ¿Ã¸³´Ï´Ù.
)
PS. -------------------------------------------------------------
À̱ÛÀÇ ¸ðµç ÀúÀÛ±ÇÀº ÀÌÁذï(LeeChen)¿¡°Ô ÀÖÀ¸¸é º»ÀÎÀÇ Çã¶ô¾øÀÌ
ºÒ¹ýÀûÀ¸·Î µµ¿ëÇϰųª ´Ù¸¥ °÷¿¡ ±âÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Ã³À½ MFC
¸¦ ´Ù·ç´Â ºÐÀ̳ª DirectX¸¦ ±âº»ÀûÀ¸·Î ÇϽô ºÐÀÇ ´«³ôÀÌ¿¡ ¸ÂÃß¾î
ÀÛ¼ºµÇ¾î ÀÖÀ½À» ¹àÈû!(½Ç·ÂÀÌ ÁÁÀ¸½Å ºÐÀº ¾ÈÀо µÇ¿ä~ ^^;).
-----------------------------------------------------------------
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¸¦ À§ÁÖ·Î ÇÏ·Á°í ÇÕ´Ï´Ù. º¸´Ù °£ÆíÇϱ⠶§¹®ÀÌÁÒ~
MFC¸¦ ÀÌ¿ëÇØ ÀüüȸéÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¸ð»öÇØº¸°í ±×´Ù¸§
â¸ðµå¿¡¼ ÀÛ¾÷ÇÏ´Â ¹æ¹ýÀ» ¾Ë·Á µå¸®ÁÒ~
API¸¦ ¾²´Ù°¡ MFC¸¦ »ç¿ëÇØº¸¸é ÀÌ·¸°Ô Æí¸®ÇÑ °ÍÀ» ¸ô¶ú³ª ÇÒ
°Ì´Ï´Ù. µÎ¹ø´Ù½Ã´Â API¸¦ ¾È¾²Áö ¾ÊÀ»±î Çϳ׿ä~
Á¦2ÀÇ °Á¿¡¼´Â º»°ÝÀûÀÎ MFC¸¦ ÀÌ¿ëÇϵµ·Ï ÇÏÁÒ~
È帣´Â ¹°Àº ¸ØÃß°Ô ÇÒ¼ö ÀÖÁö¸¸
½Ã°£ÀÇ È帧Àº ´©±¸³ª
¸ØÃâ¼öµµ µ¹¸±¼öµµ ¾ø³×~
#1517 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] LeeChen:MFC¿¡¼ °ÔÀÓÀ» ¸¸µéÀÚ 02 03/20 01:32 332 line
=================================================================
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen)ÀÔ´Ï´Ù.
=================================================================
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º ±¸¼º
-> 2. ½ÇÁ¦ MFCÀÇ ¸Þ¼¼Áö ¸Ê ±¸¼º
¿À´ÃÀº MFCÀÇ ¸Þ¼¼Áö¸ÊÀ» ±¸¼ºÇÏ´Â ¹æ¹ý°ú DirectX ¿ÍÀÇ Á¢¸ñÀ» À̾߱â
ÇØº¸µµ·Ï ÇսôÙ. µÎ¹øÂ° ½Ã°£ÀÎ ¸¸Å ù¹øÂ°¶§º¸´Ù ½Ã°£Àû ¿©À¯¸¦ °¡
Áö°í °ÀǸ¦½á ³ª°¡µµ·Ï ÇϰڽÀ´Ï´Ù.
PS. -------------------------------------------------------------
À̱ÛÀÇ ¸ðµç ÀúÀÛ±ÇÀº ÀÌÁذï(LeeChen)¿¡°Ô ÀÖÀ¸¸é º»ÀÎÀÇ Çã¶ô¾øÀÌ
ºÒ¹ýÀûÀ¸·Î µµ¿ëÇϰųª ´Ù¸¥ °÷¿¡ ±âÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Ã³À½ 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Àå À©µµ¿ìÁî ¸ðµå¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¸µµ·Ï
ÇÏÁö¿ä~ Á¶±Ý º¹ÀâÇѵ¥ (¸Þ¼¼Áö°¡ ¸¹°Åµç¿ä~) ÇϳªÇϳª »ìÆì
º¸¸é¼ Á¦ÀÛÀ» ÇØº¸µµ·Ï ÇÏÁö¿ä~
-±¤°í-
¿©±â±îÁö Á¦1Àå¿¡ °ü·ÃµÈ ³»¿ëÀÇ ¼Ò½º¸¦ ÇÏÀÌÅÚ °ÔÁ¦µ¿ ÀÚ·á½Ç¿¡
¿Ã·Á ³õ¾Ò½À´Ï´Ù. ±âº»ÀûÀÎ ´ÙÀÌ·ºÆ® °ü·Ã ³»¿ëº¸´Ù MFC¿¡ ÁßÁ¡
ó¸® ·çƾÀ» »ìÆì º¸½Ã±â ¹Ù¶ø´Ï´Ù.
#1518 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] LeeChen:MFC¿¡¼ °ÔÀÓÀ» ¸¸µéÀÚ 03 03/20 02:45 192 line
=================================================================
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen)ÀÔ´Ï´Ù.
=================================================================
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º ±¸¼º
2. ½ÇÁ¦ MFCÀÇ ¸Þ¼¼Áö ¸Ê ±¸¼º
Á¦ 2Àå MFC·Î ±¸ÇöÇÏ´Â À©µµ¿ì ¸ðµå ó¸® ¹æ¹ý
-> 1. MFCÀÇ Æ¯Â¡°ú ¸Þ¼¼Áö ±¸Á¶
¹ú½á 3¹øÂ° °ÀǸ¦ ÁغñÇØ¾ß ÇÏ´Â ½Ã°£ÀÌ µÇ¾ú±º¿ä. ¸Å¹ø °Á¸¦Áغñ
ÇÏ¸é¼ ¹«Ã´À̳ª ±äÀåµÇ°í °ÆÁ¤ÀÌ µË´Ï´Ù. ¿Ö³Ä±¸¿ä? ¾î¶»°Ô ÇÏ¸é º¸
´Ù ½±°Ô µ¶Àںе鲲 ÀÌÇØ¸¦ ½ÃÄѵ帱±î ½ÍÀº ¸¶À½¿¡... ^^;
À̹ø ½Ã°£ºÎÅÍ´Â ´ÙÀÌ·ºÆ® ¿¢½º¸¦ ÀÌ¿ëÇØ ¸Ê¿¡µðÅͳª ½ºÇÁ¶óÀÌÆ® µ¿ÀÛ
ÅøÀ» Á¦ÀÛÇÒ¼ö ÀÖ´Â ±â¹ÝÀ» ´ÙÁö±â À§ÇÏ¿© MFC¸¦ ÀÌ¿ëÇÑ À©µµ¿ìÁî ¸ð
µå¿ëÀ¸·Î °øºÎÇϵµ·Ï ÇսôÙ.
PS. -------------------------------------------------------------
À̱ÛÀÇ ¸ðµç ÀúÀÛ±ÇÀº ÀÌÁذï(LeeChen)¿¡°Ô ÀÖÀ¸¸é º»ÀÎÀÇ Çã¶ô¾øÀÌ
ºÒ¹ýÀûÀ¸·Î µµ¿ëÇϰųª ´Ù¸¥ °÷¿¡ ±âÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Ã³À½ MFC
¸¦ ´Ù·ç´Â ºÐÀ̳ª DirectX¸¦ ±âº»ÀûÀ¸·Î ÇϽô ºÐÀÇ ´«³ôÀÌ¿¡ ¸ÂÃß¾î
ÀÛ¼ºµÇ¾î ÀÖÀ½À» ¹àÈû!(½Ç·ÂÀÌ ÁÁÀ¸½Å ºÐÀº ¾ÈÀо µÇ¿ä~ ^^;).
-----------------------------------------------------------------
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ÀÇ Àб⠱¦ÂúÀº Ã¥À» ÀÐ¾î º¸½Ã
¸é ÀÚ¼¼È÷ ³ª¿É´Ï´Ù.
=================================================================
»êÀ̶ó Çϸé....
»êÀº ¾î¸±Àû Ä£±¸ ¿´Áö.
°¡¸£Ä§À» ÁÖ´Â ¾Æ¹öÁö¿´Áö.
¾Æ´ÁÇÔÀ» ÁÖ´Â ¾î¸Ó´Ï¿´Áö.
¶°³¯¶§±îÁö ³ª¿Í ÇÔ²² ÇßÁö.
Ç×»ó ±×ÀÚ¸®¿¡ º¯ÇÔ¾øÀÌ ÀÖ¾úÁö.
³ª¿¡°Ô ¾ðÁ¦µç ã¾Æ¿À¶ó ÇÏ¿´Áö.
¼¼»óÀº ¹«Ã´À̳ª Èû°Ü¿üÁö.
°¡²ûÀº ¹ÝÇ×°ú ÁÂÀýµµ ÇßÁö.
À̱æ¼ö ¾ø´Â ¼¼»óÀ» ¿ø¸Áµµ ÇßÁö.
»ì¾Æ°¡´Â µ¿¾È ÀØ°í »ì¾ÒÁö.
Ȧ·Î µÈ´Ù´Â ½½ÇÄ¿¡ °¡²û ã±äÇßÁö.
¼¼¿ùÀº È帣´Â À¯¼ö¶ó ÇßÁö.
¸Á°í¿¡ »êÀÇ Ç°¿¡ ¾È±â¾úÁö.
»êÀº ¾Æ¹«¸» ¾øÀÌ ³ª¸¦ ¹Ý°åÁö.
»êÀÇ Ç°Àº ¹«Ã´À̳ª µû¶æÇßÁö.
¾î¸±Àû ÀØÃÄÁø Á¤°Ü¿òÀÌ¿´Áö.
¼¼¿ù¿¡ ¹Ù·£ ¾ÆÇ°µéÀÌ ³ì¾Æ ³»·ÈÁö.
´õÀÌ»ó ¶°³ªÁö ¾Ê°Ú´Ù ÇßÁö.
±×¸®°í ³ª´Â ÇѾøÀÌ ¿ï¾úÁö.
ÇÑÆò»ý ±×¸®¿öÇÏ´ø »êÀÇ Ç°¿¡¼
- LeeChen -
#1519 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] LeeChen:MFC¿¡¼ °ÔÀÓÀ» ¸¸µéÀÚ 04 03/23 08:51 298 line
=================================================================
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen)ÀÔ´Ï´Ù.
=================================================================
°ÀÇ ÁÖÁ¦ : DirectX¸¦ MFC¿¡¼ »ç¿ëÇÏÀÚ~
Á¦ 1Àå MFC·Î ±¸ÇöÇÏ´Â Ç®½ºÅ©¸° ó¸® ¹æ¹ý
1. DirectXÀÇ Æò¸é ±¸Á¶¿Í ±âº» Ŭ·¡½º ±¸¼º
2. ½ÇÁ¦ MFCÀÇ ¸Þ¼¼Áö ¸Ê ±¸¼º
Á¦ 2Àå MFC·Î ±¸ÇöÇÏ´Â À©µµ¿ì ¸ðµå ó¸® ¹æ¹ý
1. MFCÀÇ Æ¯Â¡°ú ¸Þ¼¼Áö ±¸Á¶
2. DirectX »ç¿ë À§Ä¡¿Í ÀüüÀûÀÎ ÇÁ·Î±×·¥
¿¡±¸±¸....4¹øÂ° ¸¶Áö¸· ±ÛÀ» ½á¾ß Çϴµ¥ ÀÌ°É ±ô¹ÚÀØ°í ´Ù¸¥ ÀÏÀ»
ÇÏ´Ùº¸´Ï...
ÀÎÅͳݿ¡ µ¹¾Æ ´Ù´Ï´Ù º¸¸é Àú¿¡ ±ÛÀÌ À̰÷Àú°÷¿¡ ÀÖ´õ±º¿ä~ ^^;
¸¹ÀÌ Àоî ÁÖ½Ã°í °øºÎÇϽô ºÐµé²² °¨»çµå¸®¸ç, ¾ÕÀ¸·Î ´õ¿í ´Ù¾ç
ÇÑ ÁÖÁ¦·Î °Á Ȱµ¿À» ÇÒ±î ÇÕ´Ï´Ù.
Áö±Ý ÀÛ¾÷(¸·³ëµ¿)ÇÏ´Ù°¡ ³¯»õ°í ±ÛÀÌ ½áÁú·Á³ª ½Í³×¿ä?
PS. -------------------------------------------------------------
À̱ÛÀÇ ¸ðµç ÀúÀÛ±ÇÀº ÀÌÁذï(LeeChen)¿¡°Ô ÀÖÀ¸¸é º»ÀÎÀÇ Çã¶ô¾øÀÌ
ºÒ¹ýÀûÀ¸·Î µµ¿ëÇϰųª ´Ù¸¥ °÷¿¡ ±âÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Ã³À½ MFC
¸¦ ´Ù·ç´Â ºÐÀ̳ª DirectX¸¦ ±âº»ÀûÀ¸·Î ÇϽô ºÐÀÇ ´«³ôÀÌ¿¡ ¸ÂÃß¾î
ÀÛ¼ºµÇ¾î ÀÖÀ½À» ¹àÈû!(½Ç·ÂÀÌ ÁÁÀ¸½Å ºÐÀº ¾ÈÀо µÇ¿ä~ ^^;).
-----------------------------------------------------------------
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Â÷¿ø À½ÇâÈ¿°ú ó¸®
¹æ¹ý, ±âŸ Á¦°¡ °¡Áö°í ÀÖ´Â Á¤º¸¸¦ ±â¼úÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
ÀÌ¹Ì ¾Ë°í °è½Ã´Â ºÐµéÀº ¾Æ¹«°Íµµ ¾Æ´ÏÁö¸¸ óÀ½ °øºÎÇϰųª Á¢ÇÏ´Â
ºÐµé¿¡°Ô ¸¶¶¥ÇÑ ÀÚ·á°¡ ¾ø¾î °í»ýÇϽô ºÐµéÀ» »ý°¢ÇÏ¸é º° µµ¿ò
¾ÈµÇ´Â ±ÛÀ» Àû¾î º¸¾Ò½À´Ï´Ù. ( ?? ¾î»öÇÑ ¹®±¸.... )
=================================================================
98. 3. 23 ¾ÆÄ§¿¡...
Ãʾ߿¡¼
¼Ò¸ÁÇÕ´Ï´Ù.
¸ðµçÀ̵éÀÌ Àß µÇ±â¸¦ ¼Ò¸ÁÇÕ´Ï´Ù.
³ª´Â ¾î·Æ°í Èûµé¾îµµ Àß µÇ±â¸¦ ¼Ò¸ÁÇÕ´Ï´Ù.
±âµµÇÕ´Ï´Ù.
¸ðµç À̵éÀÌ °íÅë ¾ø±æ ±âµµÇÕ´Ï´Ù.
³ª´Â Èûµé¾î ÇÏÁö¸¸ ±×µéÀº Ç×»ó ¿ô±â¸¦ ±âµµÇÕ´Ï´Ù.
»ç¶ûÇÕ´Ï´Ù.
³»°¡ ¾Æ´Â ¸ðµç À̵éÀ» »ç¶ûÇÕ´Ï´Ù.
³ª¸¦ »ç¶û¾Ê´Â´Ù ÇØµµ ³ª´Â ±×µéÀ» »ç¶ûÇÕ´Ï´Ù.
- LeeChen -
#1521 ¼¼ºÄ¥ (ssc7 )
[°ÁÂ] LeeChen:DX¿ë ½ºÇÁ¶óÀÌÆ® °ü¸®ÀÚ 03/26 03:22 298 line
=================================================================
¾È³çÇϼ¼¿ä~ ÀÌÁذï(LeeChen)ÀÔ´Ï´Ù.
=================================================================
º½ÇÞ»ìÀÌ ¹«Ã´À̳ª ÁÁ°Ô ´À²¸Áö´Â ÇÏ·ç¿´ÁÒ? ¿À´ÃÀº ½ºÇÁ¶óÀÌÆ® °ü¸®
¿¡ °üÇÑ Áú¹®À» Àú¿¡°Ô ¸¹À̵é Çϼż ÀÌ·¸°Ô ½ºÇÁ¶óÀÌÆ® °ü·ÃµÈ ³»¿ë
À¸·Î ´Ù½Ã ±ÛÀ» ¾¹´Ï´Ù.
½ºÇÁ¶óÀÌÆ® °ü¸® ¹æ¹ý¿¡´Â ¿©·¯°¡Áö°¡ Àִµ¥ ±×Áß¿¡¼ ÇѰ¡Áö ¹æ¹ý
À» ´Ù·çµµ·Ï ÇϰڽÀ´Ï´Ù. ¾ÕÀ¸·Î ¸îȸ·Î ´Ù·ç°Ô µÉÁö´Â ¸ð¸£Áö¸¸....
ÀÏ´Ü ¿À´ÃÀº °³°ýÀûÀÎ ³»¿ëÀ» ´Ù·çµµ·Ï ÇÏÁÒ~
PS. -------------------------------------------------------------
À̱ÛÀÇ ¸ðµç ÀúÀÛ±ÇÀº ÀÌÁذï(LeeChen)¿¡°Ô ÀÖÀ¸¸é º»ÀÎÀÇ Çã¶ô¾øÀÌ
ºÒ¹ýÀûÀ¸·Î µµ¿ëÇϰųª ´Ù¸¥ °÷¿¡ ±âÀçÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Ã³À½ MFC
¸¦ ´Ù·ç´Â ºÐÀ̳ª DirectX¸¦ ±âº»ÀûÀ¸·Î ÇϽô ºÐÀÇ ´«³ôÀÌ¿¡ ¸ÂÃß¾î
ÀÛ¼ºµÇ¾î ÀÖÀ½À» ¹àÈû!(½Ç·ÂÀÌ ÁÁÀ¸½Å ºÐÀº ¾ÈÀо µÇ¿ä~ ^^;).
-----------------------------------------------------------------
°ÀÇ ÁÖÁ¦ : DirectX¿ë ½ºÇÁ¶óÀÌÆ® °ü¸®ÀÚ¸¦ ¸¸µéÀÚ~
°ÀÇ¿¡ ¾Õ¼ ¾ÕÀ¸·Î ´Ù·ê ³»¿ëÀº Æ®·¢À̳ª Çʵå°ÔÀÓÀ» Á¦ÀÛÇÏ±æ ¿øÇÏ´Â
ºÐµéÀ» ´ë»óÀ¸·Î ´Ù·ç°í ÀÖ½À´Ï´Ù. ±×¸®°í ÁÖµÈ ³»¿ëÀº ij¸¯Å͸¦ ¿òÁ÷
À̰í Á¡ÇÁÇÏ°í ´Þ¸®´Â µîµîÀÇ ÇൿÀ» ´Ù·ç°Ô µÉ°ÍÀÔ´Ï´Ù.
´ÙÀ½Àº ½ºÇÁ¶óÀÌÆ® °ü¸®ÀÚ¸¦ Á¦ÀÛÇÏ¸é¼ µé¾î°¥ ±â´É°ú »ç¿ë¹æ¹ýÀ»
Àû¾î ³õ¾Ò½À´Ï´Ù.
1. À¯Àú°¡ ¼±ÅÃµÈ Å°°ª¿¡ µû¶ó ´Þ¸®°Å³ª ¶Ù°Ô ÇÒ¼ö ÀÖ´Ù.
2. ¾î¶² »óÅ¿¡ µû¶ó ÇÁ·¹ÀÓ º¸Á¸À» °áÁ¤ÇÏ°Ô µÈ´Ù.
3. ¿øÇÏ´Â Å©±âÀÇ À̹ÌÁö¸¦ ÁغñÇÑ´Ù. ¿©±â¼ »ç¿ëÇÑ À̹ÌÁö´Â
3D Studio·Î Á¦ÀÛµÈ ´Þ¸®´Â ³²ÀÚÀÇ ·»´õ¸µµÈ, °¢°¢ÀÇ ¹æÇ⸶´Ù
8ÇÁ·¹ÀÓÀÇ ±×¸²ÀÌ´Ù.
4. À¯Àú°¡ ¿ÀºêÁ§µå¸¦ »ý¼ºÇÒ¶§´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
// ´Þ¸®´Â »ç¶÷À» °¡Á®¿À±â À§ÇÑ ÀûÀýÇÑ Å©±â
// 1 frame=1 or more view positions
Frame uomocorsa_frame[8]={
Frame(100,100,0,10),Frame(100,100,200,10),
Frame(100,100,400,10),Frame(100,100,600,10),
Frame(100,100,800,10),Frame(100,100,1000,10),
Frame(100,100,1200,10),Frame(100,100,1400,10)
};
// Sequence of indexes to be swept for animation
DWORD uomocorsa_index[8]={0,1,2,3,4,5,6,7};
// Sequence of delays for any frame
DWORD uomocorsa_delay[8]={50,50,50,50,50,50,50,50};
// Build one state, that of Running
State
uomocorsa(uomocorsa_frame,uomocorsa_index,uomocorsa_delay,7);
// Build a Sprite, able only to run...
CSprite uomo(&uomocorsa);
¼³¸í :
ÇÁ·¡ÀÓÀ» uomocorsa_frame[]¶ó°í ¹è¿·Î Àâ½À´Ï´Ù. ÇØ´çÇÁ·¡ÀÓÀÇ
¿ä¼Ò¸¦ Frame(w,h,ypos,pics_per_row) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ä¿öÁý´Ï´Ù.
¿©±â¼ w,h´Â ½ºÇÁ¶óÀÌÆ®ÀÇ Å©±âÀ̸ç, ypos´Â ¼Ò½º ºñÆ®¸ÊÀÇ yÀ§Ä¡¸¦
³ªÅ¸³À´Ï´Ù. pics_per_row´Â °¡·Î·Î ±×¸²ÀÌ ¸î°³°¡ Àִ°¡¸¦ ³ªÅ¸³À
´Ï´Ù.
uomocorsa_index[] ¿Í uomocorsa_delay[] ´Â °¢°¢ÀÇ ÇÁ·¡ÀÓÀÇ ¹øÈ£
¿Í ÇÁ·¡ÀÓÀ» ´ã¾ÆµÎ´Â ¹è¿º¯¼öÀÔ´Ï´Ï´Ù. ´Þ¸®´Â ÇÁ·¡ÀÓ¿¡ ÇØ´çÇÏ
´Â °¢°¢ÀÇ ÇÁ·¡ÀÓ¸¶´Ù ½Ã°£ÀÌ ÀÖ°ÚÁÒ~ ¿©±â¼´Â 50À̶ó´Â °ªÀ¸·Î ÅëÀÏ
ÇØµÎ¾ú½À´Ï´Ù.
¿©±â±îÁö°¡ CSprite¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ À̾߱⸦ Çß½À´Ï´Ù.
(¿ì° ³»¿ëÀÌ ¼Åõ¸¥ ³»¿ëÀÌ¿´½À´Ï´Ù.~)
5. ±×·¸´Ù¸é À̹ø¿¡´Â À¯Àú°¡ ±×¸²À» Àоî¿Í¾ß Çϴµ¥ ¾î¶»°Ô Çϸé
µÉ±î¿ä?
// Load pinkman bitmap
lpDDSUomo=DDLoadBitmap(lpDD,"¿¹Á¦.bmp",0,0);
if (lpDDSUomo==NULL)
return InitFail(hwnd,"DDLoadBitmap UomoRosa");
// Load surf.2
lpDDS2=DDLoadBitmap(lpDD,"¹è°æ.bmp",0,0);
if (lpDDS2==NULL) return InitFail(hwnd,"DDLoadBitmap 2");
ddck.dwColorSpaceLowValue=255;
ddck.dwColorSpaceLowValue=0;
ddrval=lpDDSUomo->SetColorKey(DDCKEY_SRCBLT,&ddck);
À̺κÐÀº ¾îµð¼ ¸¹ÀÌ º¸´ø ³»¿ëÀε¥...^^;
¿¹~ ¹Ù·Î ´ÙÀÌ·ºÆ® ¾×½ºÀÇ ¼ÀÇÃÁß¿¡ ÀÚ¼¼È÷ »ìÆì º¸½Ã¸é ºñ½ÁÇÑ ³»¿ë
ÀÌ ÀÖ´Â ºÎºÐÀÌ ÀÖÀ» °Ì´Ï´Ù.
À§¿¡¼ º¸¸é 255¹ø»öÀ» Åõ¸í Ä÷¯·Î Àâ¾Æ¼ »ç¿ëÇÏ´Â °ÍÀ» ¾Ë¼ö ÀÖÁÒ
6.À̹ø¿¡´Â ½ºÇÁ¶óÀÌÆ®¸¦ »ý¼ºÇϸé
// INIT Sprite
for (i=0;i<8;i++) uomocorsa_frame[i].AssignSrcSurf(lpDDSUomo);
uomo.AssignDestSurf(lpDDS3);
uomo.AssignBackSurf(lpDDS2);
uomo.xpos=320;
uomo.ypos=240;
8°³ÀÇ ÇÁ·¡ÀÓ¿¡ ÇØ´çÇÏ´Â ½ºÇÁ¶óÀÌÆ®¸¦ ÀÏ´ÜÀº µÚÀÇ ¼ÆäÀ̽º¿¡¼ ´ã
¾Æ µÎ°í ÇØ´çÁÂÇ¥¸¦ Á¤ÀÇÇÏ°í ´ÜÀÏ ÇÁ·¡ÀÓÀ¸·Î µ¹¾Æ°¡´Â ¿¹Á¦¶ó ÀÌ·¸
°Ô Çß½À´Ï´Ù. º¹ÀâÇÑ ´õºÒÀÌ»óÀÇ ÇÁ·¡ÀÓÀÌ µ¹¾Æ°¡¸é Á¶±Ý Äڵ带 ¹Ù
²Ù¾î¾ß °ÚÁö¿ä~
7. ÀÌÁ¦ ³²Àº °ÍÀº Âï´Â °Í!
// UPDATE & DRAW
uomo.Update();
uomo.Draw();
// Do stuff like flipping surface etc
// Replace BACKGROUNDS
ddrval=uomo.ReplaceBack();
8. ½Ã°£¿¡ µû¶ó ÀûÀýÇÏ°Ô Âï¾îÁÖ¸ç, xpos,ypos ¿Í currviewindex
¿¡ ÇØ´çÇÏ´Â °ª¿¡ µû¶ó °ü¸®¸¦ ÇØÁØ´Ù. (...--; Á¤¸» ¾î»öÇÏ´Ù~)
ÇÏÇÏ~ À̰Å~ ³»¿ëÀÌ ÀÌ»óÇÏ°Ô µ¹¾Æ°¡´Â µíÇÑ ³»¿ëÀÌÁÒ?
ÀÐ°í ³ªµµ ¿ì°? ³²´Â °ÍÀº ¾øÀ»±î? Àúµµ ¾²¸é¼ ³²´Â ³»¿ë¾ø½À´Ï´Ù.
±×·¸´Ù¸é ¾îµð ¼Ò½º¸¦ ºÐ¼®ÇØ º¸µµ·Ï ÇÏÁÒ~
class Frame´Â ´Ü¼øÈ÷ °¢°¢ÀÇ ÇÁ·¡ÀÓÀÇ À§Ä¡³ª Å©±â¿¡ ÇØ´çÇÏ´Â
ÇÁ·¡ÀÓ Á¤º¸¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
class Frame
{
friend class State;
friend class CSprite;
public:
Frame(DWORD,DWORD,DWORD,DWORD);
~Frame();
void AssignSrcSurf(LPDIRECTDRAWSURFACE);
private:
DWORD width,height,bmpypos,numperrow;
LPDIRECTDRAWSURFACE srcsurf;
};
¶ÇÇϳª Ãß°¡ÇÏÀÚ¸é ÇØ´ç ÇÁ·¡ÀÓÀÇ Æò¸éµµ °¡Áö°í ÀÖ¾î¾ß °ÚÁö¿ä~
ÀÌ Å¬·¡½º´Â ÇϳªÀÇ ½ºÇÁ¶óÀÌÆ®ÀÇ »óŰª¿¡ ¿µÇâÀ» ÁÖ¸ç, ½ÇÁ¦·Î
ÂïÈ÷´Â ºÎºÐ¿¡µµ ¿µÇâÀ» ÁÖÁÒ~
½ºÇÁ¶óÀÌÆ®°¡ ÂïÈ÷¸é¼ °¡Áö°í ÀÖ¾î¾ß ÇÒ Á¤º¸´Â °ú¿¬ ¹«¾ó±î¿ä? º¸Åë »óŸ¦
³ªÅ³»´Â Á¤º¸¶ó°í Çϴµ¥ ¾ÆÁÖ °£´ÜÇÏ°Ô ÇöÀç ÀÚ±âÀÚ½ÅÀÌ ¾î¶² Á¤º¸ÀÎÁö Áï,
¸î¹øÂ° ÇÁ·¡ÀÓÀÎÁö ¹øÈ£(¶Ç´Â À̸§)ÀÌ ÀÖ¾î¾ß °ºÁö¿ä~ ±×¸®°í ¾ó¸¶µ¿¾È »ì¾Æ
ÀÖ¾î¾ß ÇÏ´ÂÁö ½Ã°£À» ¾Ë°í ÀÖ¾î¾ß °ÚÁö¿ä~ ±×¸®°í ÃÖ´ë ÀÚ½ÅÀÌ º¸À¯ÇÑ ÇÁ·¡
ÀÓÀÇ °¹¼ö´Â ¸î°³ÀÎÁö´Â ¾Ë°í ÀÖ¾î¾ß °ÚÁö¿ä~
class State
{
friend class CSprite;
public:
State(Frame*,DWORD*,DWORD*,DWORD);
~State();
private:
DWORD *frindex;
DWORD *frdelay;
DWORD maxindex;
Frame *frarr;
};
ÀÌŬ·¡½º´Â ¾ÕÀ¸·Î ³ª¿Ã ½ºÇÁ¶óÀÌÆ® Ŭ·¡½º¿¡ ¿µÇâÀ» Áִ Ŭ·¡½º ÀÔ´Ï´Ù. ¹Ù·Î
¾Õ¼ À̾߱âÇÑ ³»¿ëÀÇ °ªµéÀ» Âï´Â ·çƾ¿¡ ¿µÇâÀ» Á־ƾßÁÒ~ °¡Áö°í ÀÖ´Â ´Ù°í
º¸µÎ ÇØ°áµÇ´Â °ÍÀº ¾Æ´Ï°ÚÁÒ~
class CSprite
{
public:
CSprite(State*);
~CSprite();
HRESULT Draw();
void AssignDestSurf(LPDIRECTDRAWSURFACE);
void Update();
void AssignBackSurf(LPDIRECTDRAWSURFACE);
HRESULT ReplaceBack();
DWORD xpos,ypos;
DWORD currstate;
int currviewindex;
float scale;
float timescale;
private:
DWORD laptime;
DWORD currindex;
State *states;
LPDIRECTDRAWSURFACE destsurf,backsurf;
};
±×·¸°Ôº¹ÀâÇÑ Å¬·¡½ºµéÀÌ ¾Æ´Ï¶ó ÀÌÇØÇϴµ¥ ¾î·Á¿òÀÌ ¾øÀ» °Å¶ó
»ý°¢µË´Ï´Ù. ±×·³ ´ÙÀ½ Äڵ带 º¸ÁÒ~ ÄÚµå¶ó°í ÇØ¼ º¹ÀâÇÑ ³»¿ëÀº
¾ø½À´Ï´Ù.
ÁÖµÈ ºÎºÐ¸¸ º¸ÀÚ¸é ¸¹Àº ±×¸²ÀÌ ÀÖ´Â °Í¿¡¼ °¡Áö°í ¿À´Â ºÎºÐÀ»
»ìÆìº¸ÀÚ¸é
HRESULT CSprite::ReplaceBack()
{
RECT dr;
State *ps=&(states[currstate]);
// Çö ½ºÇÁ¶óÀÌÆ®ÀÇ »óŸ¦ ÀÐ¾î ¿À°í
Frame *pf=&(ps->frarr[ps->frindex[currindex]]);
// °¢°¢ÀÇ ÇÁ·¡ÀÓ¿¡ ´ëÇÑ ¹øÈ£¸¦ ÆÄ¾ÇÇϰí
dr.left=xpos; dr.top=ypos;
dr.right=xpos+(pf->width)-1;
dr.bottom=ypos+(pf->height)-1;
return destsurf->Blt(&dr,backsurf,&dr,0,NULL);
}
UpdateÇÔ¼ö´Â ÁÖ·Î ÇØ´ç ÇÁ·¡ÀÓÀÌ ½Ã°£ÀÌ À¯ÁöµÇ¾ú´Â°¡?¸¦
ÆÄ¾ÇÇØ¼ ´ÙÀ½ ÇÁ·¡ÀÓÀÇ ±×¸²À» ã¾Æ ÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù.
¾Ë°í¸®ÁòÀº ¾ÆÁÖ °£´ÜÇÏ°Ô µÇ¾î ÀÖÀ¸´Ï »ìÆì º¸¼¼¿ä~
void CSprite::Update()
{
State *ps=&(states[currstate]);
if (timescale*(GetTickCount()-laptime) > ps->frdelay[currindex])
{
currindex++;
if (currindex>ps->maxindex) currindex=0;
laptime=GetTickCount();
}
}
À§ÀÇ ÇÔ¼ö·Î ȸ鿡 ÂïÈú ½ºÇÁ¶óÀÌÆ®ÀÇ ÇൿÀÌ °»½ÅµÇ¾ú´Ù¸é
ȸ鿡Âï¾îÁÖ¾î¾ß °ÚÁö¿ä~
HRESULT CSprite::Draw()
{
LPDIRECTDRAWSURFACE ss;
RECT sr,dr;
// Çö Á¤º¸¸¦ Àоî ã¾Æ ÁØ´Ù.
State *ps=&(states[currstate]);
Frame *pf=&(ps->frarr[ps->frindex[currindex]]);
// ÇØ´çÇÁ·¡ÀÓÀÇ ½ÇÁ¦ µ¥ÀÌŸ(±×¸²)À» ã¾Æ ÁØ´Ù.
ss=pf->srcsurf;
// ÇÁ·¡ÀÓÀÇ Å©±â¸¦ ÆÄ¾ÇÇØ¼
dr.left=xpos; dr.top=ypos;
dr.right=xpos+(pf->width)-1;
dr.bottom=ypos+(pf->height)-1;
sr.left=(currviewindex % (pf->numperrow))*pf->width;
sr.top=pf->bmpypos+(currviewindex / (pf->numperrow))*pf->height;
sr.right=sr.left+pf->width-1;
sr.bottom=sr.top+pf->height-1;
return destsurf->Blt(&dr,ss,&sr,DDBLT_WAIT | DDBLT_KEYSRC,NULL);
// ÂïÀÚ~
}
¿Í¿ì..¹¹~ ±×°Íµµ ¾Æ¹«°Íµµ ¾Æ´ÏÁÒ~ °ü¸®ÀÚ´Ï ¿£ÁøÀÌ´Ï ÇØºÁ¾ß º°°Å
¾ø¾î¿ä~ º¹ÀâÇÏ°Ô ¸¸µå´Â »ç¶÷ÀÌ ÀÌ»óÇѰſä~ °£´ÜÇÏ°í ´Ü¼øÇÏ°Ô Á¦ÀÛ
ÇØ¼ ¹ö±×¾øÀÌ µ¹¾î°£´Ù¸é...±×°Í¸¸µå·Îµµ...^^;
¿À´ÃÀº ¿ì° ºÎ½ÇºÎ½Ç ÇÏ´Ù´Â ³»¿ëÀÌ ¾Õ¼Áö¸¸...±×·¡µµ Ȥ½Ã³ª ÀÌ·¯ÇÑ
³»¿ëÀÌ ´ÙÀÌ·ºÆ® ¿¢½º¸¦ ¹è¿ì°íÀÚ ÇϽô ºÐµé¿¡°Ô Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ
µÉ±î~ ½Í¾î¼ ¿Ã¸³´Ï´Ù.
±¤°í>
ÇÏÀÌÅÚ °ÔÁ¦µ¿¿¡ ÀÌÀڷḦ ¿Ã¸³´Ï´Ù. ¼Ò½ºÈÀϰú ±×¸² ÈÀÏÀÌ
Àִµ¥ ÄÄÆÄÀÏÇØ¼ Á÷Á¢ »ìÆì º¼¼öµµ ÀÖ½À´Ï´Ù.
Űº¸µå·Î Á¶ÀÛÇØ¼ ½ºÇÁ¶óÀÌÆ®°¡ µ¹¾Æ°¡´Â °ÍÀ» È®ÀÎÇØº¸½Ã±æ
¹Ù¶ø´Ï´Ù. ±×¸®°í ¼Ò½º¸¦ ºÐ¼®Çغ¸¼¼¿ä~ (À§ÀÇ ³»¿ë°ú ´Ù¸¥ °ÍÀº
ÀüÇô ¾ø½À´Ï´Ù.)
±×·³...¼ö°íµé Çϼ¼¿ä~
»êÀå¿¡¼ ¾î´À ÇÑÀûÇÑ ¿ÀÈÄ¿¡~
1998. 3. 25.