#20. 핸들에 대하여

핸들이란 MFC로 프로그래밍을 하기 이전에 Windows 프로그래머들이 주로 사용했었던 API 함수만을 위한 객체입니다. 사실 MFC에 들어와서부터는 이 핸들이라는 객체를 잘 쓰지 않게 되었습니다. 하지만, 아주 가끔이라도 API 함수를 중요할 때에 사용해야 하는데 이 때 이 핸들이라는 것을 모르면 곤란할 수도 있습니다.


핸들은 32비트 정수형이 실제 문법적인 값이지만 프로그래머의 편의 상 핸들이라는 독립적인 객체를 두었습니다. 예전에 TC++에서도 이 핸들이라는 개념이 존재하였습니다만, 그것은 어디까지나 FILE 구조체에서만 사용하는 파일 전용 핸들이었습니다. 하지만 Windows에서는 그렇지 않습니다.


Windows에서 말하는 핸들은 범용적입니다. 하나씩 띄워주는 창과 컨트롤에 핸들이 꼬리표처럼 따라붙습니다. 보이는 모든 것들은 다 핸들을 가지고 있다고 해야 올바른 표현이 될 겁니다. 심지어는, 메모리에 선언되는 인스턴스 조차도 핸들을 가지고 있습니다.


강의에서 ::GetWindowsDirectory()와 같은 API 함수에 대해서 언급한 적이 있었는데 이런 API 함수에서도 핸들을 응용할 수 있습니다. 이것은 비교적 MFC와 근접해있는 수준의 편리한 API 함수들이지만 정말 고전적인 ::CreateFile()과 같은 API 함수는 핸들값이 주어지지 않았을 때는 무용지물이 되어버립니다.


일반적으로 핸들은 다음과 같이 선언될 수 있으며 조건부에 의하여 핸들 객체명이 조금씩 다를 수 있습니다.


HANDLE hObj;


HWND hWnd;


그리고 실제로 작성된 핸들은 API 함수에서 핸들을 기입해 주어야 하는 파라미터 위치에서 사용하기만 하면 됩니다. 그리고 사용자는 그 핸들값을 응용하여 원하는 프로세스를 작성하면 되는 것입니다.

댓글 남기기