윈도우 프로그래밍 Visual C++ 2010 MFC Programming(김선우, 신화서 저) 3장 연습문제입니다.
우선 1~8번 문제까지 풀어봤습니다.
[3-1]
Simple 예제의 윈도우 타이틀을 '간단한 MFC 프로그램'으로 수정하시오.
[3-2]
마우스 커서가 다음과 같이 윈도우에서 기본으로 제공하는 정지 아이콘(IDC_NO)으로 표시되도록 Simple 예제를 수정하시오
//ChildView.cpp 내 PreCreateWindow 함수 다음과 같이 수정
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_NO), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);
return TRUE;
}
[3-3]
Simple 예제가 무조건 윈도우 최소화 상태로 실행되도록 수정하시오
//Simple.cpp 내 InitInstance 함수 다음과 같이 수정
BOOL C연습문제33App::InitInstance()
{
CWinApp::InitInstance();
EnableTaskbarInteraction(FALSE);
// RichEdit 컨트롤을 사용하려면 AfxInitRichEdit2()가 있어야 합니다.
// AfxInitRichEdit2();
// 표준 초기화
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
// 아래에서 필요 없는 특정 초기화
// 루틴을 제거해야 합니다.
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
// 적절한 내용으로 수정해야 합니다.
SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성된 응용 프로그램"));
// 주 창을 만들기 위해 이 코드에서는 새 프레임 창 개체를
// 만든 다음 이를 응용 프로그램의 주 창 개체로 설정합니다.
CMainFrame* pFrame = new CMainFrame;
if (!pFrame)
return FALSE;
m_pMainWnd = pFrame;
// 프레임을 만들어 리소스와 함께 로드합니다.
pFrame->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
NULL);
// 창 하나만 초기화되었으므로 이를 표시하고 업데이트합니다.
pFrame->ShowWindow(SW_SHOWMINIMIZED);
pFrame->UpdateWindow();
return TRUE;
}
[3-4]
Simple 예제가 무조건 윈도우 최대화 상태로 실행되도록 수정하시오
//Simple.cpp 내 InitInstance 함수 다음과 같이 수정
BOOL C연습문제34App::InitInstance()
{
CWinApp::InitInstance();
EnableTaskbarInteraction(FALSE);
// RichEdit 컨트롤을 사용하려면 AfxInitRichEdit2()가 있어야 합니다.
// AfxInitRichEdit2();
// 표준 초기화
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
// 아래에서 필요 없는 특정 초기화
// 루틴을 제거해야 합니다.
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
// 적절한 내용으로 수정해야 합니다.
SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성된 응용 프로그램"));
// 주 창을 만들기 위해 이 코드에서는 새 프레임 창 개체를
// 만든 다음 이를 응용 프로그램의 주 창 개체로 설정합니다.
CMainFrame* pFrame = new CMainFrame;
if (!pFrame)
return FALSE;
m_pMainWnd = pFrame;
// 프레임을 만들어 리소스와 함께 로드합니다.
pFrame->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
NULL);
// 창 하나만 초기화되었으므로 이를 표시하고 업데이트합니다.
pFrame->ShowWindow(SW_SHOWMAXIMIZED);
pFrame->UpdateWindow();
return TRUE;
}
[3-5]
실행 파일 이름을 화면에 출력하도록 Simple 예제를 수정하시오
//ChildView.cpp 내 OnPaint 함수 다음과 같이 수정
void CChildView::OnPaint()
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
CString title = AfxGetApp()->m_pszExeName;
dc.TextOutW(50, 50, title);
// 그리기 메시지에 대해서는 CWnd::OnPaint()를 호출하지 마십시오.
}
[3-6]
실행할 때 입력된 명령행 인자를 화면에 출력하도록 Simple 예제를 수정하시오
//ChildView.cpp 내 OnPaint 함수 다음과 같이 수정
void CChildView::OnPaint()
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
CString commandLineFactor = AfxGetApp()->m_lpCmdLine;
if (commandLineFactor != _T('\0'))
dc.TextOutW(50, 50, _T("명령행 처리 인자를 처리할 수 없습니다"));
else
dc.TextOutW(50, 50, commandLineFactor);
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CWnd::OnPaint()를 호출하지 마십시오.
}
[3-7]
CMainFrame의 윈도우 타이틀을 가져와 출력하도록 Simple 예제를 수정하시오
//ChildView.cpp 내 OnPaint 함수 다음과 같이 수정
void CChildView::OnPaint()
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
CString wTitle;
//1번째 방법
/*
CWnd *pMainWnd = ::AfxGetMainWnd();
pMainWnd->GetWindowTextW(wTitle);
*/
//2번째 방법
CWnd *pMainWnd = this->GetParent();
pMainWnd->GetWindowTextW(wTitle);
dc.TextOutW(50, 50, wTitle);
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CWnd::OnPaint()를 호출하지 마십시오.
}
[3-8]
윈도우에 시스템 메뉴와 크기 조절 버튼이 나타나지 않도록 Simple 예제를 수정하시오
//MainFrm.cpp 내 PreCreateWindow 다음과 같이 수정
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: CREATESTRUCT cs를 수정하여 여기에서
// Window 클래스 또는 스타일을 수정합니다.
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU;
cs.style &= ~WS_SYSMENU; //추가
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'MFC > 윈도우 프로그래밍' 카테고리의 다른 글
MFC 윈도우 프로그래밍 3장 심화문제 (4) | 2018.03.21 |
---|---|
MFC 윈도우 프로그래밍 3장 연습문제(9~16) (0) | 2018.03.18 |
MFC 윈도우 프로그래밍 2장 심화문제 (2) | 2018.03.13 |
MFC 윈도우 프로그래밍 2장 연습문제(8~16) (0) | 2018.03.12 |
MFC 윈도우 프로그래밍 2장 연습문제(1~7) (0) | 2018.03.12 |