À©µµ¿ì ÇÁ·Î±×·¥À» ¸¸µé ¶§ ÀÓÀÇÀÇ À§Ä¡¿¡ Ãâ·ÂÇÏ´Â TextOut ÇÔ¼ö°¡ PPC API ¿¡¼´Â ¾ø¾îÁ³½À´Ï´Ù. ±×·¡¼ Á¦°¡ ÀÓÀÇ·Î MyTextOut À̶ó´Â ÇÔ¼ö¸¦ ¸¸µé¾î¼ Ãâ·Â¿¡ »ç¿ëÇÕ´Ï´Ù.
1. »õ·Î¿î ÇÁ·ÎÁ§Æ® Exam06¸¦ ¸¸µì´Ï´Ù.
2. WndProc ÇÔ¼öÀÇ case WM_PAINT ¸Þ½ÃÁö ó¸®ÇÏ´Â °÷À¸·Î À̵¿ÇÕ´Ï´Ù.
3. LoadString ÇàÀ» ã¾Æ¼ LoadString °ú DrawText ÇàÀ» Áö¿ó´Ï´Ù.(¾Æ·¡ ÇàÀ» Áö¿ì°Å³ª // ¼³¸í¹® ó¸® Çϼ¼¿ä) ´Ù¸¥ Ãâ·Â ¹æ¹ýÀ» »ç¿ëÇÒ ¿¹Á¤À̱⠶§¹®¿¡ ¾Æ·¡ µÎ ÇàÀº ÇÊ¿ä ¾ø½À´Ï´Ù.
¢º LoadString(g_hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
¢º DrawText(hdc, szHello, _tcslen(szHello), &rt,
¢º DT_SINGLELINE | DT_VCENTER | DT_CENTER);
4. WinMain ÇÔ¼ö·Î À̵¿ÇÕ´Ï´Ù. Á¦ÀÏ À§¿¡¼ Á¶±Ý¸¸ ³»·Á¿À¸é ÀÖÀ¸¸ç, ¿ÞÂÊ Class View ÀÇ WinMain Ç׸ñÀ» ´õºíŬ¸¯ Çصµ µË´Ï´Ù. WinMain ÇÔ¼ö ¹Ù·Î À§¿¡ ¾Æ·¡ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
¢ºRECT MyTextOut( HDC hdc, int x, int y, TCHAR* pBuf )
¢º{
¢º int n;
¢º SIZE sz;
¢º RECT rt;
¢º
¢º n = wcslen( pBuf );
¢º GetTextExtentPoint( hdc, pBuf, n, &sz );
¢º rt.left = x;
¢º rt.top = y;
¢º rt.right = x + sz.cx;
¢º rt.bottom = y + sz.cy;
¢º DrawText( hdc, pBuf, n, &rt, DT_TOP | DT_LEFT );
¢º return rt;
¢º}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
...
ÀÌ »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö MyTextOut ÀÇ ¼³¸íÀ» ¾Æ·¡¿¡ ÇÏ°ÚÁö¸¸, ÀÌÇØ°¡ µÇÁö ¾ÊÀ¸¸é °Ç³Ê¶Ù¼Åµµ µË´Ï´Ù. ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ±Ã±ÝÇϽŠºÐÀº ¾Æ·¡ ¼³¸íÀ» ÀÐ¾î º¸½Ã¸é µË´Ï´Ù. ´ÙÀ½ °ÀÇ¿¡¼ MyTextOut ÀÌ ÇÊ¿äÇѵ¥ ÀÌÇØ°¡ µÇÁö ¾ÊÀ¸½Ã´Â ºÐÀº ±×³É ȸ鿡 Ãâ·ÂÇϴ±¸³ª ÇÏ½Ã°í ³Ñ¾î°¡½Ã¸é µË´Ï´Ù.
RECT MyTextOut( HDC hdc, int x, int y, TCHAR* pBuf )
MyTextOut ÇÔ¼öÀÇ ¼±¾ðÀÔ´Ï´Ù. °ýÈ£() ¾ÈÀÇ Àμö´Â DC ÀÎ hdc, Ãâ·ÂÁÂÇ¥ÀÎ x,y ±×¸®°í Ãâ·ÂÇÒ ³»¿ëÀÎ pBufÀÔ´Ï´Ù. Áß°ýÈ£ { } ¾È¿¡ ÀÖ´Â ³»¿ëÀÌ ÇÔ¼öÀÇ ½ÇÇà ºÎºÐÀÌ µÇ°Ú½À´Ï´Ù. ±×¸®°í ÇÔ¼öÀÇ ¼±¾ðÀÌ WinMain À§¿¡ ÀÖ´Â °æ¿ì´Â ÇÁ·ÎÅä ŸÀÔÀÇ ¼±¾ðÀ» ÇÏÁö ¾Ê±â À§ÇؼÀÔ´Ï´Ù. ÇÔ¼öÀÇ È£Ãâ ½ÃÁ¡º¸´Ù ÇÔ¼öÀÇ ¼±¾ð ½ÃÁ¡ÀÌ ¾Æ·¡¿¡ ÀÖ´Â °æ¿ì ±× ÇÔ¼ö°¡ ÀÖ´Ù´Â »ç½ÇÀ» ¹Ì¸® È£Ãâ Àü¿¡(´ë°³´Â óÀ½ ºÎºÐ¿¡) ¾Ë·ÁÁà¾ß ÇÕ´Ï´Ù. ¿©±â¼´Â WinMain º¸´Ùµµ À§¿¡(±×·¯´Ï±î ÇÔ¼ö Áß Á¦ÀÏ À§°¡ µË´Ï´Ù.) ÀÖÀ¸¸é ÇÁ·ÎÅä ŸÀÔÀÇ ¼±¾ðÀÌ ÇÊ¿ä ¾ø½À´Ï´Ù. // Forward declarations of functions included in this code module: ¶ó°í ÇÏ°í ¾Æ·¡ Á¤ÀÇµÈ ³»¿ëµéÀÌ ÇÔ¼öÀÇ ÇÁ·ÎÅä ŸÀÔÀÇ Á¤ÀÇÀÔ´Ï´Ù.(¾îµð ÀÖ´ÂÁö ãÀ¸¼Ì½À´Ï±î?)
int n;
SIZE sz;
RECT rt;
ÇÊ¿äÇÑ Áö¿ª º¯¼öÀÇ ¼±¾ðÀÔ´Ï´Ù. Áö¿ª º¯¼ö¶õ MyTextOut ÇÔ¼ö ¾È¿¡¼¸¸ »ç¿ëµÈ´Â º¯¼ö¸¦ ¸»ÇÕ´Ï´Ù. sz ´Â Ãâ·ÂµÇ´Â ¹®ÀÚ¿ÀÇ È¸é»ó¿¡¼ÀÇ Å©±â¸¦ ±¸Çϱâ À§ÇÑ º¯¼öÀ̸ç, rt ´Â Ãâ·Â ÁÂÇ¥¸¦ ÁöÁ¤ÇØ ÁÖ±â À§ÇÑ º¯¼öÀÔ´Ï´Ù.
n = wcslen( pBuf );
¹®ÀÚ¿ÀÇ ±æÀ̸¦ ±¸Çؼ º¯¼ö n ¿¡ ³Ö½À´Ï´Ù.
GetTextExtentPoint( hdc, pBuf, n, &sz );
¹®ÀÚ¿ÀÌ È¸é¿¡ Ãâ·ÂµÉ ¶§ Ãâ·ÂµÇ´Â Å©±â¸¦ ±¸Çؼ º¯¼ö sz ¿¡ ³Ö½À´Ï´Ù.
rt.left = x;
rt.top = y;
rt.right = x + sz.cx;
rt.bottom = y + sz.cy;
rt ¿¡ Ãâ·Â ÁÂÇ¥¸¦ ÁöÁ¤ÇÕ´Ï´Ù. rt.left ¿Í rt.top ¿¡´Â ½ÃÀÛ ÁÂÇ¥¸¦ rt.right ¿Í rt.bottom ¿¡´Â ³¡ÁÂÇ¥¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ³¡ÁÂÇ¥´Â ½ÃÀÛ ÁÂÇ¥¿¡ Ãâ·ÂµÇ´Â Å©±â¸¦ ´õÇÑ °ªÀÔ´Ï´Ù.
DrawText( hdc, pBuf, n, &rt, DT_TOP | DT_LEFT );
ÁöÁ¤µÈ ÁÂÇ¥¿¡ ¹®ÀÚ¿À» Ãâ·ÂÇÕ´Ï´Ù.
return rt;
Ãâ·Â ÁÂÇ¥¸¦ ÇÔ¼ö È£Ãâ ½ÃÁ¡¿¡ µ¹·ÁÁÝ´Ï´Ù. Áö±ÝÀº ÀÌ °ÍÀº »ç¿ëÇÏ°í ÀÖÁö ¾Ê½À´Ï´Ù.
5. ´Ù½Ã WndProc ÇÔ¼öÀÇ case WM_PAINT ¸Þ½ÃÁö ó¸®ÇÏ´Â °÷À¸·Î À̵¿ÇÕ´Ï´Ù. ±×¸®°í LoadString ÀÏ Áö¿ü´ø ÀÚ¸®¿¡ ¾Æ·¡ Äڵ带 Ãß°¡ÇÕ´Ï´Ù. ¢º Ç¥½Ã¸¸ Ãß°¡µÈ °ÍÀÔ´Ï´Ù.
GetClientRect(hWnd, &rt);
¢º MyTextOut( hdc, 10, 10, L¿©±â´Ù Ãâ·ÂÇÕ´Ï´Ù.);
¢º MyTextOut( hdc, 20, 160, L¿©±âµµ Ãâ·Â~);
¢º MyTextOut( hdc, 50, 30, LÀú±âµµ Ãâ·Â~);
¢º MyTextOut( hdc, 60, 60, L¾Æ¹«µ¥´Ù Ãâ·Â~);
¢º MyTextOut( hdc, 90, 65, L°ãÃļ Ãâ·Â~);
¢º MyTextOut( hdc, 10, 220, LÀú´Â ÀÌ°Ô ´õ ÆíÇÕ´Ï´Ù.);
EndPaint(hWnd, &ps);
6. ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸¼¼¿ä.(F5)
ÈľÆ... ¹®ÀÚ¿ Ãâ·ÂÀÇ ±âº»Àº ¿©±â±îÁöÀÔ´Ï´Ù. ´ÙÀ½ ½Ã°£ºÎÅÍ Ãâ·ÂÀÇ ÀÀ¿ëÀ» Á¶±Ý ÀÍÈü´Ï´Ù. MyTextOutÀ» ÀÌ¿ëÇؼ ±¸±¸´Ü°ú º°»ï°¢ÇüÀ» Ãâ·ÂÇØ º¸°Ú½À´Ï´Ù. ±×¸®°í ±× ´ÙÀ½¿¡´Â ±×¸² ±×¸®±â ¶Ç ÇÑÁÖ ±×¸®°í ±× ´ÙÀ½¿£ ½ºÅ¸ÀÏ·¯½º Ææ ¸Þ½ÃÁö ¶Ç ÇÑÁÖ°¡ µÇ°Ú½À´Ï´Ù. ¾Æ ¹Ù»Ú´Ù ¹Ùºü... ¾ðÁ¦ ³¡³»³¶... ^^
|