AfxGetMainWnd(); 함수는 현재 스레드의 메인 윈도우 핸들을 리턴한다.
전역함수로 선언 되어있다.
현재스레드의 메인 윈도우의 핸들을 부르는 것이기 때문에 스레드를 사용하는 프로그램에서는 원하지 않은
결과를 리턴할 수 있다.
즉, 다른 스레드에서 이 함수를 호출 할 경우 올바른 MainWnd를 호출할 수 없게 된다.
해결 방법 :
AfxGetMainWnd() // 대신
AfxGetApp()->GetMainWnd()// 를 사용
참고: https://frostguy.tistory.com/37
AfxGetMainWnd()에서 문제가 발생할 경우
-AfxGetApp AfxGetApp() 전역 함수를 호출하게 되면 MFC 응용프로그램의 최초에 생성된 스레드의 app 를 반환해 준다. - AfxGetMainWnd AfxGetMainWnd() MFC 전역 함수는 현재 스레드의 메인 윈도우 핸들을..
frostguy.tistory.com
AfxGetMainWnd(); 함수는 현재 스레드의 메인 윈도우 핸들을 리턴한다.
GetWindowRect(); : 현재윈도우의 렉트 정보를 얻어오는 함수이다.
SetRect() : 지정한 인자값 대로 rect정보를 세팅하는 함수
GetClientRect(&rcMainView); : 현재 view 창의 rect 정보를 얻어오는 함수
SetWindowPos() : 윈도우 창의 위치 및 크기를 재조정하는 함수
AfxGetMainWnd(); 로 현재 메인 윈도우 핸들을 반환받고, 핸들을 가지고 GetWindowRect(); 에서 윈도우 렉트 정보를 얻어온다.
SetRect() : 으로 윈도우좌표를 0.0 으로 맞춘다음 GetClientRect(&rcMainView); 로 클라이언트 렉트 정보를 가져온다.
0.0 기준으로 설정이 되었으니 프레임 차이를 구할 수있다.
float fRowFrm = float(rcWindow.right - rcMainView.right);
float fColFrm = float(rcWindow.bottom - rcMainView.bottom);
으로 프레임 의 크기를 구한다.
SetWindowPos() : 함수로 윈도우 창의 크기를
pMainFrm->SetWindowPos(NULL, 0,0, int(WINCX + fRowFrm), int(WINCY + fColFrm), SWP_NOZORDER);
으로 맞춰 주면 뷰창 즉 , 클라이언트 창의 크기는 우리가 정한 800, 600 사이즈 만큼 나오게 된다.
'MFC' 카테고리의 다른 글
[MFC] CString 클래스 멤버함수 요약 (0) | 2022.01.05 |
---|---|
[MFC] MFC 특징 복습 (0) | 2021.12.27 |
[MFC]타일피킹(직선의 방정식) (0) | 2021.12.25 |
[MFC] MAX_PATH (0) | 2021.12.23 |
[MFC] MessageBoxW (0) | 2021.12.22 |