728x90
반응형

초기화 인스턴스 기본 코드

 

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;
728x90
반응형

+ Recent posts