로그인

검색

API/MFC
2013.07.28 03:40

HWND와 HINSTANCE

MoA
조회 수 1321 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄

HWND / HINSTANCE

 

HINSTANCE는 프로그램의 핸들이 아니라, 프로그램 코드를 담고 있는 모듈에 대한 핸들이다. 즉, 프로그램이 수행되려면 프로그램 코드를 담고 있는 파일을 메모리의 특정 영역에 올려서 명령을 하나식 읽어가면서 수행할 수 있도록 준비해 놓아야 한다.

 

이렇게 메모리에 올려진 프로그램 코드 덩어리를 윈도우에서 관리하기 위해서 일종의 고유 식별 번호를 부여하는데, 이것이 인스턴스 핸들, HINSTANCE이다. 기본적으로 프로세스를 실행하는 실행파일의 코드를 메모리에 올려놓은 모듈이 하나 있어야 하므로, 실행 파일의 모듈에 대한 인스턴스 핸들을 OS가 어플리케이션 WindMain의 인자로 넘겨주는 것이다.

 

한 프로세스가 여러개의 모듈을 로딩하여 프로그램을 실행하고 있다면 하나의 프로그램이 여러개의 인스턴스 핸들을 할당받아 쓰고 있을 수 있다.(물론 한 개의 모듈을 여러 프로세스가 공유하고 있을 수도 있다.) 대표적인 예가 바로 IE인데, 간단하게 DLL파일 한 개를 쓸 때마다 이 DLL 모듈에 대한 인스턴스 핸들이 한 개씩 생긴다고 보면 된다. 물론 DLL이 한번 로딩되면 다른 프로그램 사이에서 공유된다.

 

한 개의 프로그램에서 HINSTANCE가 한 개만 있는 것이 아니며, 또한 하나의 인스턴스 핸들이 한 개의 프로그램에만 종속되는 것이 아니므로 어떤 프로그램의 출력 대상을 지정하는 데에는 부적적하다는 점을 알 수 있다. 물론, 인스턴스 핸들은 애초부터 화면 출력을 고려햐여 만들어진 식별자는 아니며 단지 프로그램 코드 덩어리를 관리하기 위해 만들어진 리소스이다.

 

윈도우라는 OS에서 화면 출력을 위해 관리하는 리소스가 바로 HWND이다. MSN 메신저 등을 보면 알겠지만 하나의 프로그램이 하나의 창을 사용한다는 보장은 없다. 오히려 99.99%의 프로그램은 한 개 이상의 윈도우로 구성되어 있다. 한 프로그램의 윈도우가 겉보기에는 단일한 대상 영역으로 보일지라도 실제로는 구성요소별로 분리하여 별개의 윈도우로 만들어 각 윈도우는 자기 자신이 맡은 부분에 대한 화면 출력과 사용자 입력만을 담당한다. 자연히 하나의 프로그램에서 사용하는 HWND 타입의 개체 역시 1개 이상이 될 수 밖에 없으며, 이러한 상황에서 특정 위치에 특정한 동작을 수행하기 위해서는 HWND로 대상 영역을 구분할 수 밖에 없다.

 

 

 

(출처 : 'API에서 HINSTANCE와 HWND에 대한 질문입니다.' - 네이버 지식iN)


http://blog.naver.com/smeve117/100032718230

?

  1. Programming 게시판 관련

    Date2014.11.01 CategoryTool/etc ByMoA Views5726
    read more
  2. pthread

    Date2013.07.28 CategoryLibrary ByMoA Views758
    Read More
  3. HWND와 HINSTANCE

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1321
    Read More
  4. 컨텍스트 스위칭 (Context Switching)

    Date2013.07.28 CategoryTool/etc ByMoA Views1878
    Read More
  5. __cdecl , __pascal, __stdcall

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1348
    Read More
  6. fopen 함수가 Multi Thread 에서 안전한가?

    Date2013.07.28 CategoryC/C++ ByMoA Views1504
    Read More
  7. memset vs for 초기화. 속도 차이가 얼마나 날까?

    Date2013.07.28 CategoryC/C++ ByMoA Views1652
    Read More
  8. unsigned char <-> 유니코드(unicode) 및, string 변환 매크로 - USES_CONVERSION

    Date2013.07.28 CategoryAPI/MFC ByMoA Views2471
    Read More
  9. Redmine 설치

    Date2013.07.28 CategoryTool/etc ByMoA Views1210
    Read More
  10. MFC 클래스 멤버함수 설명서

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1931
    Read More
  11. Direct3D 9 compile

    Date2013.07.28 CategoryGraphic ByMoA Views833
    Read More
  12. Data Conversions

    Date2013.07.28 CategoryC/C++ ByMoA Views1082
    Read More
  13. 다른 스레드에서 메인다이얼로그 포인터 받아오기 AfxGetMainWnd()

    Date2013.07.28 CategoryAPI/MFC ByMoA Views2692
    Read More
  14. 파일 입출력

    Date2013.07.28 CategoryC/C++ ByMoA Views1235
    Read More
  15. char*, String, CString

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1296
    Read More
  16. CreateThread, ExitThread, GetExitCodeThread ...

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1349
    Read More
  17. Thread와 SendMessage를 통해 DeadLock을 만드는 방법

    Date2013.07.28 CategoryAPI/MFC ByMoA Views3109
    Read More
  18. 작업자 스레드(Worker Thread) 와 사용자 인터페이스 스레드(User Interface Thread)

    Date2013.07.28 CategoryAPI/MFC ByMoA Views968
    Read More
  19. WaitForSingleObject와의 삽질..

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1292
    Read More
  20. 스레드(CreateThread), EVENT 동기화

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1716
    Read More
  21. 스레드 강좌 + CreateThread() 와 _beginthreadex() 함수의 차이

    Date2013.07.28 CategoryAPI/MFC ByMoA Views1523
    Read More
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 15 Next
/ 15