[ Win32 API ] 윈도우 생성 과정에서 "프로그램 인스턴스의 핸들" 은 왜 지정하나요 ?
윈도우를 생성하는 과정에서 ..
윈도우 클래스 (WNDCLASS) 의 hInstance 멤버에.. 프로그램 인스턴스의 핸들을 지정하는 것은 ..
어떤 의미가 있는 건가요 ?
아울러, CreateWindow() 의 전달 인자로도, 프로그램 인스턴스의 핸들을 전달하는데요 ..
어떤 의미가 있는 건가요 ?
혹자의 말씀에 따르면 ..
윈도우 클래스와 윈도우의 파괴 시기를 결정하기 위함이 목적이라고 하는데요 .
(즉, 프로그램 인스턴스가 파괴될 때 .. OS 는 이와 관련된 '윈도우 클래스', '윈도우' 를 ..
파괴해야 하기 때문 .. 이라고 함)
헌데, 제가 이런 테스트를 해 보았어요 .
WNDCLASS wc; wc.hInstance = (HINSTANCE) 133 ; // 핸들값을 대충 아무 아무렇게나 지정 /* 중략 .. */ CreateWindow( ... , (HINSTANCE) 4216 , ...); // 핸들 값을 대충 아무렇게나 지정
세 가지 컴파일러로 테스트한 결과 ..
모두 ..
정상적으로 빌드되었고, 정상적으로 실행되 되었습니다 .
또한, "작업 관리자" 를 이용해 프로그램을 종료하니까 ..
'윈도우' 도 정상적으로 파괴되었습니다 .
역으로, 윈도우를 닫아도 .. 프로그램 인스턴스가 정상적으로 파괴되었습니다 .
(물론, 윈도우 프로시저에 WM_DESTROY 메시지가 발생하면, 프로그램 인스턴스가 종료되록 코딩되어 있습니다)
아울러, '윈도우' 에 발생한 메시지도 .. 모두 윈도우 프로시저에 정상적으로 전달 되었고요 ^^ ;;;;;;;;;;;;;;;
비록, 기본적인 코드로만 테스트했지만 ..
모든 게 정상이었습니다 ;;;
윈도우 생성 과정에서 .. 윈도우 클래스의 hInstance 멤버와, CreateWindow() 의 인자로 ..
프로그램 인스턴스의 핸들을 지정해주는 이유가 무엇인지 좀 알려주셔요 ... ㅠㅠ
참고로, 핸들 값 지정에 있어 .. 정상적이지 않은 값으로 지정할 경우 ..
문제가 되는 상황은 딱 하나가 있는데요 ..
다만, 핸들값을 멋대로 지정하는 부분에 있어서 ..
예외가 딱 한 가지 있는데 .. 아래처럼 지정했을 경우에 그러합니다 .
윈도우 클래스의 hInstance 를 0 으로 지정하고,
CreateWindow() 호출 할 때는, 0이 아닌 핸들 값을 넘겼을 경우 .
이 경우 .. 빌드는 정상적으로 되지만, 실행이 안되더군요 .
긴 글 읽어주셔서 감사합니다 ^^ ;;;
옛날 옛적, win32
옛날 옛적, win32 이전의 태고적에 모든 프로세스가 같은 주소 공간에 존재하던 win16 상황에서 (Windows 3.1) 필요한 값이었습니다.
이 값은 프로세스의 베이스 어드레스라고 알고 있고, 지금은 각 프로세스별로 (서로 전혀 모르는) 독립된 주소공간을 가지기 때문에, 사실상 의미없는 값입니다.
다만, 예전 코드와 호환을 위해서거나 귀찮아서거나 인자의 널 체크는 하도록 되어 있겠죠.
댓글 달기