ApiEdit´Â Å×½ºÆ®¿ë ÇÁ·ÎÁ§Æ®·Î ¾²±â¿¡´Â ÀÌÁ¦ µ¢Ä¡°¡ ³Ê¹« Ä¿Á® ¹ö·È´Ù. ±×·¡¼ ÄÁÆ®·ÑÈ ¹æ¹ýÀ» ¿¬±¸Çغ¸±â À§ÇÑ Àç·á·Î´Â ºÎÀû´çÇÑ °Í °°¾Æ Á» ´õ °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ °¢ ¹æ¹ýÀ» ºñ±³ÇØ º» ÈÄ ApiEdit¿¡ Àû¿ëÇϵµ·Ï ÇÒ °ÍÀÌ´Ù. ´ÙÀ½ ShowMsg ¿¹Á¦´Â ÁöÁ¤µÈ À§Ä¡¿¡ ¹®ÀÚ¿ ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ´Â °£´ÜÇÑ ±â´ÉÀ» °¡Áö°í Àִµ¥ Àо º¸¸é ½±°Ô ºÐ¼®ÀÌ µÉ °ÍÀÌ´Ù.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("ShowMsg");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
int x;
int y;
TCHAR *str;
void ChangeString(TCHAR *nstr)
{
lstrcpy(str,nstr);
InvalidateRect(hWndMain,NULL,TRUE);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT crt;
switch(iMessage) {
case WM_CREATE:
x=50;
y=50;
str=(TCHAR *)malloc(128);
lstrcpy(str,"String");
return 0;
case WM_SIZE:
if (wParam != SIZE_MINIMIZED) {
x=min(x,LOWORD(lParam)-50);
y=min(y,HIWORD(lParam)-10);
}
return 0;
case WM_KEYDOWN:
GetClientRect(hWnd,&crt);
switch (wParam) {
case VK_LEFT:
if (x > 0)
x--;
break;
case VK_RIGHT:
if (x < crt.right-50)
x++;
break;
case VK_UP:
if (y > 0)
y--;
break;
case VK_DOWN:
if (y < crt.bottom-10)
y++;
break;
}
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_LBUTTONDOWN:
if (lstrcmp(str,"String") == 0) {
ChangeString("¹®ÀÚ¿");
} else {
ChangeString("String");
}
return 0;
case WM_PAINT:
GetClientRect(hWnd,&crt);
hdc=BeginPaint(hWnd, &ps);
Rectangle(hdc,0,0,crt.right,crt.bottom);
TextOut(hdc,x,y,str,lstrlen(str));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
free(str);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
¼¼ °³ÀÇ Àü¿ªº¯¼ö¸¦ °¡Áö°í Àִµ¥ x, y ÁÂÇ¥¿¡ ¹®ÀÚ¿ strÀ» Ãâ·ÂÇÑ´Ù. str º¯¼ö´Â ÀÏÁ¾ÀÇ ¹®ÀÚ¿ ¹öÆÛÀε¥ WM_CREATE¿¡¼ µ¿ÀûÀ¸·Î ÇÒ´çµÇ°í WM_DESTROY¿¡¼ ÇØÁ¦µÈ´Ù. ¹®ÀÚ¿ Ãâ·Â ±â´É ¿Ü¿¡ Ä¿¼À̵¿Å°·Î ¹®ÀÚ¿ÀÇ À§Ä¡¸¦ Á¶Á¤ÇÒ ¼ö ÀÖÀ¸¸ç ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» Ŭ¸¯ÇÏ¿© ¹®ÀÚ¿ÀÇ ³»¿ëÀ» ¹Ù²Ü ¼ö ÀÖ´Ù. ¹®ÀÚ¿ º¯°æÀ» À§ÇØ ChangeStringÀ̶ó´Â ÀϹÝÇÔ¼öµµ Çϳª Á¤ÀǵǾî Àִµ¥ ÀÌ ÇÔ¼ö¸¦ ÀϺη¯ ¿ÜºÎ·Î ºÐ¸®ÇسõÀº ÀÌÀ¯´Â ÄÁÆ®·ÑÈ ¹æ¹ý¿¡ µû¶ó ÀϹÝÇÔ¼öÀÇ ÇüÅ°¡ Á¶±Ý¾¿ ¹Ù²î´Â °ÍÀ» »ìÆ캸±â À§ÇؼÀÌ´Ù. ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù.
½Ç¿ëÀû °¡Ä¡¶ó°í´Â ÀüÇô ¾ø´Â °£´ÜÇÑ ±â´ÉÀÇ À©µµ¿ìÀε¥ ÀÌ À©µµ¿ì¸¦ ÄÁÆ®·Ñ·Î ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ÄÁÆ®·ÑÀÌ µÇ¸é ´Ù¸¥ À©µµ¿ìÀÇ Â÷Àϵ尡 µÇ¹Ç·Î ÀçÈ°¿ë¿¡ À¯¸®ÇÏ´Ù. ÀÌ À©µµ¿ì¸¦ ÄÁÆ®·Ñ·Î ¸¸µå´Â ¹æ¹ýÀº ApiEdit¿¡µµ ±×´ë·Î Àû¿ëµÈ´Ù.