|
|||||
- File #1 : Image2301.jpg(), Download : 30 |
¿À´ÃÀÇ °ÀÇ´Â °ÔÀÓ API(GAPI)ÀÔ´Ï´Ù. ÀÌ°Ç ¸¸µé¾î ³õ°íµµ ³Ê¹« ¾î·ÆÁö ¾ÊÀ»±î ½Í¾î¼ ¾È¿Ã¸®·Á°í »ý°¢Çß¾ú½À´Ï´Ù. ÇÁ·Î±×·¥ÀÇ ¿©±â Àú±â¸¦ ¼ÕºÁ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ¾ÕÀ¸·Î´Â ´Ù¸¥ °Àǵµ À̸¸Å ¾î·Á¿ï °Å °°¾Æ ÀÌ¿Õ ¸¸µé¾úÀ¸´Ï ¿Ã·Á¾ß°Ú´Ù°í »ý°¢Çؼ °ÀǸ¦ ¿Ã¸³´Ï´Ù. ÀÌÇØ°¡ Àß ¾ÈµÇ½Ã´Â ºÐÀº Æнº... °ÔÀÓÀ» ¸¸µå´Â °Í¿¡ °ü½ÉÀÌ ÀÖÀ¸½Å ºÐÀº Çѹø µû¶óÇØ º¸¼¼¿ä. 1. »õ·Î¿î ÇÁ·ÎÁ§Æ® Exam23 À» ¸¸µì´Ï´Ù. ±×¸®°í Hello World¸¦ Ãâ·ÂÇÏ´Â Äڵ带 ¸ðµÎ Áö¿ó´Ï´Ù. 2. ¸Þ´ºÀÇ Project ¢¹ Settings ·Î µé¾î°¡¼, Link ÅÇÀ» ¼±ÅÃÇÑ ´ÙÀ½, Object/Library Modules : Ç׸ñÀÇ ¸¶Áö¸·¿¡ gx.lib¸¦ Ãß°¡ÇÕ´Ï´Ù. (Release ·Î ÄÄÆÄÀÏ ÇÒ ¶§¿¡´Â ¸¶Âù°¡Áö ÀÛ¾÷À» ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.) 3. ÇÁ·Î±×·¥À¸·Î µé¾î°¡¼ Á¦ÀÏ À§ÀÇ Çì´õ ¼±¾ð ºÎºÐ¿¡ ¾Æ·¡ Çì´õ¸¦ Ãß°¡ÇØ ÁÝ´Ï´Ù. ¢º #include <gx.h> 4. ¹Ù·Î ¹Ø Àü¿ª º¯¼ö ¼±¾ðºÎ¿¡ ¾Æ·¡¿Í °°ÀÌ GAPI¸¦ »ç¿ëÇϱâ À§ÇÑ º¯¼ö¸¦ Ãß°¡ÇØ ÁÝ´Ï´Ù. // Global Variables: HINSTANCE g_hInst; HWND g_hwndCB; ¢º struct GXDisplayProperties g_gxDispProp = { 0 }; Á¶±Ý ±æÁÒ? ÀÌ ±¸Á¶Ã¼´Â µð½ºÇ÷¹ÀÌ µÇ´Â ȸéÀÇ ±¸Á¶(°¡·Î ¼¼·Î Å©±â¿Í ÇÑ Á¡´ç ºñÆ® ¼ö)ÀÇ Á¤º¸¸¦ °¡Á®¿À´Â ±¸Á¶Ã¼ÀÔ´Ï´Ù. º¯¼ö¸íÀÌ g_gxDispPropÀÔ´Ï´Ù. 5. È¸é ¿ÞÂÊ Class View ÀÇ Globals ¾Æ·¡ InitInstance ÇÔ¼ö¸¦ ´õºí Ŭ¸¯ Çؼ InitInstance ÇÔ¼ö·Î À̵¿ÇÑ ´ÙÀ½(ÄÚµå ³»¿¡¼ Á÷Á¢ ãÀ¸¼Åµµ µË´Ï´Ù. ´ë·« Áß°£Âë¿¡ ÀÖ½À´Ï´Ù.) ÇÔ¼öÀÇ ¾Æ·¡ ºÎºÐ¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÔ·ÂÇÕ´Ï´Ù. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { . . . . . . ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); ¢º if (GXOpenDisplay( hWnd, GX_FULLSCREEN) == 0) ¢º return FALSE; ¢º g_gxDispProp = GXGetDisplayProperties(); ¢º ¢º if (g_gxDispProp.cBPP != 16) ¢º { ¢º GXCloseDisplay(); ¢º return FALSE; ¢º } ¢º ¢º GXOpenInput(); return TRUE; } ÀÌ ÄÚµåµéÀº GAPI¸¦ ÃʱâÈ ÇÏ´Â °ÍÀÔ´Ï´Ù. InitInstance ÇÔ¼ö ÀÚü°¡ OS ¿¡ Ŭ·¡½º¸¦ µî·ÏÇÏ°í À©µµ¿ì¸¦ »ý¼ºÇؼ ȸ鿡 ³ªÅ¸³ªµµ·Ï ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù. ±× ¾Æ·¡ ºÎºÐ¿¡ GAPI¸¦ ÃʱâÈ ÇØ ÁÖ´Â ·çƾÀ» Ãß°¡ÇØ ÁÖ´Â °ÍÀÔ´Ï´Ù. if (GXOpenDisplay( hWnd, GX_FULLSCREEN) == 0) return FALSE; Àüü È¸é ¸ðµå·Î GAPI¸¦ ÃʱâÈ ÇÕ´Ï´Ù. ¸¸¾à ÃʱâÈ°¡ ¾ÈµÇ¸é FALSE¸¦ return Çؼ À©µµ¿ì¸¦ Á¾·áÇϵµ·Ï ÇÕ´Ï´Ù. g_gxDispProp = GXGetDisplayProperties(); ȸéÀÇ ±âº» ±¸Á¶¿¡ ´ëÇÑ °ªÀ» ¾ò½À´Ï´Ù. if (g_gxDispProp.cBPP != 16) { GXCloseDisplay(); return FALSE; } ¸¸¾à È¸é »ö»óÀÌ 16ºñÆ®°¡ ¾Æ´Ï¶ó¸é GAPI¸¦ ´Ý°í FALSE¸¦ return Çؼ À©µµ¿ì¸¦ Á¾·áÇϵµ·Ï ÇÕ´Ï´Ù. ±×·¡¼ Èæ¹é PDA ³ª 4096 »öÀ» Ç¥ÇöÇÏ´Â ¿¾³¯ IPAQ, ¶Ç´Â ¿äÁò ÃÖ½ÅÀÇ True Color¸¦ Ç¥ÇöÇÏ´Â PDA ´Â µ¿ÀÛ ´ë»ó¿¡¼ Á¦¿Ü µÇ°Ú½À´Ï´Ù. GXOpenInput(); Çϵå¿þ¾î ¹öÆ°ÀÇ ÀÔ·ÂÀ» ÃʱâÈ ÇÕ´Ï´Ù. 6. WndProc ÇÔ¼öÀÇ WM_DESTROY ¸Þ½ÃÁö ó¸® ºÎºÐ¿¡ ¾Æ·¡¿Í °°ÀÌ GAPI¸¦ ³¡³»´Â Äڵ带 Ãß°¡ÇØ ÁÝ´Ï´Ù. case WM_DESTROY: ¢º GXCloseInput(); ¢º GXCloseDisplay(); ...... 7. WndProc ÇÔ¼öÀÇ WM_DESTROY ¸Þ½ÃÁö ó¸® break; ¹® ´ÙÀ½¿¡ ¾Æ·¡¿Í °°ÀÌ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î À̵¿ÇÏ´Â °æ¿ì¿Í ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼ µ¹¾Æ¿À´Â °æ¿ì 󸮸¦ ÇØ ÁÝ´Ï´Ù. case WM_DESTROY: ...... break; ¢º case WM_KILLFOCUS: ¢º GXSuspend(); ¢º break; ¢º case WM_SETFOCUS: ¢º GXResume(); ¢º break; ¢º case WM_LBUTTONDOWN: ¢º PostMessage( hWnd, WM_DESTROY, 0, 0 ); ¢º break; WM_KILLFOCUS ¸Þ½ÃÁö´Â ÇöÀçÀÇ °ÔÀÓ ÇÁ·Î±×·¥¿¡¼ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ÀÛ¾÷ÀÌ À̵¿µÉ ¶§ ¹ß»ýÇÏ´Â ¸Þ½ÃÁöÀÔ´Ï´Ù. À̶§ GAPI¸¦ Àá½Ã ¸ØÃß´Â GXSuspend() ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. WM_SETFOCUS ¸Þ½ÃÁö´Â ´Ù¸¥ À©µµ¿ì¿¡¼ ¿ì¸®ÀÇ °ÔÀÓ ÇÁ·Î±×·¥À¸·Î ´Ù½Ã µ¹¾Æ¿Ã ¶§ ¹ß»ýÇÏ´Â ¸Þ½ÃÁöÀÔ´Ï´Ù. À̶§ GAPI¸¦ ´Ù½Ã »ì¸®´Â GXResume() ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ȸéÀ» ½ºÅ¸ÀÏ·¯½º ÆæÀ¸·Î ÂïÀ¸¸é ÇÁ·Î±×·¥À» Á¾·á½Ãų ¼ö ÀÖµµ·Ï WM_LBUTTONDOWN ¸Þ½ÃÁö°¡ ¹ß»ýÇϸé À©µµ¿ì¸¦ Á¾·áÇÏ´Â WM_DESTROY ¸Þ½ÃÁö¸¦ ´Ù½Ã ¹ß»ý½ÃÅ°µµ·Ï ÇÕ´Ï´Ù. ȸ鿡 Á¾·á½Ãų À©µµ¿ì ¹öÆ°µµ ³ªÅ¸³ªÁö ¾Ê±â ¶§¹®¿¡ ÀÌ·¸°Ô ÇØÁà¾ß ÇÕ´Ï´Ù. 8. Áö±Ý ºÎºÐÀÌ GAPI¿¡¼ °¡Àå Áß¿äÇÑ ºÎºÐÀÔ´Ï´Ù. ÀÌÁ¦ WinMain ÇÔ¼ö¸¦ ¶â¾î °íÃÄ¾ß ÇÕ´Ï´Ù. ÇÁ·Î±×·¥ÀÇ Á¦ÀÏ ¾ÕºÎºÐ¿¡ ÀÖÁÒ? WinMain ÇÔ¼ö¿¡¼ ¾Æ·¡ Äڵ带 ¸ðµÎ »èÁ¦ÇÕ´Ï´Ù. Àú´Â ÀüºÎ // ÁÖ¼®À¸·Î ó¸®Çß½À´Ï´Ù. °ÔÀÓÀ» ¸¸µé±â À§Çؼ´Â À©µµ¿ì ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ºÎºÐÀ» Á¦¿ÜÇÏ¸é °¡±ÞÀû ¸ðµç ÇÁ·Î¼¼½º¸¦ °ÔÀÓ ÀÛ¾÷À» Çϴµ¥ »ç¿ëÇϵµ·Ï ÇÁ·Î±×·¥À» ¼öÁ¤ÇØ Áà¾ß ÇÕ´Ï´Ù. // Main message loop: ¢º //while (GetMessage(&msg, NULL, 0, 0)) ¢º //{ ¢º // if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) ¢º // { ¢º // TranslateMessage(&msg); ¢º // DispatchMessage(&msg); ¢º // } ¢º //} 9. WinMain ÇÔ¼öÀÇ ÀºÎºÐ¿¡ ¾Æ·¡¿Í °°ÀÌ º¯¼ö¸¦ Ãß°¡ÇÕ´Ï´Ù. MSG msg; HACCEL hAccelTable; ¢º BOOL bDone; ¢º short* pDraw; ¢º short* p; ¢º int i; º¯¼ö bDone Àº ÇÁ·Î±×·¥ÀÇ Á¾·á ¿©ºÎ¸¦ ÆÇ´ÜÇÏ´Â º¯¼öÀÔ´Ï´Ù. º¯¼ö pDraw ´Â ȸéÀÇ ¸Þ¸ð¸® ½ÃÀÛ À§Ä¡¸¦ °¡¸®Å°´Â º¯¼ö°¡ µË´Ï´Ù. º¯¼ö p ´Â ȸéÀÇ ¸Þ¸ð¸®»óÀÇ Áß°£ À§Ä¡¸¦ °¡¸®Å°´Â º¯¼ö·Î »ç¿ë µË´Ï´Ù. 10. 8¹ø¿¡¼ »èÁ¦ÇÑ ¸Þ½ÃÁö ó¸® ·çƾ ´ë½Å¿¡ ¾Æ·¡ ¸Þ½ÃÁö ó¸® Äڵ带 ±× ÀÚ¸®¿¡ Ãß°¡ÇØ ÁÝ´Ï´Ù. // Main message loop: ¢º bDone = FALSE; ¢º while( bDone == FALSE ) ¢º { ¢º if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) ¢º { ¢º if (msg.message == WM_QUIT) ¢º bDone = TRUE; ¢º else ¢º { ¢º TranslateMessage(&msg); ¢º DispatchMessage(&msg); ¢º } ¢º } ¢º else ¢º { ¢º pDraw = (short*)GXBeginDraw(); ¢º if( pDraw != NULL ) ¢º { ¢º p = pDraw; ¢º for( i=0; i<320*240; i++ ) ¢º *p++ = (short)0xf100; ¢º GXEndDraw(); ¢º } ¢º } ¢º } ²Ï ±æÁÒ? À§ ÄÚµåÀÇ ´ë·«ÀûÀÎ ±¸Á¶´Â ¾Æ·¡¿Í °°½À´Ï´Ù. ¹«ÇÑ ·çÇÁ¸¦ µ¹¸é¼ ¸¸¾à À©µµ¿ì ¸Þ½ÃÁö°¡ ÀÖÀ¸¸é À©µµ¿ì ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é °ÔÀÓ ÀÛ¾÷¿¡ ÁýÁßÇÑ´Ù. ÀÌÁ¦ ÀÌ Äڵ忡 ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀ» ºÙÀ̵µ·Ï ÇÏ°Ú½À´Ï´Ù. ¾î·Á¿ì½Ã¸é °Ç³Ê ¶Ù¼Åµµ µÇ±ä ÇÕ´Ï´Ù¸¸ °ÔÀÓÀ» ¸¸µç´Ù¸é ±âº»ÀûÀ¸·Î ¾Ë°í ÀÖ¾î¾ß¸¸ ÇÏ´Â ÄÚµåÀÔ´Ï´Ù. bDone = FALSE; ÇÁ·Î±×·¥ÀÇ Á¾·á ¿©ºÎ¸¦ ÆÇ´ÜÇÏ´Â º¯¼ö¿¡ FALSE¸¦ ³Ö¾î ÀÏ´Ü ÇÁ·Î±×·¥ÀÌ °è¼Ó ½ÇÇàÁßÀÓÀ» ¾Ë¸³´Ï´Ù. while( bDone == FALSE ) º¯¼ö bDone ÀÇ °ªÀÌ FALSE ÀÎ µ¿¾È ÇÁ·Î±×·¥Àº ¹Ýº¹¹®À» µ¹¸é¼ µ¿ÀÛÇÕ´Ï´Ù. bDone ÀÌ TRUE °¡ µÇ¸é ¹Ýº¹¹®À» ºüÁ® ³ª°©´Ï´Ù. if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) ¸¸¾à À©µµ¿ì ¸Þ½ÃÁö°¡ ¹º°¡°¡ ÀÖ´Ù¸é ¸Þ½ÃÁö¸¦ °¡Á®¿Í¼...(º¯¼ö msg ¿¡ µé¾î°¡ÁÒ) if (msg.message == WM_QUIT) bDone = TRUE; ±× ¸Þ½ÃÁö°¡ À©µµ¿ì¸¦ Á¾·áÇ϶ó´Â °ÍÀ̸é bDoneÀ» TRUE ·Î ¹Ù²Ù¾î¼ ÇÁ·Î±×·¥ÀÌ ¹Ýº¹¹®À» ºüÁ®³ª°¡¼ À©µµ¿ì¸¦ Á¾·áÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. TranslateMessage(&msg); DispatchMessage(&msg); WM_QUIT °¡ ¾Æ´Ñ ´Ù¸¥ ¸Þ½ÃÁöÀ̸é À©µµ¿ì ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÚµ¿À¸·Î WndProc ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ...... } else { ...... ±×·¸Áö ¾ÊÀ¸¸é À©µµ¿ì ¸Þ½ÃÁö°¡ ¾øÀ¸´Ï±î °ÔÀÓ ÀÛ¾÷¿¡ ÁýÁßÇØ¾ß ÇÕ´Ï´Ù. else ´ÙÀ½ÀÇ ...... ÄÚµå´Â ȸéÀ» Áö¿ì´Â °£´ÜÇÑ ¿¹¸¦ º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. ±×·±µ¥ Äڵ尡 °£´ÜÇÏÁö ¾ÊÁÒ? pDraw = (short*)GXBeginDraw(); ºñµð¿À ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ ¾ò¾î³À´Ï´Ù. ºñµð¿À ¸Þ¸ð¸®ÀÇ ÇÑ Á¡´ç 16 ºñÆ®À̹ǷΠº¯¼öÀÇ ÇüÀ» short ÇüÀ¸·Î ÇØÁÖ¾î¾ß ÇÏ´Â °ÍÀÔ´Ï´Ù. À̶§ ¼º°øÀûÀ¸·Î ÁÖ¼Ò¸¦ ¾ò¾î³½´Ù¸é ºñµð¿À ¸Þ¸ð¸®´Â Lock ÀÌ °É·Á¼ ȸ鿡 Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù. if( pDraw != NULL ) ¸¸¾à ºñµð¿À ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ ¼º°øÀûÀ¸·Î ¾Ë¾Æ³Â´Ù¸é pDraw ´Â ºñµð¿À ¸Þ¸ð¸®ÀÇ ½ÃÀÛ ºÎºÐÀ» °¡¸®Å°°í ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÌ °æ¿ì¿¡¸¸ ÀÛ¾÷À» Çϵµ·Ï ÇÕ´Ï´Ù. p = pDraw; ½ÃÀÛ À§Ä¡´Â ´Ù¸¥ ÀÛ¾÷À» À§Çؼµµ °è¼Ó º¸Á¸ÇÏ°í ÀÖ¾î¾ß ÇÏ´Ï±î º¯¼ö p ¿¡ ´Ù½Ã ½ÃÀÛÀ§Ä¡¸¦ ³Ö½À´Ï´Ù. ¿ì¸®´Â ÀÌ º¯¼ö p¸¦ ÀÌ¿ëÇؼ ȸ鿡 °ªÀ» »Ñ¸³´Ï´Ù. for( i=0; i<320*240; i++ ) ȸéÀÇ Å©±â¸¸Å ¹Ýº¹ÇÕ´Ï´Ù. *p++ = (short)0x001f; ÇÑ Á¡¸¶´Ù ÆĶõ»öÀ¸·Î Á¡À» Âï½À´Ï´Ù. ++ ¿¬»êÀ» ÀÌ¿ëÇؼ ´ÙÀ½ Á¡À¸·Î À̵¿ÇÕ´Ï´Ù. 16ºñÆ® »ö»óÀ̹ǷΠÀû»ö 5ºñÆ®, ³ì»ö 6ºñÆ®, û»ö 5ºñÆ®·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. ƯÁ¤ »öÀ¸·Î »öÄ¥ÇÏ·Á¸é 0xf100 Àº »¡°£»ö, 0x07e0 ´Â ³ì»ö, 0x001f ´Â ÆĶõ»öÀÌ µË´Ï´Ù. ÀÓÀÇÀÇ »ö»óÀ» Á÷Á¢ ¸¸µé¾î º¸¼¼¿ä. GXEndDraw(); È¸é ±×¸®±â¸¦ Á¾·áÇÕ´Ï´Ù. ȸéÀÇ Lock ÀÌ Ç®¸®°í °á°ú°¡ LCD ·Î Àü¼ÛÀÌ µË´Ï´Ù. 11. ÀÌÁ¦ ȸéÀ» Á÷Á¢ Á¦¾îÇϹǷΠÀ©µµ¿ì¸¦ ȸ鿡 ³ªÅ¸³»´Â Äڵ带 Á¦°ÅÇØ¾ß ÇÕ´Ï´Ù. ´Ù½Ã InitInstance ÇÔ¼ö¸¦ ã¾Æ¼ Áß°£ÂëÀÇ ¾Æ·¡ Äڵ带 Á¦°ÅÇØ ÁÝ´Ï´Ù. ¢º //ShowWindow(hWnd, nCmdShow); ¢º //UpdateWindow(hWnd); 12. ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é ȸéÀ» ¸ðµÎ ÆĶõ»öÀ¸·Î »Ñ¸®°Ô µË´Ï´Ù. GAPI ´Â DirectX ¿Í´Â ´Þ¸® °ÔÀÓ ±¸ÇöÀ» À§ÇÑ ÃÖ¼ÒÇÑÀÇ È¯°æ¸¸À» Á¦°øÇØ ÁÝ´Ï´Ù. ±×³É ºñµð¿À ¸Þ¸ð¸®¸¦ Á÷Á¢ Á¦¾îÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ°í, Çϵå¿þ¾î ¹öÆ°ÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ Áشٴ °ÍÀÔ´Ï´Ù. ±×·¡¼ ¸¹Àº ºÎºÐÀ» Á÷Á¢ ÄÚµùÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ȸ鿡 ±×¸²À» »Ñ¸®´Âµ¥ BitBlt¸¦ »ç¿ëÇÒ ¼ö ¾ø°í ȸ鿡 ±ÛÀÚ Çϳª Ç¥½ÃÇÏ´Â °Í Á¶Â÷ Á¦´ë·Î ÇÒ ¼ö ¾ø½À´Ï´Ù. ¸ðµç °ÍÀ» óÀ½ºÎÅÍ ¸¸µé¾î Áà¾ß ÇÕ´Ï´Ù. ±×¸²À» »Ñ¸± ¶§µµ ºñÆ®¸Ê µ¥ÀÌÅÍ°¡ À§ ¾Æ·¡·Î µÚÁýÇô Àֱ⠶§¹®¿¡ À§ ¾Æ·¡·Î ¹ÝÀü½ÃÄÑ Áà¾ß ÇÏ°í... Á×À½ÀÌÁÒ? ¿¹Á¦ ȸ鵵 ½ä··... |
| ||
|
|