윈도우 프로그래밍 Visual C++ 2010 MFC Programming(김선우, 신화서 저) 2장 연습문제입니다.
저번에 이어서 풀었습니다.
[2-8]
// 연습문제 2-8.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
Console 예제를 다음과 같이 수정하시오.
먼저 직사각형 왼쪽 상단과 오른쪽 하단 좌표가 {80, 45, 190, 135}인 CRect 객체를 생성하고,
::_tscanf() 함수로 특정 좌표 (x, y)를 "%d, %d" 형태로 입력받아 CPoint 객체로 저장한다.
그리고 입력된 자표가 해당 직사각형 내에 있으면 내부를, 그렇지 않으면 외부 출력
*/
#include "stdafx.h"
#include "연습문제 2-8.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T(""));
CRect rect(80, 45, 190, 135);
CPoint coord;
_tscanf_s(_T("%d %d"), &coord.x, &coord.y);
if (rect.PtInRect(coord))
_tprintf(_T("내부\n"));
else
_tprintf(_T("외부\n"));
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-9]
// 연습문제 2-9.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
CTime 클래스를 이용해 현재 시각을 받아 '2013-11-22 13:23:40'과 같이
날짜와 시, 분, 초를 출력하도록 Console 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-9.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T(""));
CTime tm;
tm = CTime::GetCurrentTime();
CString str = tm.Format(_T("%Y"));
_tprintf(_T("%s"), str);
str.Format(_T("-%d-%d %d:%d:%d"), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond());
_tprintf(_T("%s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-10]
// 연습문제 2-10.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
//
#include "stdafx.h"
#include "연습문제 2-10.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
//_tsetlocale(LC_ALL, _T(""));
CTime tm = CTime::GetCurrentTime();
CString str = tm.FormatGmt(_T("%A, %B %d, %Y"));
_tprintf(_T("%s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-11]
// 연습문제 2-11.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
CTime과 CTimeSpan 클래스를 이용해 오늘부터 1000일째 되는 기념일을 계산하여
날짜를 출력하도록 Console 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-11.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T(""));
CTime tm;
tm = CTime::GetCurrentTime();
CString str = tm.Format(_T("%A, %B %d, %Y"));
_tprintf(_T("현재 날짜: %s\n"), str);
tm += CTimeSpan(1000, 0, 0, 0); //일, 시간, 분, 초
str = tm.Format(_T("%A, %B %d, %Y"));
_tprintf(_T("1000일 후 날짜: %s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-12]
// 연습문제 2-12.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
CUintArray 클래스를 이용해 1부터 100까지 입력하고, 입력된 값을 순서대로
출력한 뒤 '합: 5050, 평균50' 형태로 합계와 평균을 출력하도록 ArrayTest1 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-12.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T(""));
CUIntArray array;
array.SetSize(100);
UINT sum = 0;
for (int i = 0; i < 100; i++)
{
array[i] = i + 1;
sum += array[i];
}
for(int i=0; i<100; i++)
_tprintf(_T("%d "), array[i]);
_tprintf(_T("\n"));
_tprintf(_T("합: %d, 평균: %d\n"), sum, sum / 100);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-13]
// 연습문제 2-13.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
Point3D 구조체에 'COLORREF color' 멤버를 추가한 Point3DColor 구조체를 정의하고,
임의의 색상값으로 초기화하고 해당 색상값을 함께 출력하도록 ArrayTest2 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-13.h"
#include <afxtempl.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
struct Point3D
{
int x, y, z;
COLORREF color;
Point3D() {} //템플릿 클래스에 사용할 때는 반드시 기본생성자 필요
Point3D(int x0, int y0, int z0, COLORREF c) :x(x0), y(y0), z(z0), color(c)
{
}
};
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
CArray<Point3D, Point3D&> array;
array.SetSize(5);
for (int i = 0; i < 5; i++)
{
Point3D pt(i, i * 10, i * 100, RGB(i * i, i * 10, i * 20));
array[i] = pt;
}
for (int i = 0; i < 5; i++)
{
Point3D pt = array[i];
_tprintf(_T("%d, %d, %d, color: %x\n"), pt.x, pt.y, pt.z, pt.color);
}
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-14]
// 연습문제 2-14.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
CStriingList 클래스 대신 CList<> 템플릿 클래스를 사용하도록 ListTest1 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-14.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T("")); //한글 출력
TCHAR *szFruits[] =
{
_T("사과"), _T("딸기"), _T("포도"), _T("오렌지"), _T("자두")
};
CList<CString, LPCTSTR> list;
for (int i = 0; i < 5; i++)
list.AddTail(szFruits[i]);
POSITION pos = list.GetHeadPosition();
while (pos != NULL)
{
CString str = list.GetNext(pos);
_tprintf(_T("%s "), str);
}
_tprintf(_T("\n"));
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-15]
// 연습문제 2-15.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
ListTest1 예제를 다음과 같이 수정하시오.
먼저 CList<> 템플릿 클래스를 사용하여 1부터 100까지 값을 보관한다.
그런 뒤 ::_tscanf() 함수로 1~100 사이 값을 입력받아 목록에서 검색하여 삭제하고, 남은 목록을 출력한다
*/
#include "stdafx.h"
#include "연습문제 2-15.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T(""));
CList<UINT> list;
for (int i = 0; i < 100; i++)
list.AddTail(i + 1);
POSITION pos = list.GetHeadPosition();
_tprintf(_T("기존: "));
while (pos != NULL)
{
UINT temp = list.GetNext(pos);
_tprintf(_T("%d "), temp);
}
_tprintf(_T("\n"));
UINT num;
_tprintf(_T("삭제할 번호: "));
_tscanf_s(_T("%d"), &num);
pos = list.Find(num);
list.RemoveAt(pos);
pos = list.GetHeadPosition();
_tprintf(_T("변경 후: "));
while (pos != NULL)
{
UINT temp = list.GetNext(pos);
_tprintf(_T("%d "), temp);
}
_tprintf(_T("\n"));
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-16]
// 연습문제 2-16.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
다음 표의 데이터를 보관하고, 이름을 입력하면 키를 출력하고
키를 입력하면 관련된 이름을 모두 출력하도록 MapTest2 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-16.h"
#include <afxtempl.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
//CString 타입에 해당하는 해시 함수가 없으므로 정의
template <> UINT AFXAPI HashKey(CString &str)
{
LPCTSTR key = (LPCTSTR)str;
return HashKey(key); //LPCTSTR 타입의 해시함수를 재호출
}
int main()
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(nullptr);
if (hModule != nullptr)
{
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: MFC를 초기화하지 못했습니다.\n");
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
_tsetlocale(LC_ALL, _T(""));
//맵(CString->UINT) 객체를 생성하고 초기화
CMap<CString, CString&, UINT, UINT&> map;
map[CString(_T("홍길동"))] = 172;
map[CString(_T("박철수"))] = 164;
map[CString(_T("오영희"))] = 166;
map[CString(_T("구오성"))] = 182;
map[CString(_T("김순희"))] = 159;
map[CString(_T("최성주"))] = 177;
map[CString(_T("신여정"))] = 172;
TCHAR buffer[1024];
UINT input, nCount;
_tscanf_s(_T("%s"), buffer, _countof(buffer));
CString name(buffer);
input = _ttoi((LPCTSTR)name); //CString->UINT
if(map.Lookup(name, nCount))
{
_tprintf(_T("%dcm\n"), nCount);
}
else
{
POSITION pos = map.GetStartPosition();
BOOL cnt = false; //이름을 찾았는지 여부
while (pos != NULL)
{
map.GetNextAssoc(pos, name, nCount); //링크드 리스트처럼 하나하나 찾으며
if (input == nCount)
{
_tprintf(_T("%s "), name);
cnt = TRUE;
}
}
if (!cnt)
_tprintf(_T("표에 존재하지 않는 이름입니다\n"));
_tprintf(_T("\n"));
}
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'MFC > 윈도우 프로그래밍' 카테고리의 다른 글
MFC 윈도우 프로그래밍 3장 연습문제(1~8) (0) | 2018.03.18 |
---|---|
MFC 윈도우 프로그래밍 2장 심화문제 (2) | 2018.03.13 |
MFC 윈도우 프로그래밍 2장 연습문제(1~7) (0) | 2018.03.12 |
MFC 윈도우 프로그래밍 1장 심화문제 (0) | 2018.03.09 |
MFC 윈도우 프로그래밍 1장 연습문제 (0) | 2018.03.09 |