//-----------------------------------------------------
// 4월 14일.. 4:
39
///////////////////
// Type define..되어있는것들.
typedef unsigned int
UINT;
typedef UINT WPARAM;
typedef long LONG
typedef LONG LPARAM;
typedef LONG LRESULT;
typedef unsigned long DWORD;
typedef
int
BOOL;
typedef unsigned char
BYTE;
typedef unsigned short WORD;
typedef
float
FLOAT;
typedef
FLOAT
*PFLOAT;
typedef BOOL
near
*PBOOL;
typedef BOOL
far
*LPBOOL;
typedef BYTE
near
*PBYTE;
typedef BYTE
far
*LPBYTE;
typedef int
near
*PINT;
typedef int
far
*LPINT;
typedef WORD
near
*PWORD;
typedef WORD
far
*LPWORD;
typedef long
far
*LPLONG;
typedef DWORD
near *PDWORD;
typedef
DWORD far
*LPDWORD;
typedef void
far
*LPVOID;
typedef CONST void far *LPCVOID;
DC란?
화면에 출력하기위해 필요한 "모든" 모든모든~ 정보를 가지는 데이터 구조체..
RECT 구조체 : 윈도우 안의 사각영역 정의
typedef struct
tagRECT
{
LONG
left;
LONG top;
LONG right;
LONG
bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
widows는 가려졌던 윈도우의 화면을 보관 및 복구해주는 책임을 지지않으며
전적으로 프로그램 자신이 책임져야한다.
DC를 얻는 방뼙
1.
HDC GetDC( HWND hWnd );
int ReleaseDC( HWND hWnd, HDC
hDC );
ex>
HDC hdc;
hdc = GetDC( hWnd );
각종 출력문에서 hdc를 사용
ReleaseDC(
hWnd, hdc );
2.
HDC BeginPaint( HWND hWnd, LPPAINTSTRUCT lpPaint );
BOOL EndPaint(
HWND hWnd, CONST PAINTSTRUCT *lpPaint );
ex> WM_PAINT 메시지 처리루틴에서 사용
HDC hdc;
PAINTSTRUCT ps;
case
WM_PAINT:
hdc = BeginPaint( hWnd, &ps );
각종 출력문에서 hdc를
사용;
EndPaint( hWnd, &ps );
출력함수..
BOOL TextOut( HDC hdc, int nXStart, int nYStart, LPCTSTR
lpString, int cbString );
ex> TextOut( hdc, 100, 100, "Beautiful Girl", 14
);
int DrawText( HDC hDC, LPCTSTR lpString, int ncount, LPRECT lpRect, UINT uFormat );
문자정렬함수
UINT SetTextAlign( HDC hdc, UINT fMode );
선을긋자선을.
MoveToEx( hdc, A, B, NULL );
하면 CP(Current Position: 다음 그래픽이
출력될 위치 )를 ( A, B ) 좌표로 이동시킴
LineTo( hdc, C, D );
하면 ( C, D )좌표로 선을 긋는다
메시지박스
int MessageBox( HWND hWnd, LPCTSTR lptext, LPCTSTR lpCaption, UINT
uType );
ex>
MessageBox( hWnd, "마우스 왼쪽버튼을 눌렀습니다", "메시지박스", MB_OK );
메시지 Beep~!
BOOL MessageBeep( UINT uType );
WM_CHAR메시지..
: 입력된 문자의 아스키코드를 wParam으로 전달함.
'S'입력 -> S의 아스키코드인 0x53
이 wParam으로 전달됨...
WM_CHAR메시지는 사용자에의해 발생되는 메시지가 아님..!
키보드로 부터 전달되는 메시지는
WM_KEYDOWN, WM_KEYUP밖에.엄따
GetMessage가 메시지큐에서 메시지를 꺼내온 후 TranslateMessage함수로
메시지를 넘겨주면
TranslateMessage는 들어온 메시지가 WM_KEYDOWN 인지, 문자키인지 검사해보고
맞을경우
WM_CHAR메시지를 만들어 메시지큐에 덧붙여줌.
TranslateMessage함수는 WM_CHAR을 만들어내기위해 존재함
WM_CHAR메시지를 받을필요가 없는
프로그램이라면
TranslateMessage를 삭제해도된다!!
lParam의 구조
31'th bit : 키가 놓아지면 1, 눌러지면 0
30'th bit : 메시지가 보내지기 전에 키가
눌러져 있었으면 1
29'th bit : Alt키가 눌러졌으면 1
28 ~ 25'th bit : 미사용.. -_-;
24'th
bit : 오른쪽Alt, 오른쪽Ctrl등 101키에만 있는 확장키가 눌러졌을경우 1이됨.
23 ~ 16'th bit : 스캔코드.
(-_-?)
15 ~ 0'th bit : 반복카운트.. (-_-?);;
이 정보중 필요한 정보가 있으면 lParam을 참조하고.
필요없으면 wParam만 사용하도록한다..
무효영역?
윈도우영역중 일부분이라도 다시 그려져야할필요가 있는 영역..?
이. 무효영역이 생기면 OS는 이 윈도우에게
WM_PAINT 메시지를 보내줘서
다시 그 영역을 그리도록 한다.
데이터의 변화가 있을때 OS측에서는 화면으로 출력해야되는지
내부적으로만 계산해야할것인지
모르기때문에 작업영역을 무효화시키지 않음.
그래서 윈도우의 모습을 변경시켰을때는 변경된 부분이 다시
그려질 수 있도록
강제로 무효화 시켜줘야된다. 이때 강제로 무효화시키기위해
사용되는함수가
InvalidateRect()함수다.
// BOOL InvalidateRect( HWND hWnd, CONST RECT *lpRect, BOOL bErase );
//
hWnd -> 무효화의대상이되는윈도우( 다시 그려줘야할윈도우) 의 핸들.
// lpRect -> 무효화의 대상이되는 사각영역(
NULL일경우 윈도우 전체 영역 )
SetRect() 함수로 대상영역을 지정해줌
BOOL SetRect(
LPRECT lprc, // rectangle
int
xLeft, // left side
int yTop, // top
side
int xRight, // right side
int yBottom //
bottom side
);
RECT구조체
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
'- 음악과 나 - > 『 짬 통 』' 카테고리의 다른 글
about. PM (0) | 2006.04.16 |
---|---|
4월 16일.. 입력 뒷부분과.. 리소스 조금, 그리고 그래픽. (0) | 2006.04.16 |
SSDN (0) | 2006.04.14 |
[스크랩] 오랜만이다. 아스키코드ㅋㅋ (0) | 2006.04.09 |
[스크랩] [3D맥스/3DMAX] 돌고래 만들기 (0) | 2006.04.05 |