WINAPI - 리소스(메뉴 생성 첫번째)
#include<windows.h>
#include "MsgProc.h" // add
#include "resource.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//HINSTANCE g_hInst;
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("Menu");
// add
typedef struct MESSAGEMAP
{
UINT iMessage;
LRESULT (*lpfnMsgProc)(HWND, WPARAM, LPARAM);
}MESSAGEMAP;
////////////////////////////
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)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
//WndClass.lpszMenuName = NULL;
WndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
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);
while(GetMessage(&Message, NULL, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
//add
int i;
static MESSAGEMAP MessageMaps[] = {
{WM_CREATE, OnCreate},
{WM_COMMAND, OnCommand},
{WM_LBUTTONDOWN, OnLButtonDown},
{WM_DESTROY, OnDestroy}
};
for(i=0; i<sizeof(MessageMaps)/sizeof(MessageMaps[0]);++i)
{
if(MessageMaps[i].iMessage == iMessage)
{
return (*MessageMaps[i].lpfnMsgProc)(hWnd, wParam, lParam);
}
}
///////////////////////////
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
//MsgProc.cpp
#include "MsgProc.h"
#include "resource.h"
LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
return 0;
}
LRESULT OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
switch(LOWORD(wParam))
{
case ID_FILE_MENU1:
MessageBox(hWnd, TEXT("
첫
번째
메뉴를
선택했습니다."), TEXT("Menu Demo"), MB_OK);
break;
case ID_FILE_MENU2:
MessageBox(hWnd, TEXT("
두
번째
메뉴를
선택했습니다."), TEXT("Menu Demo"), MB_OK);
break;
case ID_FILE_EXIT:
DestroyWindow(hWnd);
break;
}
return 0;
}
LRESULT OnLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
return 0;
}
LRESULT OnDestroy(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
#ifndef __MSGPROC_H_
#define __MSGPROC_H_
#include<windows.h>
LRESULT OnCreate(HWND, WPARAM, LPARAM);
LRESULT OnCommand(HWND, WPARAM, LPARAM);
LRESULT OnLButtonDown(HWND, WPARAM, LPARAM);
LRESULT OnPaint(HWND, WPARAM, LPARAM);
LRESULT OnDestroy(HWND, WPARAM, LPARAM);
static TCHAR str[256];
extern HINSTANCE g_hInst;
#endif
→ 출력 결과
→ 출력 결과
'내장형 하드웨어 > WINAPI' 카테고리의 다른 글
WINAPI - 그래픽(색상) (0) | 2011.09.08 |
---|---|
WINAPI - 그래픽(GDI 오브젝트) (0) | 2011.09.07 |
WINAPI - WM_COMMAND (0) | 2011.09.06 |
WINAPI - 소스분석 첫번째 (0) | 2011.08.22 |
WINAPI - 변수 명명 법, 유니코드, 윈도우 생성 첫번째 (0) | 2011.08.18 |