'Study/API'에 해당되는 글 37건

  1. 2007/10/10 9.20(목) 이론-1
  2. 2007/10/10 9.20(목) 실습-2
  3. 2007/10/10 9.20(목) 실습-1
  4. 2007/10/10 9.19(수) 이론-1
  5. 2007/10/10 9.19(수) 실습-2
  6. 2007/10/10 9.19(수) 실습-1
  7. 2007/10/10 9.18(화) 이론-1
  8. 2007/10/10 SetLayeredWindowAttributes
  9. 2007/10/10 9.18(화) 실습-2( SystemparameterInfo )
  10. 2007/10/10 9.18(화) 실습-1

9.20(목) 이론-1

from Study/API 2007/10/10 21:05 view 30205
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 | ,

9.20(목) 실습-2

from Study/API 2007/10/10 20:26 view 19516
1. Control 사용해보기

more..



2. 사용자가 x키보드를 누를때 프로그램 종료( Messag loop 에서 하도록 함)

more..


3. 서브클래싱 구현( edit control 의 "ABCDEF" 를 쓰지 못하게 중간에서 가로챔 )

more..


Tag | ,

9.20(목) 실습-1

from Study/API 2007/10/10 20:00 view 19647
1. 버튼 자식윈도우 만들기 ( 가칭 : MyButton )

more..


2. 메시지 박스에 static text 쓰기 ( 10초 지나면 자동으로 닫기 )

more..


3. Button Control Dll 로 만들어 보기 cpp

more..


4. Button Control Dll 로 만들어 보기 .h

more..


5. Button Dll 사용하기

more..


Tag | ,

9.19(수) 이론-1

from Study/API 2007/10/10 19:20 view 19019
1. 무효화 영역과 WM_PAINT

  1) 무효환 영역 ? 윈도우가 다른 윈도우에 가려 있다가 앞으로 나올 때 다시 그려야 하는 영역
  2) size 조절시 윈도우 전체가 무효화 : 윈도우 클래스에 CS_HREDRAW | CS_VREDRAW style을 줘야함.
  3) InvalidateRect() : 사용자가 윈도우의 특정영역을 무효화 한다. TRUE or FALSE(강추!!)

2. 무효화 영역 발생시 OS가 하는일

  1) WM_PAINT 메시지를 전달한다.( OS가 Application에 전달, App는 무효화영역을 기억해야 한다. )
  2) 메시지 Q에  QS_PAINT 형태로 flag가  1일때 GetMessage 로 꺼내온다.
  3) ValidateRect 나 BeginPaint 로 유효화영역으로 바뀌게 되면 flag 는 0 이된다.
  4) BeginPaint : Caret 숨김, 유효화 영역.. 기본적으로 해야 하는것들을 해준다.
 
3. 화면떨림방지( Flicker 방지 )
 
  1) RECT rc = ps.rcPaint;  // 무효화 영역의 크기를 받아서 꼭 필요한 곳만 그릴 수 있다.
  2) 더블 버퍼링 ( 좌표 대신에 비트맵으로 보관해 놓는다. ) ***해결책**
  3) 무효화 영역을 꼭 지워야 할까 ?
    - wc.hbackground = 0; // 윈도우 클래스의 백그라운드색을 0으로 해놓는다.
    - 배경을 지우라는 메시지를 가로채서 WM_ERASEBKGND 아무일도 못한게 한다.

4. 알아 둘 것.

  1) 항상 윈도우에 보여주고 싶다면 WM_PAINT 내에서 호출한다.
  2) 출력을 Update 하고 싶다면 무효화 영역을 만들어야 한다. InvalidateRect
  3) 화면에 즉시 뿌리고 싶다면
    - UpdateWindow() => if( msgQ has WM_PAINT ) WndProc( HWND, WM_PAINT )


1. GDI Object
 
  1) 생성 => 선택 => 선택해지 => 파괴 의 순서를 지켜야 한다.
  2) SelectObject( Createxxx() )
  3) DeleteObject( SelectObject() )
  4) StockObject 는 OS가 미리 만들어 놓은 Object 이므로 GetStockObject로 얻은 것은 파괴하면 안된다!!!
 
2. Region

  1) 영역 생성             CreatexxxRgn()   // 다양한 모양이 생성가능
  2) 영역 합치기          CombineRgn()     // RGN_AND,RGN_COPY 등 다양한 모드 지원
  3) 적용 하기             SetWindowRgn()
  4) 영역 해지             DeleteObject()

