티스토리 뷰
과제 내용
1. 실험실습 과제명 교재 1 장의 1.5절 버튼 사용하기 API 프로그램에서 다음의 조건을 만족하도록 프로그램을 수 정하시오.
(1) 다음 그림과 같이 메인 윈도우 타이틀은 “Visual C++ 출석수업 대체 실습과제물” 이라 하 고 메인 윈도우에는 본인의 학번과 이름 “201934-123456 홍길동” 이 각각 출력된다. (설명을 위한 예시임)
(2) 두 개의 차일드 윈도우를 만드는데, 첫 번째 차일드 윈도우 타이틀은 “신청기한” 이고 윈 도우에는 “2020.5.8., 18:00까지” 가 출력된다. 두 번째 차일드 윈도우 타이틀은 “제출기간” 이 고 윈도우에는 “2020.5.11.-5.22,18:00까지 ”가 출력된다. 또한 하나의 버튼을 만들고 캡션이 름은 “추가접수”로 한다.
(3) 다음 그림과 같이 메인 윈도우 하단에 [소속]과 [제출방법] 두 개의 버튼을 만든다.
(4) [소속] 버튼을 클릭했을 때는 메시지박스에 본인의 소속 지역대학을 출력한다. 예를들면 다음 그림과 같이 메시지 박스에는 “서울지역대학” , 캡션은 “소속”이 나타난다.
(5) [제출방법]버튼을 클릭하면, 다음 그림과 같이 메시지 박스에는 “온라인제출”, 캡션은 “제 출방법” 이 나타난다.
(6) 차일드 윈도우의 [추가접수]버튼을 클릭하면 다음 그림과 같이 메시지 박스에는 “5.27,18:00 까지”, 캡션은 “추가접수” 가 나타난다.
2. 작성방법 온라인 제출이므로 다음 (1),(2)를 하나의 파일에 ‘붙여넣기’ 하여 제출한다.
(1) HelloAPI.cpp 파일(WinMain 함수가 있는 소스코드) 내용 전체.
(2) 프로그램을 실행했을 때 나타나는 초기 윈도우 화면, [소속], [제출방법],[추가접수] 버튼을 각각 클릭 했을 때 나타나는 각각의 윈도우 화면 전체를 모두 캡쳐한다. 따라서 제출하는 윈도 우 화면은 앞의 그림에서 보듯이 모두 4개이다.
(3) 주의: 과제물은 API 프로그래밍이므로 MFC를 사용하면 인정하지 않는다.
3. 과제물은 다음의 순서로 작성한다.
(1) 프로그램( HelloAPI.cpp 의 소스코드 )
(2) 출력결과( 4개의 윈도우 )
4. 교수 홈페이지(http://cs.knou.ac.kr/~khkim/)에서 Visual C++프로그래밍=> 학습정보=> 교재 예제 프로젝트(VS2019) 에서 “1장 2강-4강 .HelloAPI-용량줄임.zip” 프로젝트 파일을 다운로드 하여 수정하면 쉽게 할 수 있다.
HelloAPI.cpp
- 급하게 짜느라 네이밍 규칙이 개떡같다 ..
#include <windows.h>
#define ID_OK_BTN 2000
#define ID_SUBMISSION_WAY_BTN 2001
#define ID_ADDITIONAL_REGISTER_BTN 2002
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"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 text = L"201934-153694 김진성";
switch (iMessage) {
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 100, 100, text, lstrlen(text));
EndPaint(hWnd, &ps);
return 0;
}
case WM_CREATE:
{
HWND hChildWnd = CreateWindow(
ChildClassName, // 차일드 윈도우 클래스 이름
L"신청기한", // 윈도우 타이틀
WS_OVERLAPPEDWINDOW | WS_CHILD, // 윈도우 스타일
50, // 윈도우 보일 때 x 좌표
150, // 윈도우 보일 때 y 좌표
260, // 윈도우 폭
200, // 윈도우 높이
hWnd, // 부모 윈도우
(HMENU)1000, // 차일드 윈도우ID
g_hInst, // 인스턴스 핸들
(LPVOID)NULL); // 여분의 데이터
ShowWindow(hChildWnd, SW_SHOW);
HWND hChildWnd1 = CreateWindow(
ChildClassName1, // 차일드 윈도우 클래스 이름
L"제출기간", // 윈도우 타이틀
WS_OVERLAPPEDWINDOW | WS_CHILD, // 윈도우 스타일
400, // 윈도우 보일 때 x 좌표
150, // 윈도우 보일 때 y 좌표
260, // 윈도우 폭
200, // 윈도우 높이
hWnd, // 부모 윈도우
(HMENU)1000, // 차일드 윈도우ID
g_hInst, // 인스턴스 핸들
(LPVOID)NULL); // 여분의 데이터
ShowWindow(hChildWnd1, SW_SHOW);
hChildWnd = CreateWindow(
L"button", // 윈도우 클래스 이름
L"소속", // 윈도우 타이틀
WS_CHILD | WS_VISIBLE, // 윈도우 스타일
50, // 윈도우 보일 때 x 좌표
400, // 윈도우 보일 때 y 좌표
150, // 윈도우 폭
30, // 윈도우 높이
hWnd, // 부모 윈도우
(HMENU)ID_OK_BTN, // 컨트롤 ID
g_hInst, // 인스턴스 핸들
(LPVOID)NULL); // 여분의 데이터
hChildWnd = CreateWindow(
L"button", // 윈도우 클래스 이름
L"제출방법", // 윈도우 타이틀
WS_CHILD | WS_VISIBLE, // 윈도우 스타일
400, // 윈도우 보일 때 x 좌표
400, // 윈도우 보일 때 y 좌표
150, // 윈도우 폭
30, // 윈도우 높이
hWnd, // 부모 윈도우
(HMENU)ID_SUBMISSION_WAY_BTN, // 컨트롤 ID
g_hInst, // 인스턴스 핸들
(LPVOID)NULL); // 여분의 데이터
if (!hChildWnd) return -1;
return 0;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == ID_OK_BTN)
{
MessageBox(hWnd, L"서울지역대학", L"소속", MB_OK);
}
if (LOWORD(wParam) == ID_SUBMISSION_WAY_BTN)
{
MessageBox(hWnd, L"온라인제출", L"제출방법", MB_OK);
}
if (LOWORD(wParam) == ID_ADDITIONAL_REGISTER_BTN)
{
MessageBox(hWnd, L"5.27, 18:00 까지", L"추가접수", MB_OK);
}
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"2020.5.8, 18:00까지";
switch (message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 10, text, lstrlen(text));
EndPaint(hWnd, &ps);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
LRESULT CALLBACK ChildWndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LPCTSTR text = L"2020.5.11-5.22, 18:00까지";
switch (message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 30, text, lstrlen(text));
EndPaint(hWnd, &ps);
return 0;
}
case WM_CREATE:
{
HWND hChildWnd = CreateWindow(
L"button", // 윈도우 클래스 이름
L"추가접수", // 윈도우 타이틀
WS_CHILD | WS_VISIBLE, // 윈도우 스타일
40, // 윈도우 보일 때 x 좌표
100, // 윈도우 보일 때 y 좌표
80, // 윈도우 폭
30, // 윈도우 높이
hWnd, // 부모 윈도우
(HMENU)ID_ADDITIONAL_REGISTER_BTN, // 컨트롤 ID
g_hInst, // 인스턴스 핸들
(LPVOID)NULL); // 여분의 데이터
if (!hChildWnd)
return -1;
return 0;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == ID_ADDITIONAL_REGISTER_BTN)
{
MessageBox(hWnd, L"5.27, 18:00 까지", L"추가접수", MB_OK);
}
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
'학교' 카테고리의 다른 글
[방송통신대학교] 2020년도 세상읽기와 논술 기말고사 과제물 (0) | 2020.08.06 |
---|---|
[방송통신대학교] 2020년도 생명과환경 기말고사 과제물 (0) | 2020.08.06 |
[방송통신대학교] 2020년도 이산수학 2학년 출석 대체 시험 과제물 (0) | 2020.05.29 |
[방송통신대학교] 2020년도 세상읽기와 논술 중간 시험 과제물 (0) | 2020.05.08 |
[방송통신대학교] 2020년도 생명과환경 중간 시험 과제물 (0) | 2020.05.08 |
- Total
- Today
- Yesterday
- JavaFX 종료
- 자전거
- JavaFX Table View
- git
- 이펙티브 자바
- 일본 여행
- 자전거 여행
- 인텔리제이
- effective java
- effectivejava
- intelij
- 이펙티브
- 배낭 여행
- JavaFX Window Close
- 일본 자전거 여행
- 일본 배낭여행
- JavaFX 테이블뷰
- 배낭여행
- windows
- 스프링부트
- 일본여행
- JavaFX
- 텐트
- java
- 자바
- 방통대 과제물
- TableView
- 이펙티브자바
- Java UI
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |