반응형
// Cursor 변경...
#include <windows.h>
// 마우스 커서가 움직일 때마다 WM_SETCURSOR 메시지가 발생한다..
// 디폴트 처리 루틴...
// 커서를 윈도우 클래스에 등록된 것으로 바꾸어 버린다...
// SetCursor, WM_SETCURSOR
// SetClassLong 을 통한 변경 차이 이해..
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HCURSOR hNowCursor;
static HCURSOR hArrow, hIBeam, hWait, hNow;
switch( msg )
{
case WM_CREATE:
// LoadCursor
hArrow = LoadCursor(NULL, IDC_ARROW);
hIBeam = LoadCursor(NULL, IDC_IBEAM);
hWait = LoadCursor(NULL, IDC_WAIT);
hNow = hArrow;
return 0;
case WM_LBUTTONDOWN:
// L Button 누를때마다 커서의 모양 변경
if( hNow == hArrow) hNow = hIBeam;
else if( hNow == hIBeam) hNow = hWait;
else hNow = hArrow;
// SetCursor(hNow);
// 적용 : SetClassLong
SetClassLong(hwnd, GCL_HCURSOR, (LONG)hNow);
return 0;
/*
case WM_SETCURSOR:
// if( LOWORD(lParam) == HTCAPTION)
if( LOWORD(lParam) == HTCLIENT)
{
SetCursor(hNowCursor);
return TRUE;
}
break;
case WM_LBUTTONDOWN:
hNowCursor = LoadCursor(NULL, IDC_WAIT);
return 0;
case WM_RBUTTONDOWN:
hNowCursor = LoadCursor(NULL, IDC_ARROW);
return 0;
*/
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShowCmd)
{
// 1. 윈도우 클래스 만들기
WNDCLASS wc;
wc.cbWndExtra = 0;
wc.cbClsExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
// 커서 변경
// 현재 windows 가 설치된 directory얻기
char dir[256];
GetWindowsDirectory(dir, 256);
strcat(dir, "\\cursors\\dinosaur.ani");
HCURSOR hc = LoadCursorFromFile(dir);
// HCURSOR hc = LoadCursorFromFile("c:\\WINDOWS\\Cursors\\banana.ani");
wc.hCursor = hc; //LoadCursor(0, IDC_CROSS);
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc; // DefWindowProc;
wc.lpszClassName = "First";
wc.lpszMenuName = 0;
wc.style = 0;
// 2. 등록(레지스트리에)
RegisterClass(&wc);
// 3. 윈도우 창 만들기
HWND hwnd = CreateWindowEx( 0, // WS_EX_TOPMOST
"first", // 클래스 명
"Hello", // 캡션바 내용
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT , 0, CW_USEDEFAULT, 0, // 초기 위치
0, 0, // 부모 윈도우 핸들, 메뉴 핸들
hInstance, // WinMain의 1번째 파라미터 (exe 주소)
0); // 생성 인자
// 4. 윈도우 보여주기
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
// 5. Message
MSG msg;
while( GetMessage( &msg, 0, 0, 0 ) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
반응형
'02.Bit 고급 > API' 카테고리의 다른 글
03_키 다운(WM_KEYDOWN) (0) | 2021.11.29 |
---|---|
01_Window 스타일 변경 (0) | 2021.11.29 |
01_WIN32 API 기본코드 (0) | 2021.11.29 |
댓글