WIndows API - #2. Hello World MessageBox 출력하기
이제 윈도우 API를 통해 작은 메세지 박스를 하나 출력해보도록 하겠습니다.
일단 어떤 프로그래밍이던지 그 기본은 Hello World! 를 출력하면서 시작하니 해당 문자를 작은 박스에 먼저
출력해보겠습니다.
[그 동안 우리는 프로그래밍을 하면 여러가지 스타일로 제일 먼저 "Hello World!"를 출력하곤 했다...]
먼저, 그 동안 정들었던 Win32 콘솔 응용 프로그램은 이제 작별을 고하고 Win32 프로젝트 하나를 생성합니다.
[그 동안 고마웠어! Win32 콘솔 응용 프로그램! WIN API 끝나고 또 만나자!]
그럼 이제 "Hello Word!"를 출력해봅시다.
그럼 기존의 C++과 동일한 방법으로 "Hello Word!"를 출력해보면..당연하지만 컴파일 에러가 발생합니다.
"MSVCRTD.lib(crtexew.obj) : error LNK2019: _WinMain@16 외부 기호(참조 위치: ___tmainCRTStartup 함수)에서 확인하지 못했습니다." |
쉽게말해서 메인 함수가 없어 실행이 되지 않는다는 오류입니다.
이 오류는 이전에 C에서도 main 함수 없이 실행하면 발생되는 아래 오류와 동일한 오류 입니다.
"MSVCRTD.lib(crtexe.obj) : error LNK2019: _main 외부 기호(참조 위치: ___tmainCRTStartup 함수)에서 확인하지 못했습니다." |
그럼 정상적인 빌드를 위해서 메인 함수를 만들어 볼까요?
먼저 컴파일러가 시킨대로 그리고 내가 평소에 했던 방식대로 메인함수만 빌드해보겠습니다. (순진무구)
그럼 다음과 같은 컴파일 에러를 확인 할 수 있습니다.
1>c:\users\sanghyuk\documents\visual studio 2010\projects\helloworld\helloworld.cpp(4): warning C4007: 'WinMain' : '__stdcall'이어야 합니다. 1>c:\users\sanghyuk\documents\visual studio 2010\projects\helloworld\helloworld.cpp(4): error C2731: 'WinMain' : 함수를 오버로드할 수 없습니다. 1> c:\users\sanghyuk\documents\visual studio 2010\projects\helloworld\helloworld.cpp(3) : 'WinMain' 선언을 참조하십시오. |
먼저 하나씩 오류가 난 이유를 살펴봅시다.
여기서 순진하게 만든 WinMain 함수에다 마우스를 오버하면 이미 형식이 정해진 WinMain 함수가 어딘가에
지정되어 있다는걸 확인 할 수 있습니다.
처음에도 이야기 했지만 윈도우 API에서 제공하는 함수를 통해 프로그래밍을 진행하는 부분으로 윈도우 API
에서 제공하는 또는 미리 지정된 형식을 참조하면 됩니다.
그럼 정확한 사용을 위해서 우리 마소님에게 문의를 해봅시다.
마소님에게 문의해본 결과 WinMain의 함수는 다음과 같은 형식인걸 알 수 있습니다.
출처 - https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633559(v=vs.85).aspx |
int CALLBACK WinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow ); |
먼저 사용하기에 앞서 매개변수를 확인해보겠습니다.
(해당 페이지의 매개변수에 대한 설명을 발번역 하였습니다. 양해부탁드립니다.)
매개변수 | 의미 |
hInstance | 프로그램의 인스턴트 핸들입니다. |
hPrevInstance | 앞서 실행된 프로그램의 인스턴스 핸들로 이 매게변수는 항상 NULL 입니다. 다른 인스턴스가 이미 존재하는지 여부를 감지해야하는 경우 CreateMutex 를 사용하여 고유한 이름의 뮤텍스를 만들 수 있습니다. (중략) 사용자당 하나의 인스턴트로 프로그램을 제안할때 사용할 수 있습니다. |
lpCmdLine | 프로그맹 명을 제외한 어플리케이션 명령 인수입니다. 명령 인수는 GetCommandLine 함수를 사용 할 수 있습니다. |
nCmdShow | 윈도우가 표시되는 방식을 제어합니다. 해당 주소에 총 11개의 방식이 있습니다.(SW_MINIMIZE , SW_HIDE 등) 자세한 부분은 출처 주소를 참고해주세요. |
자 위와 같이 만들고 빌드해보면 오류가 나지 않는것을 확인 할 수 있습니다.
WIndows API - #2. Hello World MessageBox 출력하기(2) 에 다음 내용이 이어집니다.
'프로그래밍 관련 > Win API' 카테고리의 다른 글
WIndows API - #4. 윈도우창 출력 함수 자세히보기(1) (0) | 2015.08.23 |
---|---|
WIndows API - #3. 윈도우창에 Hello World 출력하기(2) (0) | 2015.08.21 |
WIndows API - #3. 윈도우창에 Hello World 출력하기(1) (4) | 2015.08.21 |
WIndows API - #2. Hello World MessageBox 출력하기(2) (0) | 2015.08.21 |
WIndows API - #1. 기본 (0) | 2015.08.20 |