일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이토치
- TensorFlow
- MFC 프로그래밍
- 가우시안 필터링
- pytorch zero to all
- 골빈해커
- 김성훈 교수님 PyTorch
- pytorch
- 미디언 필터링
- 케라스 정리
- 파이토치 김성훈 교수님 강의 정리
- Pytorch Lecture
- 파이토치 강의 정리
- 딥러닝 공부
- c언어
- 해리스 코너 검출
- tensorflow 예제
- 모두의 딥러닝
- matlab 영상처리
- c언어 정리
- 팀프로젝트
- 컴퓨터 비전
- c++
- 모두의 딥러닝 예제
- C언어 공부
- 영상처리
- object detection
- c++공부
- 딥러닝
- 딥러닝 스터디
- Today
- Total
ComputerVision Jack
[MFC - Chapter3 연습 문제] 본문
1. Simple 예제에서 윈도우 타이틀을 '간단한 MFC 프로그램' 으로 수정하시오
Resource에 접근하여 IDR_MAINFRAME 캡션을 문제에서 정의한 값으로 변경하면 완료된다.
2. 마우스 커서가 다음과 같이 윈도우에서 기본으로 제공하는 손 아이콘(IDC_HAND)으로 변경되도록 Simple예제를 수정하시오.
마우스 자체는 캡쳐가 되지 않기에 직접 구현해본다면 마우스 커서가 변경되는 것을 확인할 수 있다.
우선 View 영역에 대한 출력과 관련되기 때문에 ChildView.cpp에서 처리해야합니다.
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS VREDRAW | CS_DBLCLKS,
::LoadCursor(nullptr, IDC_HAND), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), nullptr);
LoadCursor() 인자를 IDC_HAND로 변경하면 된다.
3. 뷰 윈도우에 가로 스크롤 바와 세로 스크롤 바가 나타나도록 Simple 예제를 수정하시오.
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 CREATESTRUCT::style 변수를 조작하면 된다. cs.style |= WS_HSCROLL | WS_VSCROLL;
( &= 제거와 관련된 연산을 수행하는 연산자이고 |= 추가와 관련된 연산을 수행하는 연산자입니다.) - 논리로 생각
4. Simple 예제를 수정하여, 다음과 같은 위도우 타이틀 내 시스템 메뉴가 나타나지 않도록 하시오.
프레임과 관련되어 스타일을 조작해야하기 때문에 CMainFrame()에 접근해야합니다.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 CREATESTRUCT::style 변수를 조작하면 된다. cs.style &= ~WS_SYSMENU;
5. Simple 예제에서, 다음과 같이 윈도우 타이틀 내 최소화 버튼과 최대화 버튼이 없이 종료 버튼만 남아있도록 수정하시오.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 CREATESTRUCT::style 변수를 조작하면 된다. cs.style &= ~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX;
6. 윈도우 왼쪽 상단 위치가 (100, 200) 화면 좌표에서 실행되도록 Simple 예제를 수정하시오.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 CREATESTRUCT 구조체 변수를 이용하면 쉽게 해결할 수 있다. cs.x = 100; cs.y = 200;
7. 폭이 1024, 너비가 768인 윈도우로 실행되도록 Simple 예제를 수정하시오.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 CREATESTRUCT 구조체 변수를 이용하면 쉽게 해결할 수 있다. cs.cx = 100; cs.cy = 200;
8. 기존 윈도우 대신 다음과 같은 타이틀바가 있는 팝업 윈도우를 생성하도록 Simple예제를 수정하시오.
우선 팝업 윈도우를 생성할 땐, 위치와 크기 지정이 필요하다.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 위치와 크기를 설정하고 CREATESTRUCT style을 설정하여 해결한다.
cs.cx = 100; cs.cy = 200;
cs.style |= WS_POPUPWINDOW | WS_CATION | WS_OVERLAPPEDWINDOW;
9. Simple 예제가 최상위 윈도우로 실행되도록 수정하시오.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { } 에 접근하여 CREATESTRUCT::dwExStyle 변수를 설정하면 된다. cs.dwExStyle |= WS_EX_TOPMOST;
10. Simple 예제가 무조건 윈도우 최소화 상태로 실행되도록 실행하시오.
응용어플리케이션 관점에서 설장하기 때문에 CSimpleApp::InitInstance() 함수내에서 CWnd::ShowWindow() 함수 인자를 설정한다. CFrameWnd* pFrame = new CMainFrame;
m_pMainWnd = pFrame; // 프로임을 만들어 리소스와 함께 로드합니다.
pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, nullptr, nullptr);
pFrame->ShowWindow(SW_SHOWMINIMIZED);
11. Simple 예제가 무조건 윈도우 최대화 상태로 실행되도록 수정하시오.
pFrame->ShowWindow(SW_SHOWMAXIMIZED);
12. Simple 예제에서, '안녕하세요' 문구 대신 실행 파일 이름을 화면에 출력하도록 수정하시오.
화면 출력과 관련된 View 작업이기 때문에 ChildView.cpp에서 작업을 실행한다.
void CChildView::OnPaint(){
CPaintDC dc(this);
CWinApp* cwa = AfxGetApp(); //앱 정보를 받아온다.
dc.TextOutW(50, 50, cwa->m_pszExeName);
}
13. Simple 예제에서 '안녕하세요' 문구 대신 실행할 때 입력된 명령행 인자를 화면에 출력하도록 수정하시오.
void CChildView::OnPaint(){
CPaintDC dc(this);
CWinApp* cwa = AfxGetApp(); //앱 정보를 받아온다.
dc.TextOutW(50, 50, cwa->m_lpCmdLine);
}
14. Simple 예제에서 '안녕하세요' 문구 대신 CMainFrame 윈도우 타이틀을 화면에 출력하도록 수정하시오.
void CChildView::OnPaint(){
CPaintDC dc(this);
CWnd * cw = AfxGetMainWnd(); //프레임 정보를 받아온다.
CString titile;
cw -> GetWindowTextW(title);
dc.TextOutW(50, 50, title);
}
15. CSimpleApp::InitInstance() 함수에서 CMainFrame 객체를 생성할 때, new 연산자 대신 CRuntimeClass::CreateObject() 함수로 생성하도록 Simple 예제를 수정하시오.
우선 MainFrame.h 에서 DECLARE_DYNCREATE(CMainFrame) 으로 변경시킨다.
그 다음 MainFrame.cpp 에서 IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd); 로 변경시킨다.
Simple.cpp의 CSimpleApp::InitInstance() 에서 CRuntimeClass::CreateObject() 함수로 생성한다.
16. 프로그램을 종료할 때 다음과 같은 메시지 상자를 띄우도록 Simple 예제를 수정하시오.
프로그램이 종료할 때, Simple.cpp에서 CSimpleApp::ExitInstance 부분에 메시지 박스를 처리해주면 된다.
int CSimpleApp::ExitInstance() {
MessageBox(NULL, _T("프로그램을 종료합니다."), _T("종료"), NULL);
return CWinApp::ExitInstance();
}
17. 프로그램을 종료할 때 윈도우 크기와 위치 정보를 보관해 두었다가 다시 실행할 때 그 크기와 위치가 복원 되도록 Simple 예제를 수정하시오. 단 정보는 레지스트에 보관한다.
CMainFrame::PreCreateWindow(CREATESTRUCT& cs)에 CWinApp::GetProfileInt() 함수를 통해 레지스트 값을 가져온다.
윈도우를 종료하면 그 당시 윈도우의 위치에 관한 정보를 레지스터에 저장한다.
'Image Processing > MFC Programming' 카테고리의 다른 글
[MFC - Chapter4 연습문제] (1) | 2020.09.14 |
---|---|
[MFC - 화면 출력] (0) | 2020.08.18 |
[MFC - MFC 프로그램 구조] (0) | 2020.08.17 |
[MFC - Chater2 연습 문제] (2) | 2020.08.06 |
[MFC - MFC 기초 클래스] (0) | 2020.08.05 |