[방통대/방송대] visual C++ 프로그래밍 출석수업 실습과제

2022. 5. 8. 03:55
반응형

* 메인 윈도우의 캡션에는“컴퓨터과학과 2학년”이라는 문자열이 출력되고, 클라이언트 영역에 출력되는 문자열에는 본인의 학번과 이름이 출력되도록 한다. 차일드 윈도우를 만든다. 메인 윈도우에 버튼을 만들고 버튼을 누르면 메시지 박스가 나타나도록 한다.

 

 

 

#include <windows.h>

#define ID_ABOUT_BTN	2000
#define ID_IMAGE_LINK_BTN	2001
#define ID_MOVIE1	2002
#define ID_MOVIE2	2003
#define ID_MOVIE3	2004
#define ID_DRAMA1	2005
#define ID_DRAMA2	2006



HINSTANCE g_hInst;
LPCTSTR lpszClass = L"HelloAPI";
LPCTSTR ChildClassName = L"ChildWin";
LPCTSTR ChildClassName1 = L"ChildWin1";


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ChildWndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

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.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = (WNDPROC)WndProc;
	WndClass.lpszClassName = lpszClass;
	WndClass.lpszMenuName = NULL;
	WndClass.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&WndClass);     //메인윈도우 클래스 등록

	WndClass.lpfnWndProc = ChildWndProc;      //차일드 윈도우 프로시저
	WndClass.lpszClassName = ChildClassName; //차일드 윈도우 클래스이름
	RegisterClass(&WndClass);

	WndClass.lpfnWndProc = ChildWndProc1;      //두번째 차일드 윈도우 프로시저
	WndClass.lpszClassName = ChildClassName1; //두번째 차일드 윈도우 클래스이름
	RegisterClass(&WndClass);

	hWnd = CreateWindow(lpszClass,			//윈도우클래스 이름
		L"컴퓨터과학과 2학년",			    //윈도우타이틀
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,   //윈도우스타일
		200, 200,							//윈도우가 보일때 X Y좌표
		600, 600,							//윈도우의 폭과 높이				
		(HWND)NULL,							//부모윈도우 핸들
		(HMENU)NULL,						//윈도우가 가지는 메뉴핸들
		hInstance,							//인스턴스핸들
		NULL);								//여분의 데이터

	ShowWindow(hWnd, nCmdShow);

	while (GetMessage(&Message, 0, 0, 0)) {
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage,
	WPARAM wParam, LPARAM lParam)
{
	LPCTSTR text = L"학번: 0000-0000 이름: 김아무개";
	switch (iMessage) {
	case WM_PAINT:
	{
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hWnd, &ps);
		TextOut(hdc, 180, 20, text, lstrlen(text));
		EndPaint(hWnd, &ps);
		return 0;
	}
	case WM_CREATE:
	{
		HWND hChildWnd = CreateWindow(
			ChildClassName,     		// 차일드 윈도우 클래스 이름 
			L"출연작-영화",            	// 윈도우 타이틀 
			WS_OVERLAPPEDWINDOW | WS_CHILD,  // 윈도우  스타일 
			25,       		// 윈도우 보일 때 x 좌표 
			150,       		// 윈도우 보일 때 y 좌표 
			260,       		// 윈도우 폭
			250,       		// 윈도우 높이
			hWnd,         		// 부모 윈도우
			(HMENU)1000,        	// 차일드 윈도우ID 
			g_hInst,           		// 인스턴스 핸들 
			(LPVOID)NULL);      	// 여분의 데이터			

		ShowWindow(hChildWnd, SW_SHOW);

		HWND hChildWndDrama = CreateWindow(
			ChildClassName1,     		// 두번째 차일드 윈도우 클래스 이름 
			L"출연작-드라마",            	// 윈도우 타이틀 
			WS_OVERLAPPEDWINDOW | WS_CHILD,  // 윈도우  스타일 
			300,       		// 윈도우 보일 때 x 좌표 
			150,       		// 윈도우 보일 때 y 좌표 
			260,       		// 윈도우 폭
			200,       		// 윈도우 높이
			hWnd,         		// 부모 윈도우
			(HMENU)1000,        	// 차일드 윈도우ID 
			g_hInst,           		// 인스턴스 핸들 
			(LPVOID)NULL);      	// 여분의 데이터			

		ShowWindow(hChildWndDrama, SW_SHOW);

		hChildWnd = CreateWindow(
			L"button",        		// 윈도우 클래스 이름 
			L"배우 엄태구, 그는 누구인가?",			// 윈도우 타이틀 
			WS_CHILD | WS_VISIBLE, 	// 윈도우 스타일 
			90,       		// 윈도우 보일 때 x 좌표 
			60,       		// 윈도우 보일 때 y 좌표 
			400,       		// 윈도우 폭
			30,       		// 윈도우 높이
			hWnd,         		// 부모 윈도우
			(HMENU)ID_ABOUT_BTN,   	// 컨트롤 ID
			g_hInst,           		// 인스턴스 핸들 
			(LPVOID)NULL);      	// 여분의 데이터

		hChildWnd = CreateWindow(
			L"button",        		// 윈도우 클래스 이름 
			L"사진보러가기",			// 윈도우 타이틀 
			WS_CHILD | WS_VISIBLE, 	// 윈도우 스타일 
			90,       		// 윈도우 보일 때 x 좌표 
			100,       		// 윈도우 보일 때 y 좌표 
			400,       		// 윈도우 폭
			30,       		// 윈도우 높이
			hWnd,         		// 부모 윈도우
			(HMENU)ID_IMAGE_LINK_BTN,   	// 컨트롤 ID
			g_hInst,           		// 인스턴스 핸들 
			(LPVOID)NULL);      	// 여분의 데이터

		if (!hChildWnd) 	return -1;
		return 0;
	}
	case WM_COMMAND:
	{
		if (LOWORD(wParam) == ID_ABOUT_BTN)
		{
			MessageBox(hWnd, L"엄태구는 대한민국의 배우로, 1983년 서울특별시에서 출생했다.\n강렬한 인상과는 달리 여린 성격을 가지고 있다.", L"엄태구", MB_OK);
		}
		if (LOWORD(wParam) == ID_IMAGE_LINK_BTN)
		{
			if (IDYES == MessageBox(hWnd, L"네이버 이미지로 이동하시겠습니까?", L"엄태구 사진모음", MB_YESNO))
			{
				HINSTANCE hlnst = ShellExecute(hWnd, L"open", L"https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%EC%97%84%ED%83%9C%EA%B5%AC", L"", L"", SW_SHOWDEFAULT);
			}
		}
		return 0;
	}
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	LPCTSTR text = L"영화 출연작 리스트입니다.";
	switch (message)
	{
	case WM_PAINT:
	{
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hWnd, &ps);
		TextOut(hdc, 10, 10, text, lstrlen(text));
		EndPaint(hWnd, &ps);
		return 0;
	}

	case WM_CREATE: {
		HWND hChildWnd = CreateWindow(
			L"button", // 윈도우 클래스 이름
			L"낙원의밤", // 윈도우 타이틀
			WS_CHILD | WS_VISIBLE,// 윈도우 스타일
			10, // 윈도우 보일 때 x 좌표
			50, // 윈도우 보일 때 y 좌표
			140, // 윈도우 폭
			30, // 윈도우 높이
			hWnd, // 부모 윈도우
			(HMENU)ID_MOVIE1, // 컨트롤 ID 
			g_hInst, // 인스턴스 핸들
			(LPVOID)NULL); // 여분의 데이터

		hChildWnd = CreateWindow(
			L"button", // 윈도우 클래스 이름
			L"판소리 복서", // 윈도우 타이틀
			WS_CHILD | WS_VISIBLE,// 윈도우 스타일
			10, // 윈도우 보일 때 x 좌표
			100, // 윈도우 보일 때 y 좌표
			140, // 윈도우 폭
			30, // 윈도우 높이
			hWnd, // 부모 윈도우
			(HMENU)ID_MOVIE2, // 컨트롤 ID 
			g_hInst, // 인스턴스 핸들
			(LPVOID)NULL); // 여분의 데이터

		hChildWnd = CreateWindow(
			L"button", // 윈도우 클래스 이름
			L"어른도감", // 윈도우 타이틀
			WS_CHILD | WS_VISIBLE,// 윈도우 스타일
			10, // 윈도우 보일 때 x 좌표
			150, // 윈도우 보일 때 y 좌표
			140, // 윈도우 폭
			30, // 윈도우 높이
			hWnd, // 부모 윈도우
			(HMENU)ID_MOVIE3, // 컨트롤 ID 
			g_hInst, // 인스턴스 핸들
			(LPVOID)NULL); // 여분의 데이터

		if (!hChildWnd)
			return -1;
		return 0;
	}

	case WM_COMMAND:
	{
		if (LOWORD(wParam) == ID_MOVIE1)
		{
			MessageBox(hWnd, L"제주도를 배경으로 한 범죄 느와르 영화", L"영화1: 낙원의 밤", MB_OK);
		}
		if (LOWORD(wParam) == ID_MOVIE2)
		{
			MessageBox(hWnd, L"판소리와 권투라는 뜬금없는 조합을 소재로 하고 있다.", L"영화2: 판소리 복서", MB_OK);
		}
		if (LOWORD(wParam) == ID_MOVIE3)
		{
			MessageBox(hWnd, L"2017년에 제작되어 다음해인 2018년에 개봉했다.", L"영화3: 어른도감", MB_OK);
		}
	}

	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}

