1.1 윈도우 프로그래밍의 개념
윈도우 환경에서의 프로그래밍: 사용자가 발생시키는 이벤트에 의한 메시지를 처리하는 방식으로 실행됨
메시지 기반(message driven), 이벤트 기반(event driven) 프로그래밍
- 윈도우 시스템의 모든 애플리케이션은 메시지(또는 이벤트)를 기반으로 구동됨
- 즉, 윈도우 프로그래밍은 애플리케이션에서 사용자가 발생시키는 메시지에 대한 처리 루틴을 만들어 주는 것
- 메시지: 운영체제인 윈도우가 애플리케이션으로 메시지를 보내는 것 (우리가 작성한 애플리케이션이 윈도우 시스템에 메시지를 보내는 것이 아님)
- 애플리케이션 내의 어떤 함수를 윈도우 시스템이 호출하고, 이 함수의 인자는 특정 메시지를 의미하는 것으로 각자의 애플리케이션에 있는 이 함수를 윈도우 프로시저라고 함
- 결론적으로, 메시지가 발생하면 윈도우 시스템이 메시지에 해당하는 애플리케이션의 윈도우 프로시저를 호출함
1.2 Win32 SDK 윈도우 프로그램의 기본 구조
윈도우 프로그램은 크게 초기화하는 부분과 메시지를 처리하는 부분으로 나눌 수 있음
실제 프로그램에서 초기화 부분은 WinMain() 함수에서 담당하고 메시지를 처리하는 부분은 WndProc() 함수에서 담당함
- 초기화 부분을 담당하는 WinMain() 함수는 먼저 윈도우 클래스를 만들어 등록하고, 그 다음 프레임 윈도우를 생성하여 화면에 표시함
- 클래스: 윈도우의 종류를 나타내는 것으로 단지 윈도우의 특징 등을 정의하고 등록한 후 윈도우를 생성함
- 메시지 큐로부터 메시지를 받아와 메시지를 해당 윈도우 프로시저로 보냄
- 윈도우 프로시저에서는 윈도우 시스템에서 들어온 메시지를 처리함
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTP lpszCmdLine, int nCmdShow)
{
윈도우 클래스 생성
윈도우 클래스 등록
프레임 윈도우 생성
프레임 윈도우 화면에 표시
메시지 큐로부터 메시지를 받아 해당 프로시저로 보냄
}
- hInstance: 애플리케이션 프로그램의 ID
- hPrevInstance: 같은 프로그램이 이전에 구동되었을 때 설정되는 인스턴스 핸들
- lpszCmdLine: 프로그램을 구동할 때 같이 들어오는 매개 변수로 실행 파일의 경로 등을 나타내는 문자열 포인터
- nCmdShow: 윈도우가 처음 화면에 표시될 때 최대화, 최소화 또는 정상 상태로 보여줄 것인지를 결정해주는 매개변수
메시지를 처리하는 부분을 담당하는 WndProc() 함수는 윈도우 시스템에서 들어온 메시지를 switch 문을 이용하여 처리하는 루틴이며, 함수 이름에 Proc가 붙으면 주로 메시지를 처리하는 함수로 윈도우 클래스마다 필요함
LRESULT CALLBACK WndProc(HWND hwnd, UNIT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
해당 메시지에 대한 처리
}
}
- LRESULT는 결괏값을 저장하는 32bit 자료형
- CALLBACK 함수는 뒤에서 어떤 메시지에 의해 감추어진 형태로 구동되는 함수라는 의미로 역으로 호출받는 함수
- WndProc() 함수는 WinMain() 함수에서 직접 호출하는 코드는 없음
- WndProc() 함수는 CALLBACK 함수이므로 WinMain() 함수의 while 메시지 루프에 의하여 뒤에서 감추어진 상태로 구동됨
- 실제로 WndProc() 함수를 호출하는 함수는 메인 메시지 루프의 DispatchMessage() 함수임
- WndProc() 함수의 첫번째 매개변수 hwnd는 윈도우 핸들이고, 두번째 매개변수 message는 WinMain() 함수에서 보내주는 메시지임
- wParam과 lParam는 메시지와 함께 필요한 정보가 들어오는 매개변수임
실습
LPCSTR의 의미를 알고 싶어 찾아봤다.
- LP: long pointer의 약자
- C: constant의 약자로 변경을 하지 말라는 의미로 사용됨
- STR: string, 내부적으로는 char형 배열에 마지막 종료값 null을 가지고 있음
- W: wide char를 나타내고, 유니코드
처음에는 빨간줄이 엄청 많았는데, 유니코드를 멀티바이트로 변경하니 해결됐다.
'New > MFC 윈도우 프로그래밍' 카테고리의 다른 글
3. 메시지 처리 (1) (0) | 2024.12.08 |
---|---|
2. MFC 개요 및 아키텍처 (2) (0) | 2024.12.07 |
2. MFC 개요 및 아키텍처 (1) (0) | 2024.12.02 |
1. 윈도우 프로그래밍의 이해 (3) (3) | 2024.11.29 |
1. 윈도우 프로그래밍의 이해 (2) (0) | 2024.11.26 |