9.20(목) 실습-2

from Study/API 2007/10/10 20:26 view 19393
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 19457
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 18872
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 18539
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 18415
1. GDI Object 기본

more..



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

more..


Tag | ,

9.18(화) 이론-1

from Study/API 2007/10/10 17:54 view 20642
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 17413

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 19573
1. 윈도우 자석효과 내보기

more..

Tag | ,

9.18(화) 실습-1

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

more..


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

more..


3. 키상태 조사하기

more..


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

more..



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

more..


Tag | ,

9.17(월) 이론-4( 종료과정이해 )

from Study/API 2007/10/10 16:15 view 16853
1. 종료과정 이해하기


- 윈도우가 종료 하기 바로 전에 해야 할일은 주로 WM_CLOSE 메시지 에서 처리한다.!!
Tag | ,