MFC/윈도우 프로그래밍

MFC 윈도우 프로그래밍 1장 연습문제

꾸준함. 2018. 3. 9. 22:44

윈도우 프로그래밍 Visual C++ 2010 MFC Programming(김선우, 신화서 저) 1장 연습문제입니다.

학교에서는 MFC 프로그래밍을 주로 하기 때문에 MFC 문제들만 풀어봤습니다.


[1-5]

/*

HelloMFC 예제가 무조건 윈도우 최대화 상태로 실행되도록 수정하시오

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        //m_pMainWnd->ShowWindow(m_nCmdShow);

        m_pMainWnd->ShowWindow(SW_MAXIMIZE);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        Create(NULL, _T("HelloMFC"));

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 클릭!"), _T("마우스 메시지"));

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

 

[1-7]

/*

마우스 왼쪽 버튼을 누르면 다음과 같이 <확인>/<취소> 버튼이 있는 메시지 상자가

나타나도록 HelloMFC 예제를 수정하시오

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        Create(NULL, _T("HelloMFC"));

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 클릭!"), _T("마우스 메시지"), MB_OKCANCEL); //MB_OKCANCEL 추가

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

 

 

 

[1-9]

/*

마우스 오른쪽 버튼을 누르면 다음과 같이 느낌표(!) 아이콘이 있는 메시지 상자가

나타나도록 HelloMFC 예제를 수정하시오

 

책의 힌트에서는 CWnd::MessageBox() 함수의 세 번째 인자 이용하라고 했지만

저는 메인 윈도우 클래스에 OnRButtonDown() 함수를 선언하고 매크로에 추가했습니다.

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        //afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        afx_msg void OnRButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        Create(NULL, _T("HelloMFC"));

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

/*

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 클릭!"), _T("마우스 메시지"));

}

*/

 

void CMainFrame::OnRButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 우클릭!"), _T("마우스 메시지"));

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        //ON_WM_LBUTTONDOWN()

        ON_WM_RBUTTONDOWN()

END_MESSAGE_MAP()

 

 


[1-11]

/*

기존 윈도우 대신 캡션이 있는 팝업 윈도우를 생성하도록

HelloMFC 예제를 수정하시오

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        //팝업 윈도우 위치와 크기 지정

        RECT frame = { 20, 40, 480, 320 }; //왼쪽 위 x좌표, 왼쪽 위 y 좌표, 오른쪽 아래 x좌표, 오른쪽 아래 y좌표

        Create(NULL, _T("HelloMFC"), WS_POPUPWINDOW | WS_CAPTION, frame);

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 클릭!"), _T("마우스 메시지"));

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

 

 


[1-13]

/*

HelloMFC 예제가 최상위(메인) 윈도우로 실행되도록 수정하시오

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        RECT frame = { 20, 40, 480, 320 };

        //Create(NULL, _T("HelloMFC"));

        CreateEx(0, NULL, _T("HelloMFC"), WS_EX_TOPMOST, frame, NULL, NULL);

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 클릭!"), _T("마우스 메시지"));

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

 

 


[1-15]

/*

명령행 인자를 입력했을 때 "명령행 인자를 처리할 수 없습니다.\n계속 진행하시겠습니까?라는

메시지 상자를 띄워 <> 버튼을 누르면 진행, <아니오> 버튼을 누르면 종료하도록

HelloMFC 예제를 수정하시오

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        Create(NULL, _T("HelloMFC"));

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        //MessageBox(_T("명령행 인자를 처리할 수 없습니다.\n계속 진행하시겠습니까?"), _T("마우스 메시지"), MB_YESNO);

        if (IDYES == AfxMessageBox(L"명령행 인자를 처리할 수 없습니다.\n계속 진행하시겠습니까?", MB_YESNO))

        {

               //계속 진행

        }

        else

        {

               AfxGetMainWnd()->SendMessage(WM_CLOSE); //프로그램 종료

        }

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

 

 


[1-16]

/*

HelloMFC 예제가 프로그램 종료 시 다음과 같은 메시지 상자를 띄우도록 수정하시오

*/

#include <afxwin.h>

 

//응용 프로그램 클래스 선언

class CHelloApp :public CWinApp

{

public:

        virtual BOOL InitInstance();

        virtual BOOL ExitInstance(); //추가

};

 

//메인 윈도우 클래스 선언

class CMainFrame :public CFrameWnd

{

public:

        CMainFrame();

protected:

        afx_msg void OnPaint();

        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

        DECLARE_MESSAGE_MAP();

};

 

//응용 프로그램 객체 선언

CHelloApp theApp;

 

//응용 프로그램 클래스 정의

BOOL CHelloApp::InitInstance()

{

        m_pMainWnd = new CMainFrame();

        m_pMainWnd->ShowWindow(m_nCmdShow);

        return TRUE;

}

 

//종료시

BOOL CHelloApp::ExitInstance()

{

        MessageBox(NULL, _T("프로그램을 종료합니다"), _T("종료"), MB_OK);

        return TRUE;

}

 

//메인 윈도우 클래스 정의

CMainFrame::CMainFrame()

{

        Create(NULL, _T("HelloMFC"));

}

 

void CMainFrame::OnPaint()

{

        CPaintDC dc(this);

        TCHAR *msg = _T("Hello, MFC");

        dc.TextOutW(100, 100, msg, lstrlen(msg));

}

 

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)

{

        MessageBox(_T("마우스 클릭!"), _T("마우스 메시지"));

}

 

//메시지 맵 선언

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

        ON_WM_PAINT()

        ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP()

 

 


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 


반응형