그럼 예제1을 수정을 해보자!
1. 배경색을 바꿔보자.
2. 커서를 바꿔보자
3. 윈도우 타이틀 변경.
4. 윈도우 스타일 변경
1~4번까지는 어디서 많이 본 것이 아닌가?
WndClass부분을 건들면 되지 않겠나!?라고 생각되지 않는가?
배경색은
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
커서는
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
타이틀은
LPCTSTR lpszClass=TEXT("windows");
스타일은
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,NULL);
이부분을 고쳐주면 되지 않겠는가.
5. 마우스 왼쪽 버튼을 누르면 스피커를 통해 띠딩 소리가 나오게 하자~
이부분은 WndProc을 수정하면 되지 않겠는가?
1. 배경색
WndClass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
참고로 윈도우에서 제공하는건 BLACK과 WHITE이다 즉 RED_BRUSH라고 적어도 되지는 않는다
그럼 차선책으로 아래와 같이 해보자
WndClass.hbrBackground=CreateSolidBrush(RGB(0,0,255));
이렇게도 바꿔보자.
WndClass.hbrBackground=CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
2. 커서 변경
이게 LoadCursor함수 원형을 봅시다.
HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName);
첫 번째 인수 커서를 가지고 있는 프로그램의 인스턴스 핸들이되 윈도우의 기본 커서를 사용하려면 NULL로 지정
두 번 째 인수는 커서 이름을 지정 하면 되겠다.
IDC_ARROW |
화살표모양 |
IDC_CROSS |
십자 모양 |
IDC_IBEAM |
I자 모양 |
IDC_NO |
금지모양 |
IDC_WAIT |
모래시계 모양 |
WndClass.hCursor=LoadCursor(NULL,
IDC_NO); //EX
최상단의 표시되는 프로그램으 아이콘을 바꾸자고 할때는
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
IDI_ASTERISK |
동그라미에 느낌표 |
IDI_ERROR |
동그라미에 X표 |
IDI_EXCLAMATION |
삼각형에 느낌표 |
IDI_QUESTION |
물음표 |
WndClass.hIcon=LoadIcon(NULL,
IDI_ERROR);
3. 타이틀 변경
LPCTSTR lpszClass=TEXT("windows");
전역변수의 lpszClass을 수정해주면 되겠다.
LPCTSTR lpszClass=TEXT("GFP NSAKURA");
4. 스타일 변경
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,NULL);
을 바꿔주면 되겠다. 여러개의 스타일을 적용할시 OR연산을 사용한다고 예제1 분석에 설명했다.
아래표를 바꿔보자.
WS_CAPTION |
타이틀바를 가진다 |
WS_HSCROLL |
수평 스크롤바를 가진다 |
WS_VSCROLL |
수직 스크롤 바를 가진다 |
WS_MAXIMIZEBOX |
최대화 버튼을 가진다 |
WS_MINIMIZEBOX |
최소화 버튼을 가진다 |
WS_SYSMENU |
시스템 매뉴를 가진다 |
WS_THICKFRAME |
크기를 조절할 수 있는 경계선을 가진다. |
이것 말고도 많이 있지만 그건 개인이 직접 찾아보도록.
WS_OVERLAPPEDWINDOW는 WinUser.h에 정의되어있다.
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
이렇게 되어있다.
본인은 이렇게 수정했다.
hWnd=CreateWindow(lpszClass,lpszClass,
WS_HSCROLL|WS_VSCROLL|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,NULL);
5. 마우스 왼쪽 버튼을 누르면 스피커를 통해 띠딩 소리가 나오게 하자~
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage,WPARAM wParam,LPARAM lParam){
switch(iMessage){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
부분을 마우스 왼쪽 버튼을 누르는 메세지가 필요하겠다. (WM_LBUTTONDOWN)
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage,WPARAM wParam,LPARAM lParam){
switch(iMessage){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_LBUTTONDOWN:
MessageBeep(0);
return 0;
}
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
이렇게 바꿔주면 되겠다.
제어판의 소리 설정에 따라 안나는경우도 있다. 이점 주의해주길 바란다.