4-5-³ª. AppWizard

API ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé ¶§´Â Ç×»ó ApiStart.txt ÇüÅ·Π¼Ò½º¸¦ ÀÛ¼ºÇØ¾ß Çϴ°¡ ÇÏ¸é ²À ±×·¸Áö´Â ¾Ê´Ù. »ç½Ç ApiStart.txt´Â °£°áÇÔÀ» ÁÁ¾ÆÇÏ´Â ÇÊÀÚÀÇ °³¼ºÀÌ °­ÇÏ°Ô µå·¯³­ ÇüŸ¦ ¶ì°í Àִµ¥ ¹®¹ý¿¡¸¸ ¸Â´Ù¸é ´Ù¸¥ ÇüÅ·ΠÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛÁ¡À» ¸¸µé¾î ¾µ ¼öµµ ÀÖ´Ù. ŸÀÌÇο¡ ÀÚ½ÅÀÌ ÀÖ°í Å°º¸µå ±«·ÓÈ÷±â¸¦ ÁÁ¾ÆÇÏ´Â »ç¶÷À̶ó¸é óÀ½ºÎÅÍ ÁË´Ù ÀÔ·ÂÇÏ´Â ¹æ¹ýµµ ¹°·Ð ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÏ´Â ÇÑ ¹æ¹ýÀÌÁö¸¸ ±×·± ¹æ¹ýÀ» Áñ±â´Â »ç¶÷Àº ¹«Ã´ µå¹° °ÍÀÌ´Ù. Çϱä, ÇÊÀÚ´Â ½ÇÁ¦·Î ±×·± »ç¶÷À» º»ÀûÀÌ ÀÖ±â´Â ÇÏ´Ù.

¾î¶² ÇüÅ°¡ ½ÃÀÛÁ¡À¸·Î °¡´ÉÇÑÁö »ìÆ캸±â À§ÇØ ºñÁÖ¾ó C++ÀÇ AppWizard°¡ ¸¸µé¾îÁÖ´Â ±âº» ÇÁ·ÎÁ§Æ®¸¦ »ìÆì º¸ÀÚ. AppWizard´Â »ç¿ëÀÚÀÇ ÁÖ¹®À» ¹Þ¾Æ ¿øÇÏ´Â ÇÁ·ÎÁ§Æ®ÀÇ °ñ°ÝÀ» ¸¸µé¾îÁÖ´Â ÀÏÁ¾ÀÇ ÇÁ·ÎÁ§Æ® »ý¼ºÅøÀÌ´Ù. File/New Ç׸ñÀ» ¼±ÅÃÇÏ°í AWPrj¶ó´Â À̸§À¸·Î Win32 Application ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç´Ù.

´ÙÀ½°ú °°Àº ´ëÈ­»óÀÚ¸¦ º¸¿©Áִµ¥ ApiStart.txt ÆÄÀϷκÎÅÍ ½ÃÀÛÇÏ·Á¸é An empty project Ç׸ñÀ» ¼±ÅÃÇÏ¸é µÇÁö¸¸ ¿©±â¼­´Â ºñÁÖ¾ó C++ÀÌ ¸¸µé¾îÁִ´ë·Î ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇØ º¸ÀÚ. Á¦ÀÏ ¾Æ·¡ÂÊ¿¡ ÀÖ´Â A typical "Hello World" applicationÀ» ¼±ÅÃÇÑ´Ù.

Finish ¹öÆ°À» ´©¸£¸é AppWizard´Â ÇÁ·ÎÁ§Æ®¿¡ ¼Ò½º ÆÄÀϱîÁö ÀÛ¼ºÇÏ¿© ¿Ï¼ºµÈ ÇÁ·ÎÁ§Æ®·Î ¸¸µé¾î ÁØ´Ù. F7Å°¸¦ ´­·¯ °ð¹Ù·Î ÄÄÆÄÀÏÇÒ ¼ö ÀÖÀ¸¸ç ÄÄÆÄÀÏ ÈÄ F5¸¦ ´©¸£¸é ½ÇÇ൵ °¡´ÉÇÏ´Ù. ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù.

È­¸é Áß¾Ó¿¡ Hello World! ¹®ÀÚ¿­ÀÌ ÀÌ¹Ì Ãâ·ÂµÇ¾î ÀÖÀ¸¸ç ¸Þ´º, ¾ÆÀÌÄÜ, ´ëÈ­»óÀÚ±îÁö ÀÛ¼ºµÇ¾î ÀÖ´Ù. ±×·¯³ª ÀÌ ÇÁ·ÎÁ§Æ®µµ ApiStart.txt¿Í ¸ð¾ç¸¸ Á» ´Ù¸¦ »Ó ¿©ÀüÈ÷ ½ÃÀÛÁ¡¿¡ ºÒ°úÇÒ »Ó º°´Ù¸¥ ±â´ÉÀÌ ¾ø±â ¶§¹®¿¡ ½ÇÁ¦ ÄÚµå´Â »ç¿ëÀÚ°¡ ÀÛ¼ºÇØ ³Ö¾î¾ß ÇÑ´Ù. AppWizard°¡ ¸¸µé¾î ÁØ ¼Ò½º´Â ¾î¶»°Ô ÀÛ¼ºµÇ¾î ÀÖ´ÂÁö º¸ÀÚ.

// AWPrj.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;	// current instance
TCHAR szTitle[MAX_LOADSTRING];	// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];	// The title bar text

