MFC

[MFC] 윈도우창 관련 함수(클라이언트창 크기 셋팅)

FORHAPPy 2021. 12. 24. 18:16

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