정보

    • 업무명     : 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
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기