API리소스 사용에 대한 첫번째,
가장 먼저 메뉴를 만들고, 그 메뉴에 단축키를 생성한다.
리소스 파일의 구조,
#define IDR_MENU1 101
#define IDR_ACCELERATOR1 102
#define ID_FILE_OPEN40001 40001
#define ID_FILE_CLOSE40002 40002
#define ID_FILE_EXIT 40003
#define ID_EDIT_EDIT1 40004
#define ID_EDIT_EDIT2 40005
메뉴의 구조
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("Resource");
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( COLOR_WINDOW+1 );
WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
WndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
// 메뉴를 사용 하기 위해서 메뉴의 IDR을 적어준다.
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 );
// 메뉴 단축키를 위한 부분
HACCEL hAccel; // HACCEL형으로 변수를 만들고,
// hAccel에 LoadAccelerators를 IDR_ACCELERATOR1로 해준다.
hAccel = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDR_ACCELERATOR1 ) );
while( GetMessage( &Message, NULL, 0, 0 ) )
{
// 앞으로 메시지를 보내게 될 때, 단축키에 대한 메시지를 먼저 따로 처리를 해야할 것이다.
if( !TranslateAccelerator( hWnd, hAccel, &Message ) )
{ // 앞으로 메시지는 단축키를 제외한 메시지들을 넘겨주어야 한다.
TranslateMessage( &Message );
DispatchMessage( &Message );
}
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
switch( iMessage )
{
// 메뉴에 대한 행동들을 관리하는 WM_COMMAND:
case WM_COMMAND:
// wParam의 LOWORD는 메뉴의 ID를 가지고 있다.
switch( LOWORD( wParam ) )
{
// FILE->OPEN을 선택했으면,
case ID_FILE_OPEN40001:
MessageBox( hWnd, TEXT("FILE OPEN"), TEXT("File"), MB_OK );
break;
case ID_FILE_CLOSE40002: // close면
MessageBox( hWnd, TEXT("FILE CLOSE"), TEXT("File"), MB_OK );
break;
case ID_FILE_EXIT: // exit면
DestroyWindow( hWnd ); // exit를 해주게 되면,
// DestroyWindow를 함으로써 윈도우 종료를 하게 된다.
// PostQuitMessage(0); 를 직접적으로 사용해서는 안된다.
break;
case ID_EDIT_EDIT1:
MessageBox( hWnd, TEXT("EDIT1"), TEXT("Edit"), MB_OK );
break;
case ID_EDIT_EDIT2:
MessageBox( hWnd, TEXT("EDIT2"), TEXT("Edit"), MB_OK );
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return( DefWindowProc( hWnd, iMessage, wParam, lParam));
}
// 실행 화면
설명 : 메뉴를 출력하였고, 단축키를 누르면 메뉴에 대한 행동들(메시지박스)이 표시된다.
'프로그래밍 > API' 카테고리의 다른 글
API-resource(3) (0) | 2010.04.21 |
---|---|
API-resource(2) (0) | 2010.04.21 |
API-작업 영역 (0) | 2010.04.21 |
API-일회용 타이머 (0) | 2010.04.21 |
API-무한의 작업을 위한 타이머(2) (0) | 2010.04.21 |