[MFC] 윈도우 프로그래밍 기초 - Win32 프로그램 올려보기
2, http://yyman.tistory.com/485 / [MFC] 윈도우 프로그래밍 기초 - 윈도우 프로그램의 구조
3, http://yyman.tistory.com/486 / [MFC] 윈도우 프로그래밍 기초 - 윈도우 클래스 만들기
4, http://yyman.tistory.com/487 / [MFC] 윈도우 프로그래밍 기초 - 윈도우 객체 생성, 화면 띄우기
5, http://yyman.tistory.com/488 / [MFC] 윈도우 프로그래밍 기초 - 메시지 루프, 처리하기.
2~5번 글까지 잘 읽었다면, 이번에는 프로그램 전체 소스로 만들어 보겠습니다.
1. 새 프로젝트 만들기
그림 1-1) 새 프로젝트 만들기, Visual Studio 2013
그림 1-2) 프로젝트 마법사, Visual Studio 2013
그림 1-3) 프로젝트 마법사, Visual Studio 2013
그림 1-4) 솔루션 탐색기, Visual Studio 2013
그림 1-5) 소스코드 파일 만들기
2. 구현(Implements)
<Basic.cpp>
#include <Windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LPTSTR lpszClass = _T("BasicApi");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
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, LPTSTR(_T("제목")), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, 0, 0, 0) )
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (iMessage)
{
case WM_CREATE:
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
그림 2-1) 윈도우 화면 출력하기
3. 응용 예제) WndProc에 윈도우 창 종료시 알림 메시지 처리
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int nReturn;
switch (iMessage)
{
case WM_CREATE:
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_CLOSE:
nReturn = MessageBox(hWnd, _T("정말 종료하시겠습니까?"), _T("확인"), MB_YESNO);
if(nReturn == IDYES)
DestroyWindow(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
4. 마치면서
이 코드는 잊어버려도 되지만, 윈도우 프로그램의 기본 구조는 반드시 알고 있어야 한다.
1. 윈도우 프로그램의 전체 구조
int WINAPI WinMain( .... ) // 프로그램의 시작점
{
// 기본적인 윈도우의 형태를 생성
// 메시지 루프를 돌린다.
}
LRESULT CALLBACK WndProc(......) // 메시지를 처리하는 프로시저
{
// 윈도우 메시지를 처리한다.
}
2. 윈도우 프로그램의 구성 요소
-> 1. 클래스 만들기(윈도우)
-> 2. 객체 생성(윈도우)
-> 3. 객체 화면 띄우기(윈도우)
-> 4. 메시지 루프 돌리기
-> 5. 메시지 처리하기
5. 참고자료(Reference)
'소프트웨어(SW) > MS - C++ (GUI) MFC' 카테고리의 다른 글
[MFC] 윈도우 프로그래밍 기초 - 팝업메뉴 만들기(리소스의 이해) (2) | 2015.03.17 |
---|---|
[MFC] 윈도우 프로그래밍 기초 - MFC - 배경지식 (2) | 2015.03.10 |
[MFC] 윈도우 프로그래밍 기초 - 메시지 루프, 처리하기. (3) | 2015.03.06 |
[MFC] 윈도우 프로그래밍 기초 - 윈도우 객체 생성, 화면 띄우기 (3) | 2015.03.06 |
[MFC] 윈도우 프로그래밍 기초 - 윈도우 클래스 만들기 (3) | 2015.03.06 |