- 개념 : 사용자가 발생시키는 이벤트에 대한 메시지를 처리하는 것
- WinMain 함수
함수원형과 초기화 내용
Int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpszCmdLine, int nCmdShow)
{
- Procedure
윈도우는 Message Driven 방식
메시지를 처리하는 함수를 procedure라 한다
보통 함수명 다음에 Proc가 붙으면 프로시저로 보면된다
프로시저는 여러개가 될수 있다
- WinProc 함수
윈도우에서 들어온 메시지를 switch 문을 이용하여 처리하는 루틴이다
LRESULT CALLBACK WinProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
Switch(iMsg)
{
해당 메시지에 대한 처리
}
}
* 간단한 Win32 SDK 프로그램 만들기
1 - WIN32 SDK 프로젝트 만들기
2 - 프로젝트에 소스 파일 삽입
3 - 추가한 파일에 소스코드 입력
4 - 프로그램 실행
- 프로그램 분석
Windows.h 파일
- 이 파일은 윈도우 애플리케이션을 작성하는데 필요한 매크로, 각종 API함수 ,메시지등이 선언된 헤더파일이다
WinMain() 함수
- 운영체제에 윈도우를 생성하고 등록한다
- 메모리에 프레임 윈도우를 생성하고 속성을 초기화하여 화면에 표시될수 있도록 한다
- 메시지 루프를 생성하여 해당 윈도우에 대한 메시지를 메시지 큐로부터 받아와 메시지를 해당 윈도우 프로시저로 보낸다
WNDCLASS WndClass;
WndClass.style =CS_HREDRAW | CS_VREDRAW
WndClass.lpfnWndProc =WndProc;
WndClass.cbClsExtra= 0;
WndClass.cbWndExtra =0
WndClass.hInstance =hInstance;
WndClass.hIcon =LoadIcon(NULL, IDI_APPLICATION
WndClass.hCursor =LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground =GetStockObject(WHITE_BRUSH
WndClass.lpszMenuName =NULL;
WndClass.lpszClassName = szAppName;②윈도우 클래스를 등록한다.
RegisterClass(&WndClass);
hwnd = CreateWindow( // 윈도우 생성 함수
szAppName, szTitleName, // 타이틀 바에 출력될 문자열
WS_OVERLAPPEDWINDOW,// 윈도우 스타일
CW_USEDEFAULT, // 윈도우 좌측 상단의 x좌표
CW_USEDEFAULT, // 윈도우 좌측 상단의 y좌표
CW_USEDEFAULT, // 윈도우의 너비
CW_USEDEFAULT, // 윈도우의 높이
NULL, // 부모 윈도우의 핸들
NULL, // 메뉴 또는 자식 윈도우의 핸들
hInstance, // 애플리케이션 인스턴스 핸들
NULL // 윈도우 생성 데이터의 주소
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
// 가상 키 메시지를 문자 메시지로 변환한다.
TranslateMessage(&msg);
// 메시지를 해당 윈도우 프로시저로 보낸다.
DispatchMessage(&msg);
}윈도우에 텍스트 출력하기
TextOut() 함수
- 기본적인 텍스트 출력
BOOL TextOut(
HDC hdc, // 디바이스 컨텍스 핸들
int nXStart, // 문자 출력 시작점 X 좌표
int nYStart, // 문자 출력 시작점 Y 좌표
LPCTSTR lpString, // 출력할 문자열
int cbString // 문자열의 길이
);
DrawText() 함수
- 문자를 출력할때 어느 영역을 정하고 이 영역에 출력하는 함수
§함수의 원형
Int DrawText(
HDC hdc, // 디바이스 컨텍스 핸들
LPCSTR lpString, // 출력할 문자
int nLength, // 출력할 문자의 수
LPRECT lpRect, // 출력할 영역
UINT Flags // 출력 형식 플러그
);
출력형식 플러그
- MSG 구조체
메시지큐에 저장되는 정보를 담고 있는 구조체
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
typedef struct _WNDCLASS {
UINT style; // 윈도우의 스타일을 지정한다.
WNDPROC lpfnWndProc; // 윈도우 프로시저에 대한 포인터를 지정한다.
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance; // 프로그램 자체에 대한 핸들을 지정한다.
HICON hIcon; // 윈도우에서 사용될 아이콘에 대한 핸들을 지정
HCURSOR hCursor; // 윈도우에서 사용할 커서에 대한 핸들을 지정
HBRUSH hbrBackground; // 윈도우의 백그라운드 브러시에 대한 핸들 지정
LPCTSTR lpszMenuName; // 윈도우에서 메뉴의 이름을 지정하며,
// 리소스에서 사용된다.
LPCTSTR lpszClassName; // 윈도우 클래스의 이름을 명시한다
} WNDCLASS;
-RECT 구조체
사각형 형태의 좌표를 지정하는 구조체
typedef struct tagRECT {
LONG left; // 맨 왼쪽의 좌표를 명시한다.
LONG top; // 맨 위쪽의 좌표를 명시한다.
LONG right; // 맨 오른쪽의 좌표를 명시한다.
LONG bottom; // 맨 아래쪽의 좌표를 명시한다.
} RECT;'Study > C++' 카테고리의 다른 글
구조체를 이용한 성적계산 (0) | 2011.09.03 |
---|---|
정수 2개를 받고 1부터 첫번째 입력 받은 수까지 2번째 입력받은 수의 배수의 합이 모두 얼마인지를 출력 (0) | 2011.09.03 |
자료구조란?? (0) | 2011.09.03 |
1000까지 짝수의 평균 (0) | 2011.09.02 |
1~15 계단형 배열 (0) | 2011.09.02 |