MFC/윈도우 프로그래밍

MFC 윈도우 프로그래밍 2장 연습문제(1~7)

꾸준함. 2018. 3. 12. 00:13

윈도우 프로그래밍 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를 사용했습니다.

반응형