// Foward declarations of functions included in this code module:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK	About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
	MSG msg;
	HACCEL hAccelTable;

	// Initialize global strings
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_AWPRJ, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);

	// Perform application initialization:
	if (!InitInstance (hInstance, nCmdShow)) 
	{
		return FALSE;
	}

	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_AWPRJ);

	// Main message loop:
	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	return msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX); 

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= (WNDPROC)WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_AWPRJ);
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= (LPCSTR)IDC_AWPRJ;
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

	return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;
	TCHAR szHello[MAX_LOADSTRING];
	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

	switch (message) 
	{
		case WM_COMMAND:
			wmId    = LOWORD(wParam); 
			wmEvent = HIWORD(wParam); 
			// Parse the menu selections:
			switch (wmId)
			{
				case IDM_ABOUT:
				   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
				   break;
				case IDM_EXIT:
				   DestroyWindow(hWnd);
				   break;
				default:
				   return DefWindowProc(hWnd, message, wParam, lParam);
			}
			break;
		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			// TODO: Add any drawing code here...
			RECT rt;
			GetClientRect(hWnd, &rt);
			DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
				return TRUE;

		case WM_COMMAND:
			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
			{
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}

WinMain, WndProc ¿Ü¿¡ ¼¼ °³ÀÇ ÇÔ¼ö°¡ Ãß°¡·Î ´õ ¼±¾ðµÇ¾î Àִµ¥ MyRegisterClass ÇÔ¼ö´Â À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇϸç InitInstance ÇÔ¼ö´Â CreateWindow ÇÔ¼ö¸¦ È£ÃâÇÏ¿© À©µµ¿ì¸¦ ¸¸µç´Ù. ÀÌ ÇÔ¼öµéÀÇ ³»ºÎ¸¦ »ìÆ캸¸é ApiStart.txtÀÇ WinMaind¿¡ ÀÖ´Â Äڵ带 ³ª´©¾î °¡Áö°í ÀÖÀ» »ÓÀÌ´Ù. WinMain¿¡¼­´Â ÀÌ µÎ ÇÔ¼ö¸¦ Â÷·Ê·Î È£ÃâÇÏ¿© À©µµ¿ì¸¦ »ý¼ºÇÏ¸ç ¸Þ½ÃÁö ·çÇÁ°¡ Æ÷ÇԵǾî ÀÖ´Ù.

WndProc¿¡¼­´Â ±âº»ÀûÀÎ ¼¼ °³ÀÇ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í Àִµ¥ ¸Þ½ÃÁöÀÇ Á¾·ù¸¸ ´Ù¸¦ »Ó ApiStart.txt¿Í ±¸Á¶´Â °°Àº ¼ÀÀÌ´Ù. ÀÌ¿Ü About ´ëÈ­»óÀÚ¸¦ ó¸®ÇÏ´Â ÇÔ¼ö¿Í ¸®¼Ò½º µîÀÌ ´õ ¼±¾ðµÇ¾î ÀÖ´Ù.

º¸´Ù½ÃÇÇ ApiStart.txt¿¡ ºñÇØ ¸î°¡Áö°¡ ´õ Ãß°¡µÇ¾î ÀÖÀ¸¸ç Çü½ÄÀÌ Á» ´Ù¸¦ »Ó º»ÁúÀûÀ¸·Î Äڵ尡 ´Ù¸¥ °ÍÀº ¾Æ´Ï´Ù. ÇÁ·ÎÁ§Æ®ÀÇ ½ÃÀÛÁ¡À¸·Î ApiStart.txt¸¦ »ç¿ëÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é ºñÁÖ¾ó C++ÀÌ Á¦°øÇÏ´Â AppWizard¸¦ »ç¿ëÇÒ °ÍÀΰ¡´Â ¾îµð±îÁö³ª µ¶ÀÚ´ÔµéÀÇ ÀÚÀ¯ÀÌµÇ µÎ ¹æ¹ýÀÌ ÁúÀûÀ¸·Î Ʋ¸®Áö ¾Ê´Ù´Â Á¡À» ÀÌÇØÇϱ⠹ٶõ´Ù. °¡Àå ÁÁÀº ¹æ¹ýÀº ÀÚ½ÅÀÇ °³¼º°ú ÇÊ¿ä¿¡ µû¶ó ÀûÀýÇÑ ½ÃÀÛ ¼Ò½º¸¦ ¸¸µé¾î ¾²´Â °ÍÀÌ°ÚÁö¸¸ ±× Á¤µµ°¡ µÇ·Á¸é ÀÌ Ã¥À» Á» ´õ Àоî¾ß ÇÏ°Ú´Ù. Ã¥À» µû¶ó Á÷Á¢ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾î º¼ »ý°¢ÀÌ ¾Æ´Ï¶ó¸é »ç½Ç ÀÌ·± °ÍÀº ½Å°æ¾²Áö ¾Ê¾Æµµ ÁÁ´Ù. ¾îÂ÷ÇÇ ´ëºÎºÐÀÇ »ç¶÷Àº ÇÁ·ÎÁ§Æ®¸¦ Á÷Á¢ ¸¸µé±âº¸´Ù´Â CD-ROM¿¡ ÀÖ´Â ¿¹Á¦¸¦ ºÒ·¯¿Í¼­ ½ÇÇàÇØ º¼Å×´Ï±î ¸»ÀÌ´Ù.


¸ñ·Ï º¸±â  ´ÙÀ½ °­Á            written by http://www.winapi.co.kr