본문 바로가기
프로그래밍/API

API-resource(1)

by 리뷰하는 (게임)프로그래머_리프TV 2010. 4. 21.




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