LRESULT CALLBACK ChildWndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	LPCTSTR text = L"드라마 출연작 리스트입니다.";
	switch (message)
	{
		case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hWnd, &ps);
			TextOut(hdc, 10, 10, text, lstrlen(text));
			EndPaint(hWnd, &ps);
			return 0;
		}

		case WM_CREATE: {
			HWND hChildWnd = CreateWindow(
				L"button", // 윈도우 클래스 이름
				L"홈타운", // 윈도우 타이틀
				WS_CHILD | WS_VISIBLE,// 윈도우 스타일
				10, // 윈도우 보일 때 x 좌표
				50, // 윈도우 보일 때 y 좌표
				80, // 윈도우 폭
				30, // 윈도우 높이
				hWnd, // 부모 윈도우
				(HMENU)ID_DRAMA1, // 컨트롤 ID 
				g_hInst, // 인스턴스 핸들
				(LPVOID)NULL); // 여분의 데이터

			hChildWnd = CreateWindow(
				L"button", // 윈도우 클래스 이름
				L"구해줘2", // 윈도우 타이틀
				WS_CHILD | WS_VISIBLE,// 윈도우 스타일
				10, // 윈도우 보일 때 x 좌표
				100, // 윈도우 보일 때 y 좌표
				80, // 윈도우 폭
				30, // 윈도우 높이
				hWnd, // 부모 윈도우
				(HMENU)ID_DRAMA2, // 컨트롤 ID 
				g_hInst, // 인스턴스 핸들
				(LPVOID)NULL); // 여분의 데이터

			if (!hChildWnd)
				return -1;
			return 0;
		}

		case WM_COMMAND:
		{
			if (LOWORD(wParam) == ID_DRAMA1)
			{
				MessageBox(hWnd, L"2021년 9월 22일부터 방영한 tvN 수목 드라마", L"드라마1: 홈타운", MB_OK);
			}
			if (LOWORD(wParam) == ID_DRAMA2)
			{
				MessageBox(hWnd, L"애니메이션 사이비를 원작으로 하고 있다", L"드라마2: 구해줘2", MB_OK);
			}
		}
	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}

 

 

* 결과물

반응형

BELATED ARTICLES

more