본문 바로가기

전자 공학/MFC

[MFC 독학하기] 2. SDK 프로그램, HINSTANCE, HWND

반응형

안녕하세요. 취업한 공대누나입니다.

오늘은 SDK 프로그램 기본 구조에 대해 살펴보도록 하겠습니다.

그럼과 동시에 간단하게 창을 하나 띄워보도록 할건데요.

새로운 것을 배우는 것이라 기분이 좋고 설렙니다

시작해보겠습니다.

 

 

우선 오늘 작성한 프로그램의 결과 창은 아래와 같습니다.

Hello, SDK 라는 창이 띄워져있고, 마우스를 클릭하면 다음과 같은 창이 뜨게 됩니다.

 

저는 사실 C언어 밖에 해보지 않아서 이러한 윈도우 프로그래밍이 조금은 낮선데요.

C언어랑 대표적으로 큰 차이점을 보이는 것부터 천천히 설명해보도록 하겠습니다.

 

우선 main 함수입니다. 

C언어에서는 int main 이런식으로 했다면 여기서의 메인 함수는 아래와 같습니다.

 

1. WinMain 함수

int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

와 정말 긴데요.

오늘은 main 함수를 위주로 차근차근 살펴보도록 하겠습니다.

 

우선 처음에는 <windows.h>를 include 하였습니다.

 

windows.h는 윈도우 개발자들이 필요한 모든 매크로들, 다양한 함수들과 서브시스템에서 사용되는 모든 데이터 타입들 그리고 윈도우 API 함수들을 위한 정의를 포함하는 윈도우의 C및 C++ 헤더 파일이라고 합니다.

즉 여러 헤더파일을 포함하고 있는 헤더 파일이라고 보시면 됩니다.

 

위의 사진속을 보시면 HINSTANCE, HWND와 같이 생소한 데이터 타입을 볼 수 있습니다.

이러한 것들이 무엇인지 차례대로 보도록 하겠습니다. 

 

1) HINSTANCE

HINSTANCE는 Handle Instance입니다.

프로그램의 인스턴스 식별자로, 쉽게 보면 프로그램이 메모리 상에 올라가 있는 시작 주소 값을 가지고 있습니다.

해당 메모리 주소에 실행 모듈이 올라가 있다는 것을 의미합니다.

 

hInstace는 실행 파일의 위치를 나타내는 주소값이고,

hPrevInstance는 16비트 윈도우의 잔재로, 항상 NULL 값을 가집니다.

 

lpCmdLine은 명령행 인자를 담고 있는 문자열로 프로그램 외부에서 받아오는 인자를 설정한다.

nCmdShow는 응용프로그램의 출력 형태를 결정하는 것으로, 프로그램이 시작할 때의 윈도우 모양을 나타냅니다.

 

 

그런 다음 윈도우 클래스 구조체 변수, HWND 구조체 변수, 메시지 구조체 변수를 선언해주게 됩니다.

WNDCLASS wndclass
HWND       hwnd;
MSG          msg;

윈도우 클래스 구조체의 멤버는 아래와 같습니다.

윈도우 클래스는 생성할 윈도우의 특성을 나타내는 다양한 요소로 이루어져 있습니다.

몇 가지만 설명을 해보도록 하겠습니다.

우선 가장 중요한 것은 바로 lpfnWndProc입니다.

일종의 함수 포인터로 응용 프로그램의 윈도우가 운영체제로부터 받은 메시지를 처리할 사용자 정의 함수를 가리킵니다.

 

그 다음으로는 lpsdzClassName 또한 중요한 멤버입니다.

윈도우 클래스의 이름을 지정해주는 것으로, 여기서 지정한 이름이 CreateWindow에 전달이 되게 됩니다.

 

윈도우 클래스를 등록하고 나면 응용 프로그램은 특성이 동일한 윈도우를 여러 개 생성할 수 있습니다.

이렇게 생성된 윈도우에서 발생한 메시지는 하나의 윈도우 프로시저에서 처리하게 됩니다.

2) HWND

HWND 는 Handle Window의 약자입니다.

윈도우의 핸들번호를 저장해서 하나의 프로그램에서 많은 양의 윈도우를 띄울 수 있게 합니다.

즉 윈도우창의 번호들로 구분하는 것으로 화면 출력을 위해 관리하는 리소스입니다.

 

 

워후 처음 공부하는 것인데 너무 무리하면 금방 질릴 것 같아서 오늘은 이정도만 하겠습니다.

앞으로 MFC를 자유자재로 할 수 있는 능력을 갖춘 엔지니어가 될 것 입니다.

반응형