'C:'에 해당되는 글 345건

  1. 2007/10/13 10.1(월) 이론-2
  2. 2007/10/13 10.1(월) 이론-1
  3. 2007/10/13 10.1(월) 실습-1
  4. 2007/10/13 _imp_ 찾을수 없다.
  5. 2007/10/13 9.21(금) 이론-1
  6. 2007/10/10 9.21(금) 실습-1
  7. 2007/10/10 9.20(목) 이론-1
  8. 2007/10/10 9.20(목) 실습-2
  9. 2007/10/10 9.20(목) 실습-1
  10. 2007/10/10 9.19(수) 이론-1

10.1(월) 이론-2

from Study/API 2007/10/13 14:08 view 28991
1. WndProc 에서 hInstancs를 얻어내는 법

  - 전역 변수에 저장해놓고 사용하기.
  - 결국 실행파일의 주소이므로 GetModuleHandle( 0 ) 으로 얻기
  - 윈도우 Object에서 얻기. GetWindowLong( HWND, GWL_HINSTANCE )
  - WM_CREATE의 lParam에서 얻기

2. 커서 메세지
  - WM_SETCURSOR에서 모양을 바꾸자.

3. 메뉴

  - API는 HANDLE을 가지고 있다면 모두 변경 가능하다.
  - 메뉴의 HANDLE을 구할 수 있다. ( GetMenu, GetSystemMenu )
  - GetSystemMenu : FALSE는 얻어온다 HANDLE, TRUE는 초기상태로 메뉴를 되돌린다.
  - 시스템 메뉴 ID등록 : 0xF000 ->이하는 시스템메뉴 ID.
  - 메뉴 ID가 있는 하위 4비트를 0으로 하자.

4. 트래이로 숨기기
  - SC_CLOSE 가 발생했을때 트래이로 숨기면 된다.
  - TASKBAR윈도우에서는 사용자가 지정한 CALLBACKMESSAGE로 발생한 이벤트를 보내준다.
  - WM_USER+100 으로 지정했다면, wParam = Id, lParam = Message 가 들어온다.

Tag | ,

10.1(월) 이론-1

from Study/API 2007/10/13 13:49 view 25974
1. 데이타 Drag : 다른 프로세스간의 데이타를 서로 드래그 하기 __ OLE,COM 사용
  - 어렵다. -_-..차후에 공부함.

2. 파일 Drag    : 파일을 Drag해서 열기
  - WS_EX_ACCEPTFILES __ 확장 스타일로 주거나
  - shellapi.h 의 DragAcceptFiles 함수를 사용한다.

3. WM_DROPFILES
  - 윈도우창에 파일이 드래그 되었을 떄 발생한다.
  - SetCaputre, DragQueryFile, DragFinish 를 이용하여 메모리에 올라온 이름을 얻는다.

4. 리소스 원리

  - 리소스 ID를 알기 위해선 #include "resource.h" 를 해야 한다.
  - 완성된 프로그램의 PE헤더 .rsrc 에는 리소스가 있는데 이를 꺼내올 수 있다.
  - Loadxxx(모듈의주소)

5. ICON 여러가지

  - LoadIcon() 기본크기 32x32를 읽어온다. LoadImage() 로 다양한 크기를 로드 할 수 있다.
  - DrawIcon 으로 기본크기 32x32를 그린다. DrawIconEx 로 크기를 지정해서 그릴 수 있다.
 
  - SetClassLong으로 클래스 자체를 바꾼다. 이후 바뀐 클래스에 로드된 윈도우는 아이콘이 바뀐다.
  - SendMessage 현재 윈도우의 스타일만 바꾸고자 할 떄 쓰인다.




Tag | ,

10.1(월) 실습-1

from Study/API 2007/10/13 12:04 view 24104
1. 트레이에 ICON 넣기 & 시스템 메뉴에 항목추가하기

more..


2. 커서 모양 바꾸기

more..


3. DragDrop 구현( 파일이름 읽어오기 )

more..


4. spy++ UI 따라해보기( ALT+TAB 버그 수정해보기 )

more..


5. 실행시간에 ICON을 변경, 윈도우 클래스도 변경!!

more..




Tag | ,

_imp_ 찾을수 없다.

from Study/Error 2007/10/13 10:07 view 22973
대체로 이런에러는 import함수 없다는 말이므로 라이브러리 추가를 제대로 했는지 찾아본다.

TransprentBlt() = > msimg32.dll 을 추가해준다.
Tag |

9.21(금) 이론-1

from Study/API 2007/10/13 10:05 view 25517
1. 비트맵

  - DDB : 헤더에 6가지 정보를 갖는다. 장치에 의존하는 Bitmap
  - DIB  : BITMAPFILEINFO 구조체, 속도가 떨어진다. API함수는 DDB를 사용..

  -LoadImage : DIB->DDB로 자동 변환해준다.  DDB->DIB로 해주는건 사용자가 해야 한다.

2. Load

  - 리소스에서 LoadBitmap으로 읽어와도 되지만 이제는 LoadImage를 사용해서 꺼내온다..

3. 비트맵 -> 브러시로..

  - CreatePatternBrush 를 사용하면 브러시를 Bitmap으로 지정할 수 있다.

4. 비트맵 출력


Tag | ,

9.21(금) 실습-1

from Study/API 2007/10/10 21:46 view 22463
1. 화면 확대( CreateDC, StretchBlt )

more..


2. Cards.dll 에서 그림 꺼내오기~

more..


3. 내가 만든 Resource DLL 에서 문자열 빼오기

more..


4. 더블버퍼링의 기초( Timer를 사용하여 키보드로 사각형 움직이기 BitBlt 복사위치만 +x , +y 해주면 된다. )

more..


Tag | ,

9.20(목) 이론-1

from Study/API 2007/10/10 21:05 view 30253
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 19536
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 19676
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 19052
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 | ,