본문 바로가기

공부/윈도우api

[윈도우api] 리소스 #include "resource.h" WndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch(iMessage) { case WM_COMMAND: switch(LOWORD(wParam)) { case ID_FILE_MENU1: MessageBox(hWnd, TEXT("첫 번째 메뉴를 선택했습니다."), TEXT("MenuDemo"), MB_OK); break; } }} 위의 내용 추가 resource.h파일 안에는 메뉴 항목의 ID가 정의되어 있음 /{{NO_DEPENDENCIES}} // Microsoft .. 더보기
[윈도우api] HIWORD #define HIWORD(I) ((WORD)(((DWORD)(I) >> 16) & 0xFFFF)) 상위 16비트를 얻어냄 WORD = 16비트 DWORD = 32비트 I가 0001 0010 0011 0100이라고 가정 1. (DWORD)(I) >> 16 오른쪽으로 16비트를 이동 자료값 범위를 벗어난 0011 0100은 삭제 결과 = 0000 0000 0001 0010 2. 1번의 결과값 & 0xFFFF 결과 = 0000 0000 0001 0010 3. (WORD)2번의 결과값 32비트에서 16비트로 축소시 앞의 16비트를 날려버림 뒤의 16비트만 남음 결과 = 0001 0010 (상위 16비트) 더보기
Timer(윈도우 api)소스 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass = TEXT("MyTimer"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst = hInstance; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); .. 더보기
[윈도우 api] 입력 키보드 입력 키보드 입력이 발생하는 시점과 문자열을 출력해야 할 시점이 분리되어 있음 문자열을 계속 모아 두었다가 필요할 때 출력을 WM_PAINT에서 처리함 무효영역 : 윈도우의 일부분이 가려졌다가 나타나거나 최소화되었다가 복구시 무효영역이 발생 그때마다 운영체제가 WM_PAINT메세지를 발생시킴 강제로 윈도우의 작업영역을 무효화 BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase); 1. hWnd 무효화의 대상이 되는 윈도우 나타냄 2. *lpRect 무효화할 사각영역을 지정 이 값이 NULL이면 윈도우의 전 영역이 무효화 화면이 깜빡거리지 않고 보기 좋게 하기위해서는 무효화할 사각영역을 정확하게 지정할 것 3.bErase 무효화되기 전에 .. 더보기
[윈도우 api] 출력 DC(device context) 윈도우 세가지 동적 라이브러리(DLL) = 윈도우 API함수의 대부분은 DLL에 의해 제공 메모리 관리, 프로그램 실행 = KERNEL 유저 인터페이스와 윈도우를 관리 = USER 화면 처리와 그래픽(그림, 글자)을 담당 = GDI DC(device context) -> 출력에 필요한 모든 정보를 가지는 데이터 구조체, GDI 모듈에 의해 관리됨 출력 함수에서 맨 처음 인자로 사용됨 DC 필요한 이유 1. 그리기 함수에서 원점을 정확히 알아야 함 2. 그리기를 할 때 그리기가 금지된 부분에 출력을 하지 말아야함 (예: 두 윈도우가 겹칠 시 앞의 윈도우가 뒤의 윈도우의 모습을 덮어서 화면에 출력되어야 함) DC 얻는 법 1. HDC GetDC(HWND hWnd); int .. 더보기
DrawText(윈도우 api)소스 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass=TEXT("st"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst=hInstance; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCurso.. 더보기
[윈도우 api]윈도우 api 기본구조 윈도우 api 기본 구조 인스턴스 핸들 = 코드 영역의 메모리주소 윈도우(os)는 리소스(메뉴, 브러시, 윈도우 창 등)를 관리하기 위해서 커널 오브젝트를 생성, 커널 오브젝트안에는 리소스에 대한 정보가 들어 있고 이 커널 오브젝트에 특정한 핸들(주소 값)을 부여함, 그리고 실행되는 프로그램에 윈도우(os)가 이 부여된 핸들을 전달 받은 핸들(주소 값)을 통해서 커널 오브젝트에 접근이 가능하고 여러가지 기능을 수행 할 수 있음 콜백함수(윈도우 프로시저)와 윈도우 및 윈도우에 대한 메세지와의 관계 무슨 변화가 생기면 이 변화에 대한 메세지가 어느 윈도우로 보낼 것인지 잘 생각해봐야 함 윈도우 프로시저는 윈도우 클래스당 하나씩 배정되며 메시지에 대응하는 방식을 정의함으로써 윈도우의 행동 양식을 결정 한 클래.. 더보기