[방송통신대 컴퓨터과학과] 2019년 1학기 전공 Visual C++ 프로그래밍 과제물

 정보

  • 업무명     : Visual C++ 프로그래밍 과제물

  • 작성자     : 이상호

  • 작성일     : 2019-09-03

  • 설   명     :

  • 수정이력 :

    • 2020-04-06 : 서식 보완

 

 내용

 [개요]

  • 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.

  • 오늘 포스팅은 Visual C++ 프로그래밍 과제물을 소개드리고자 합니다.

 

 

[특징]

  • Visual C++ 프로그래밍 과제물에 대한 이해를 돕기위해 작성

 

[기능]

  • 과제물 지시사항

  • 과제물 작성 요령

 

[활용 자료]

  • 인터넷 검색

 

[과제물 작성 요령]

  • 과제물 작성 계획 세우기

    • 과제물 작성을 위하여 계획 및 준비, 글쓰기, 제출과 같이 3 단계로 구성

    • 1 단계는 우선 계획 및 준비로서 공고 확인, 제출 기간 확인, 과제물 문제를 파악

    • 2단계의 경우 글쓰기로서 자료 검색 수집 및 개요 작성 그리고 본문 쓰기 및 수정

    • 끝으로 제출 마감일뿐만 아니라 파일 용량 검사 및 온라인시스템 제출

  • 과제물 문제 파악 요령

    • 과제물 문제에서 교수님의 지시사항을 정확히 간파하여 작성

    • 특히 제출 파일의 양식/용량 및 스타일 형식 그리고 작성 분량에 유의

  • 나만의 글쓰기 전략

    • 앞서 작성 계획에서와 같이 단계별로 수행이 필연

    • 추가로 각 과제물마다 한글 또는 워드 양식에서 각자만의 스타일을 바탕으로 글의 내용 작성

    • 또한 각종 인터넷 검색 및 도서를 참조하여 내용을 제시할 뿐만 아니라 그에 따른 판단의 근거에 대한 명확한 인용 및 출처가 정확하게 표시

  • 학술 검색을 위한 유용한 방법

    • 인터넷은 1950대에 컴퓨터의 개발과 더불어 너무 많은 정보의 바다에서 살고 있기 때문에 자신에게 필요한 정보 발굴 능력 요구 

    • 인터넷 검색이 익숙하지 않을 경우 네이버 검색을 추천하고 익숙하면 구글 검색이 유용

    • 그러나 일반적으로 네이버 또는 구글로 검색할 경우 다수의 블로그에서 중복되는 정보를 확인할 수 있고 이러한 정보들은 대부분 복사 붙여넣기로 인해 남용되고 있는 실정

    • 따라서 이 보다는 전 세계 검색엔진 2위를 차지한 Yahoo! JAPAN (https://www.yahoo.co.jp)에서 검색하여 구글 번역할 경우 원하는 정보를 쉽게 얻음

    • 연구 보고서 또는 SCI/SCIE 논문을 보기 위해서 대학교에서 저널을 구독하는 것이 일반적이나 모든 저널을 구독하기에는 상당한 경제적 부담이 되기 때문에 SCI-HUB (https://sci-hub.tw/)를 통해 보는 것을 추천

 

[사용법]

  • 과제물 서식을 바탕으로 작성

 

[사용 OS]

  • Windows 10

 

[사용 언어]

  • Visual C++

  • 한글 v2018

 

 과제물 문제

 

 소스 코드

[명세]

#include <windows.h>

#define gId 1000
#define hIdBtn 1100
#define gIdBtn1 3000
#define gIdBtn2 4000

HINSTANCE g_hInst;
LPCTSTR lpszClass = L"HelloAPI";
LPCTSTR ChildClassName1 = L"ChildWin1";
LPCTSTR ChildClassName2  = L"ChildWin2";

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK ChildWndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ChildWndProc2(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 = ChildWndProc1;		// 차일드 윈도우 프로시저
	WndClass.lpszClassName = ChildClassName1;	// 차일드 윈도우 클래스이름
	RegisterClass(&WndClass); 

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

	hWnd=CreateWindow(lpszClass,						// 윈도우 클래스 이름
					L"Visual C++ 프로그래밍",		    // 윈도우 타이틀
					WS_OVERLAPPEDWINDOW | WS_VISIBLE,   // 윈도우 스타일
					200, 200,							// 윈도우가 보일때 X Y좌표
					800, 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 text1 = L"Visual C++ 프로그래밍 출석수업대체시험";
	LPCTSTR text2 = L"201934-363698 이상호";

	switch(iMessage) {
		
		case WM_PAINT: {
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hWnd, &ps);
			TextOut(hdc, 150, 40, text1, lstrlen(text1));
			TextOut(hdc, 150, 60, text2, lstrlen(text2));
			EndPaint(hWnd,&ps);

			return 0;
		}

		case WM_CREATE: {
			HWND hChildWnd = CreateWindow( 
							ChildClassName1,     		// 차일드 윈도우 클래스 이름 
							L"출석수업",            	// 윈도우 타이틀 
							WS_OVERLAPPEDWINDOW | WS_CHILD,  // 윈도우  스타일 
							100,       		// 윈도우 보일 때 x 좌표 
							100,       		// 윈도우 보일 때 y 좌표 
							300,       		// 윈도우 폭
							300,       		// 윈도우 높이
							hWnd,         		// 부모 윈도우
							(HMENU) gId,        	// 차일드 윈도우ID 
							g_hInst,           		// 인스턴스 핸들 
							(LPVOID) NULL);      	// 여분의 데이터		

			ShowWindow(hChildWnd, SW_SHOW); 

			hChildWnd = CreateWindow(
				ChildClassName2,     		// 차일드 윈도우 클래스 이름 
				L"신청기간",            	// 윈도우 타이틀 
				WS_OVERLAPPEDWINDOW | WS_CHILD,  // 윈도우  스타일 
				450,       		// 윈도우 보일 때 x 좌표 
				100,       		// 윈도우 보일 때 y 좌표 
				300,       		// 윈도우 폭
				300,       		// 윈도우 높이
				hWnd,         		// 부모 윈도우
				(HMENU) gId,        	// 차일드 윈도우ID 
				g_hInst,           		// 인스턴스 핸들 
				(LPVOID)NULL);      	// 여분의 데이터		

			ShowWindow(hChildWnd, SW_SHOW);

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


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

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

		case WM_COMMAND: {
			if(LOWORD(wParam) == gIdBtn1) {
				MessageBox(hWnd, L"2019.6.9(일) 제출", L"대체시험일", MB_OK);
			}

			if (LOWORD(wParam) == gIdBtn2) {
				MessageBox(hWnd, L"온라인제출", L"제출방법", MB_OK);
			}
			return 0;
		}

		case WM_DESTROY: {
			PostQuitMessage(0);
			return 0;
		}
	}
	
	return(DefWindowProc(hWnd,iMessage,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, 50, 10, text, lstrlen(text));
			EndPaint(hWnd,&ps);
			return 0;
		}

		case WM_CREATE: {
			HWND hChildWnd = CreateWindow( // 차일드 원도우에 버튼을 생성한다.
				L"button",        		// 윈도우 클래스 이름 
				L"대체시험형태",		// 윈도우 타이틀 
				WS_CHILD | WS_VISIBLE, 	// 윈도우 스타일 
				50,			      		// 윈도우 보일 때 x 좌표 
				100,       				// 윈도우 보일 때 y 좌표 
				100,       				// 윈도우 폭
				30,       				// 윈도우 높이
				hWnd,         			// 부모 윈도우
				(HMENU) hIdBtn,			// 컨트롤 ID
				g_hInst,           		// 인스턴스 핸들 
				(LPVOID) NULL);      	// 여분의 데이터
			
			if (!hChildWnd) { return -1; }
			return 0;
		}

		case WM_COMMAND: {
			if (LOWORD(wParam) == hIdBtn) {
				MessageBox(hWnd, L"실습과제물", L"대체시험형태", MB_OK);
			}
			return 0;
		}
	}

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

LRESULT CALLBACK ChildWndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {

	LPCTSTR text = L"3.11(월)-5.8(수)";

	switch (message) {

		case WM_PAINT: {
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hWnd, &ps);
			TextOut(hdc, 50, 50, text, lstrlen(text));
			EndPaint(hWnd, &ps);
			return 0;
		}

	}

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

[GitHub Gist]

 

 관련 자료

[제출본]

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com