9.20(목) 이론-1

from Study/API 2007/10/10 21:05 view 32573
1. 자식 윈도우를 만들기
 
  1) 모든 윈도우는 윈도우 클래스로 부터 만든다.
  2) 메시지 처리함수를 만들어야 한다.
  3) WM_CREATE에서 자식윈도우를 생성해줘야 한다.
  4) 처리하지 않은 메시지는 Defxxx 로 전달해줘야 한다.

  4) UI 구축 : 눌린상태 라던가 올려져 있는 상태를 잘 표현 해야 한다.
  5) 자식이 부모에게 사용자 정의 메시지를 보내면 WM_COMMAND( ID, 핸들, 통지코드 )를 읽어 처리가능
  6) 부모는 자식에게 SendMessage 미리 정의된 메시지를 보내면 자식윈도우는 메시 지를 읽어 처리가능
  7) 자식은 부모에게 WM_CTLCOLORBTN 을 보내 색상을 변경 할 수 있도록 한다. (HDC)wparam

2. DLL로 버튼 만들기

  1) 클래스를 등록 한다. InitButton() <= 이것만 export 해준다.
  2) 기본 프로시져 등록. BtnProc()
  3) 프로시저에서 사용하는 함수 등록 Rect3d()

  4) Dll을 import 해서 사용할 때는 InitButtonControl 로 윈도우클래스 등록한다.
  5) 그 후, CreateWindowEx로 생성하면 된다.!!

3. 메뉴

  1) 메뉴도 결국에는 윈도우이다. 여기서 발생하는 메세지는 WM_COMMAND에서 처리한다.
  2) 메뉴에서 나오는 메시지도 자식윈도우가 부모에게 보내는 것 뿐이다.!!!
  3) 그러므로 MENU도 윈도우로 따로 만들어서 다른 프로그램에 적용이 가능하다.

#32768 클래스 메뉴바??
#32770 DialogBox의 클래스 이름

4. 메시지 박스가 부모윈도우를 선택 하지 못하게 되는데 WM_TIMER가 메시지가 돌아가는 이유.

more..


 1) EnableWindow( hwnd, FALSE );  // 부모를 선택 하지 못하게 한다.
 2) 메시지Q에서는 메시지를 계속 읽어오고 있으며 이를 DispatchMessage에서 자식윈도우인 메시지 박스로 메시지를 보내 주는 것 뿐이다.!!

5. TranslateMessage

more..


  1) 쓰레드가 1개라면 MSG Q 도 한개 존재하게 된다.
  2) GetMessage는 이 메세지Q에서 message를 얻어오고 DispatchMessag로 분배한다.
  3) TranslateMessage에서 모든 자식 윈도우에 가는 메시지를 얻을 수 있다. (PreTranslateMessage)

6. Locale Input State
 
  1) 마우스 RIT 는 핸들을 보낸다. ( 핸들을 MessageQ에 넣을 떄 결정하게 된다. )
  2) 키보드는 그 순간에 포커스를 가지고 있는 곳에 message가 들어간다.( 핸들이 MSGQ에 나갈때 결정)

7. SubSystem

  1) 실행시간에 WndProc를 가로채서 중간에 지정한 작업을 수행하도록 한다. Filter역할(바꿔치기)
  2) EditProc = (WNDPROC)SetWindowLong( hEdit, GWL_WNDPROC, (LONG)foo ); // 핵심


Tag | ,

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다