[방통대/방송대] 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);
}
* 결과물
반응형
'한 걸음 > 컴공' 카테고리의 다른 글
방송통신대(방송대, 방통대) 컴퓨터과학과 들었던 과목들 정리 (4) | 2022.07.17 |
---|---|
[2022-3회차] 정보처리기사 필기 합격 후기 (0) | 2022.07.16 |
[웹 개발 기초] 웹이란? & 웹 API (0) | 2022.03.30 |