[°­ÁÂ] <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.