3. 그리기 모드

  1) 선의 색은 배경색과 DC의 PEN의 색을 비트연산하여 나오는 것이다.( | , & )
  2) a | 흰색(1111)  => 흰색 , a & 흰색(1111) => a  // 어떤 연산을 할 것인지를 정하는게 그리기모드의 핵심!!
  3) R2_NOT 은 bending 효과를 구현 할 수 있다. 선잡고 움직이기.

2007/10/10 - [Study/API] - 9.19(수) 실습-1
2007/10/10 - [Study/API] - 9.19(수) 실습-2

Tag | ,

9.19(수) 실습-2

from Study/API 2007/10/10 18:49 view 18656
1. 그리기 모드를 사용하여 선그리기.

more..


2. Region의 활용

more..



3. WM_PAINT(1) : 마우스 움직일때마다 사각형 그리고 계속 그려주기.

more..


4. WM_PAINT2

more..




Tag | ,

9.19(수) 실습-1

from Study/API 2007/10/10 18:28 view 18535
1. GDI Object 기본

more..



2. 지뢰찾기 기본 모양 만들어보기( Draw3dRect 함수가 핵심 )

more..


Tag | ,

9.18(화) 이론-1

from Study/API 2007/10/10 17:54 view 20807
1. Mouse, 키보드에 대한 이야기

- RIT는 항상 자기와 연결된 Thread의 ID를 보관하고 있는데 이를 Foreground Thread 라고 한다.(하나존재)
- 마우스 : WindowFromPoint , 키보드 : Foreground Thread로 전달한다.( PostThreadMessage(ID) )
- RIT는 쓰레드 ID만 보고 ID에 해당하는 메시지 Q에 전달하면 GetMessage 로 메시지를 꺼내 DispatchMessage 를 사용해서 해당 WndProc에 메시지를 보낸다. 현재 포커스에 입력되게 된다.

- Activate(활성창)은 최상위 윈도우가 관리하고, Focus는 Top-leve 윈도우단위로(스레드) 관리하게 된다.

- 키보드 => Scan Code:Hardware => 드라이버에서 가상키코드로 변환(대소문자x) => WM_KEYDOWN  => TranslateMessage 가상키코드를 분석하여 대소문자를 구분시켜준다.=> Focus에 입력

- 키보드 메시지 종류 ( wparam : 가상키코드, lparam : 스캔+a )
  1) WM_KEYDOWN
  2) WM_KEYUP
  3) WM_SYSKEYDOWN  (ALT
  4) WM_SYSKEYUP
  5) WM_SYSCHAR
- CTRL+ALT+DEL, ALT+TAB.. RIT가 시스템으로 넘겨주게 된다.

- TranslateMessage : 가져온 메시지가 키보드 메시지이고 wParam의 키가 문자키라면 WM_CHAR메세지를 Q에 넣는다.!!
- 문자키 : WM_CHAR,      기능키 : WM_KEYDOWN

- 키보드 상태조사 ( 상위 8비트 : 일반키 상태 , 하위 8비트 : 상태키 )
  1) GetKeyState( VK_SHIFT ) & 0xFF00 ) // 시프트와 왼쪽 마우스클릭조사
      : 마우스, 키보드 메시지 처리를 한다. 현재 키보드상태를 조사한다.
  2) GetAsyncKeyState( 가상키코드 )

- 캐럿은 개별 스레드자원이므로 Focus를 얻을 때 생성, 잃을 때 파괴 해줘야 한다.
   : 감추고 파괴해야 Caret 내부에 있는 문자가 깨질 우려가 없다.
- 커서는 시스템 자원이므로 관여 할 필요 없다.

2007/10/10 - [Study/API] - 9.18(화) 실습-1
Tag | ,

SetLayeredWindowAttributes

from Study/API 2007/10/10 17:08 view 17531

1. 투명윈도우 구현을 위한 함수~

   SetWindowLong(hDest, GWL_EXSTYLE, GetWindowLong(hDest, GWL_EXSTYLE) | WS_EX_LAYERED);
   SetLayeredWindowAttributes( hDest, 0, 255 * 0.5, LWA_ALPHA);

Tag |

9.18(화) 실습-2( SystemparameterInfo )

from Study/API 2007/10/10 17:06 view 19777
1. 윈도우 자석효과 내보기

more..

Tag | ,

9.18(화) 실습-1

from Study/API 2007/10/10 16:47 view 21195
1. Caret 이동과 RegisterHotkey 등록, Animate Window 구현!!!

more..


2. DC의 생성을 클래스화 해보기

more..


3. 키상태 조사하기

more..


4. MouseMessage(WM_MOUSELEAVE를 위해선 TRACKMOUSEENVET를 설정해줘야 한다!!!)

more..



5. SendInput 으로 입력 스트림에 키보드 입력을 넣어보자.

more..


Tag | ,