윈도우 프로그래밍 Visual C++ 2010 MFC Programming(김선우, 신화서 저) 2장 연습문제입니다.
우선 1~7번 문제까지 풀어봤습니다.
[2-1]
// 연습문제 2-1.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
Console 예제에 "메시지입니다." 문자열을 문자열 리소스(ID는 IDS_MESSAGE)로 추가하고,
CString 클래스를 이용하여 읽어들여 콘솔에 출력하도록 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-1.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("")); //한글 출력
CString str;
str.LoadStringW(IDS_MESSAGE);
_tprintf(_T("%s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-2]
// 연습문제 2-2.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
Console 예제에 "이름: %s, 나이: %d" 문자열을 문자열 리소스(ID는 IDS_FORMAT)로
추가하고, CString 클래스를 이용하여 자신의 이름과 나이를 문자열로 변환하여 출력하도록
예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-2.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("")); //한글 출력
CString str;
str.Format(IDS_FORMAT, _T("구데타마"), 25);
_tprintf(_T("%s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-3]
// 연습문제 2-3.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
TCHAR[1024] 버퍼에 ::_tscanf() 함수로 영어 문자열을 입력받아 CString 객체로 만든 후,
대문자로 변경하여 출력하도록 Console 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-3.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 buffer[1024];
_tscanf_s(_T("%s"), buffer, _countof(buffer));
_tprintf(_T("변경 전: %s\n"), buffer);
CString str = buffer;
str.MakeUpper();
_tprintf(_T("변경 후: %s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-4]
// 연습문제 2-4.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
TCHAR[1024] 버퍼와 ::_tscanf() 함수로 이용하여 문자열을 입력받아 CString 객체로 만든 후,
문자열에 있는 모든 마침표("."), 문자를 공백(" ") 문자로 대체하여 출력하도록 Console 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-4.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 buffer[1024];
_tscanf_s(_T("%s"), buffer, _countof(buffer));
_tprintf(_T("변경 전: %s\n"), buffer);
CString str = buffer;
str.Replace('.', ' ');
_tprintf(_T("변경 후: %s\n"), str);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-5]
// 연습문제 2-5.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
x 좌표 30, y 좌표 40에, 가로가 100이고 세로가 200인 CRect 객체를 생성하고,
이 영역의 중심 좌표(x, y)를 출력하도록 Console 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-5.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(30, 40, 30 + 100, 40 + 200);
CPoint coord = rect.CenterPoint();
_tprintf(_T("(%d, %d)\n"), coord.x, coord.y);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-6]
// 연습문제 2-6.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
직사각형 왼쪽 상단과 오른쪽 하단 좌표가 {100, 50, 250, 180}인 CRect 객체를 생성하고
이 영역의 크기(폭, 너비)를 출력하도록 Console 예제를 수정하시오
*/
#include "stdafx.h"
#include "연습문제 2-6.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(100, 50, 250, 180);
CSize sz = rect.Size(); //가로 세로
_tprintf(_T("폭: %d, 넓이: %d\n"), sz.cx, sz.cx*sz.cy);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
[2-7]
// 연습문제 2-7.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
/*
Console 예제를 다음과 같이 수정하시오
먼저 직사각형 왼쪽 상단과 오른쪽 하단 좌표가 {10, 20, 30, 40}인 CRect 객체를 생성하고
가로가 150, 세로 80만큼 이동시킨다.
그리고 이 직사각형의 왼쪽 상단과 오른쪽 하단 좌표(left, top, right, bottom)를 출력한다
*/
#include "stdafx.h"
#include "연습문제 2-7.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(10, 20, 30, 40);
rect.OffsetRect(150, 80); //가로 150, 세로 80
CPoint ul = rect.TopLeft();
CPoint lr = rect.BottomRight();
_tprintf(_T("좌상단 좌표: (%d, %d), 우하단 좌표: (%d, %d)\n"), ul.x, ul.y, lr.x, lr.y);
}
}
else
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
wprintf(L"심각한 오류: GetModuleHandle 실패\n");
nRetCode = 1;
}
return nRetCode;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
*Visual Studio 2017에서는 _tscanf를 사용할 경우 컴파일이 안되고 _tscanf_s를 쓸 경우 컴파일이 되었습니다.
*pragma를 적적히 사용하면 _tscanf를 사용할 수 있겠지만 굳이 그럴 필요성은 느끼지 않아 _tscanf_s를 사용했습니다.
'MFC > 윈도우 프로그래밍' 카테고리의 다른 글
MFC 윈도우 프로그래밍 3장 연습문제(1~8) (0) | 2018.03.18 |
---|---|
MFC 윈도우 프로그래밍 2장 심화문제 (2) | 2018.03.13 |
MFC 윈도우 프로그래밍 2장 연습문제(8~16) (0) | 2018.03.12 |
MFC 윈도우 프로그래밍 1장 심화문제 (0) | 2018.03.09 |
MFC 윈도우 프로그래밍 1장 연습문제 (0) | 2018.03.09 |