초기화 인스턴스 기본 코드
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
**CW_USEDEFAULT, 0, CW_USEDEFAULT, 0 -> 수정 0, 0, 400, 300
클래스를 생성할때 예시 사용법
class Tiger
{
};
Tiger t = new Tiger(); // new를 사용하므로 인스턴스화 시킨다라고 말한다.
Tiger: 타입
t: 객체
new 메모미 할당연산
Tiger(): 생성자 호출
- InitInstance = 객체
코드가 단문일때 한문장 처리 한다.
if (!hWnd)
{
return FALSE;
}
한문장 처리 : if (!hWnd) return FALSE;
ShowWindow(hWnd, nCmdShow);
-
hWnd : 대상 윈도우 핸들
-
nCmdShow : 지정하고자 하는 보이기 상태이며 다음 값중 하나를 지정한다. (10값을 가지고 있음)
SW_FORCEMINIMIZE
2000 이후에만 쓸 수 있는 플레그이다. 윈도우를 소유한 스레드가 블록된 상태에서도 윈도우를 최소화시킨다.
SW_HIDE
윈도우를 숨긴다.
SW_MAXIMIZE
윈도우를 최대화시킨다.
SW_MINIMIZE
윈도우를 최소화시키며 다음 Z순서를 가지는 윈도우가 활성화된다.
SW_RESTORE
최대, 최소화된 윈도우를 이전 위치로 복구한다.
SW_SHOW
윈도우를 활성화하며 보인다.
SW_SHOWDEFAULT
STARTUPINFO 구조체가 지정하는 보이기 상태로 만든다.
SW_SHOWMAXIMIZED
윈도우를 최대화된 상태로 활성화한다.
SW_SHOWMINIMIZED
윈도우를 최소화한 상태로 활성화한다.
SW_SHOWMINNOACTIVE
윈도우를 최소화 상태로 보이며 활성화 상태는 변경되지 않는다.
SW_SHOWNA
윈도우를 헌재 상태로 보이며 활성화 상태는 변경되지 않는다.
SW_SHOWNOACTIVATE
최근 크기와 위치에 윈도우를 보이며 활성화 상태는 변경되지 않는다.
SW_SHOWNORMAL
윈도우를 보이며 활성화한다. 만약 윈도우가 최소화되어 있거나 최대화되어 있다면 윈도우를 원래 크기대로 복구한다. 윈도우를 처음 화면에 보일 때는 이 플래그를 사용해야 한다.
while 사이에 코드 사용가능
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
0, 0, 400, 300, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); //이 함수는 WM_PAINT 라는 메세지를 강제로 발생을 시킨다.(Wnd 프로시져... 호출까지 책임)
// 디바이스 셋팅
// 변수 초기화
// 데이터 로딩(파일오픈 bmp 로딩) : 100장
// 시간지연...
while(WM_PAINT = GetMessage())
{
}
WM_PAINT:
호랑이... 출력하는 프로그램... 존재
return TRUE;
}
WS_OVERLAPPEDWINDOW
윈도우 모양을 바꿀수 있다.
WS_OVERLAPPED는 타이틀 바, 시스템 메뉴, 크기조절이 가능한 경계선, 최소, 최대 버튼 등의 스타일이 한꺼번에 정의되어 있다.
HWND hWnd = CreateWindoW() 설명
HWND hWnd = CreateWindowW(
szWindowClass, // 클래스 이름
szTitle, // 윈도우 타이틀
WS_OVERLAPPEDWINDOW, // 윈도우 스타일
CW_USEDEFAULT, // 읜도우의 x 좌표
0, // 윈도우의 y 좌표
CW_USEDEFAULT, // 윈도우의 너비
0, // 윈도우의 높이
nullptr, // 부모 윈도우 핸들
nullptr, // 부모 윈도우 메뉴
hInstance, // 부모 윈도우 인스턴스
nullptr // 부모 윈도우 윈도우 정보
);
윈도우 창에 버튼 추가하기1 _ 메세지 생성
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
// 초기화가 필요한 프로그램
MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK); // 딱 1번 발생
}break;
}
}
윈도우 창에 버튼 추가하기2 _ 버튼 생성 및 메세지 생성
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
HWND hwndButton = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 55, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
}break;
case WM_COMMAND:
{
MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK); // 딱 1번 발생
}break;
윈도우 창에 버튼 추가하기3 _ 버튼 2개 만들기
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
HWND hwndButton1 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
HWND hwndButton2 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("코끼리"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 60, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)2000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL);
}break;
case WM_COMMAND:
{
switch (wParam)
{
case 1000:
{
MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
}break;
case 2000:
{
MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
}break;
}
}
}break;
윈도우 창에 버튼 추가하기4 _ SowWindow 함수
//전역변수 설정
#define BTN1 1000
#define BTN2 (BTN1+1)
HWND hwndButton1;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
HWND hwndButton1 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
HWND hwndButton2 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("코끼리"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 60, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1001, // 버튼의 고유 ID
hInst, // 인스턴스
NULL);
}break;
case WM_COMMAND:
{
switch (wParam)
{
case BTN1:
{
//MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
ShowWindow(hwndButton1, false);
}break;
case BTN2:
{
//MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
ShowWindow(hwndButton1, false);
}break;
}
}break;
윈도우 창에 버튼 추가하기4 _ EnableWindow 함수
//EnableWindow함수는 활성화 시켜준다.
//전역변수 설정
#define BTN1 1000
#define BTN2 ((BTN1)+1)
HWND hwndButton1;
HWND hwndButton2;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
HWND hwndButton1 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
hwndButton2 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("코끼리"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 60, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1001, // 버튼의 고유 ID
hInst, // 인스턴스
NULL);
}break;
case WM_COMMAND:
{
switch (wParam)
{
case BTN1:
{
//MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
ShowWindow(hwndButton1, false);
EnableWindow(hwndButton1, false);
}break;
case BTN2:
{
//MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
ShowWindow(hwndButton1, true);
EnableWindow(hwndButton2, true);
}break;
}
}
}break;
윈도우 창에 버튼 추가하기4 _ SetWindowText 함수
//전역변수 설정
#define BTN1 1000
#define BTN2 ((BTN1)+1)
HWND hwndButton1;
HWND hwndButton2;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
HWND hwndButton1 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
hwndButton2 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("코끼리"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 60, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1001, // 버튼의 고유 ID
hInst, // 인스턴스
NULL);
}break;
case WM_COMMAND:
{
switch (wParam)
{
case BTN1:
{
//MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
//ShowWindow(hwndButton1, false);
//EnableWindow(hwndButton1, false);
SetWindowText(hwndButton1, TEXT("고양이"));
}break;
case BTN2:
{
//MessageBox(hWnd, TEXT("WM_CREATE"), TEXT("알림"), MB_OK);
//ShowWindow(hwndButton1, true);
//EnableWindow(hwndButton2, true);
SetWindowText(hwndButton2, TEXT("독수리"));
}break;
}
}
}break;
윈도우 창에 버튼 추가하기4 _ 타이머 설정 (case WM_TIMER)
#define BTN1 1000
#define BTN2 ((BTN1)+1)
HWND hwndButton1;
HWND hwndButton2;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
hwndButton1 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
hwndButton2 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("코끼리"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 60, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1001, // 버튼의 고유 ID
hInst, // 인스턴스
NULL);
}break;
case WM_TIMER:
{
WCHAR Str[32];
static int ct = 0;
wsprintf(Str, TEXT("WM_CHAR:%d\n"), ct++);
OutputDebugString(Str);
}break;
case WM_COMMAND:
{
switch (wParam)
{
case BTN1:
{
// 1초마다 WM_TIMER 메세지를 발생시켜 주세요
HANDLE hTimer = (HANDLE)SetTimer(
hWnd, // 타이머를 소유하고 있는 핸들값
9999, // 시계번호
1000, // 1초 = 1000ms
NULL); // 중요한 속성
}break;
case BTN2:
{
KillTimer(hWnd, 9999); // hWnd : 타이머를 소유하고 있는 핸들값 9999: 설정한 시계번호값
}break;
}
}break;
윈도우 창에 버튼 추가하기4 _ 타이머 2개 설정 (case WM_TIMER)
#define BTN1 1000
#define BTN2 ((BTN1)+1)
HWND hwndButton1;
HWND hwndButton2;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: // window가 생성될때 발생하는 메세지
{
hwndButton1 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("호랑이"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1000, // 버튼의 고유 ID
hInst, // 인스턴스
NULL); // x
hwndButton2 = CreateWindow(
TEXT("BUTTON"), //컨트롤의 종류
TEXT("코끼리"), // 버튼안에 들어가는 텍스트(content)
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 60, // 초기 위치
100, 50, // w(너비), h(높이)
hWnd, // 부모 윈도우를 성정
(HMENU)1001, // 버튼의 고유 ID
hInst, // 인스턴스
NULL);
}break;
case WM_TIMER:
{
switch (wParam)
{
case 8888:
{
WCHAR Str[32];
static int ct = 0;
wsprintf(Str, TEXT("8888:%d\n"), ct++);
OutputDebugString(Str);
}break;
case 9999:
{
WCHAR Str[32];
static int ct = 0;
wsprintf(Str, TEXT("9999:%d\n"), ct++);
OutputDebugString(Str);
}break;
}
}break;
case WM_COMMAND:
{
switch (wParam)
{
case BTN1:
{
// 1초마다 WM_TIMER 메세지를 발생시켜 주세요
HANDLE hTimer1 = (HANDLE)SetTimer(hWnd, 9999, 1000, NULL);
HANDLE hTimer2 = (HANDLE)SetTimer(hWnd, 8888, 700, NULL);
}break;
case BTN2:
{
KillTimer(hWnd, 9999); // 9999: 설정한 시계번호값
}break;
}
}break;
'Education > Edu | .net' 카테고리의 다른 글
# 2.5) [Win32API] 오각형 타이머 설정하여 회전시키기 (0) | 2021.01.04 |
---|---|
# 2.4) [Win32API] 오각형 그리기 (0) | 2020.12.31 |
# 2.3) [Win32API] 윈도우즈 데스크톱 애플리케이션 코드 설명(2) (0) | 2020.12.31 |
# 2.1) [Win32API] 윈도우즈 데스크톱 애플리케이션 코드 설명(0) (0) | 2020.12.28 |
# 1) [C/C++] bitmap image size resize (0) | 2020.12.26 |