[Develog] 메모장프로그래밍 5 - Edit윈도우 생성

이성훈·2021년 12월 24일
0

DEVELOG

목록 보기
5/14

이전 포스팅에서 메뉴바에 단축키를 설정하였다.
이번에는 메인윈도우 안에 윈도우를 하나넣어 텍스트를 입력하는 창을 만들려고한다.
이에 필요한 여러 전역변수가있는데

  1. int str_CHANGE : 문자열변경이 이루어지는가
  2. int CANCEL : 앞으로 공용대화상자를 통해 파일 읽기/쓰기시 사용.
  3. HWND Edit : 메인윈도우를 부모로하는 자식윈도우. 크기또한 부모윈도우와 동일하게 바인딩해줄것임
  4. HINSTANCE Global_hInstance : WINAPI즉 메인윈도우 핸들을 전역변수로 등록
  5. TCHAR FILEPATH[500] : 메모장의 제목

이제, 본격적으로 wndProc함수에서 uMsg가 WM_CREATE일때 Edit윈도우를 생성하도록 코드를 짜보자.

//윈도우에서 발생한 메시지를 처리하는 함수
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	//처리하고싶은 내용들을 작성하는 부분
	RECT rt;

	switch (uMsg) {
	case WM_CREATE: //윈도우가 처음 생성될때 한번만 전달되는 메시지.
		GetClientRect(hWnd, &rt);
		//텍스트를 입력할 Edit윈도우 생성부분
		//메인 윈도우와 같은크기로 생성한다.
		Edit = CreateWindow(L"edit", NULL, WS_CHILD | WS_HSCROLL |
			WS_VSCROLL | WS_VISIBLE | ES_MULTILINE, 
			rt.left, rt.top, rt.right, rt.bottom, 
			hWnd, NULL, Global_hInstance, NULL);
		break;
        
	.
    	.
        .

	}
	//이외에 처리하지지않은 기본 메세지들을 대신 처리해주는 함수
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

(WM_CREATE 코드만 집중하겠다.)
여기서 윈도우이름은 edit, 그외에 스크롤바, 여러줄가능 보임기능등 필요한기능을 설정하고, rt.left~rt.bottom을 지정하는데, 앞서 GetClientRect 함수를 통해 메인윈도우 의 크기정보를 RECT구조체 rt로 받아와서, 이것을 이용하여 메인 윈도우 크기와 같도록 생성하는 부분이다.

case WM_SIZE:
		GetClientRect(hWnd, &rt); //메인윈도우크기가 변경될경우 그값을 얻어옴
		//Edit윈도우크기를 메인윈도우크기와 동일하도록
		MoveWindow(Edit, rt.left, rt.top, rt.right, rt.bottom, TRUE);
		break;

또한 이와같은 함수를 추가하여, 이후에 메인윈도우크기변경(사용자가 임의로 변경하는경우..)시 Edit윈도우도 자연스럽게 변경되도록 MoveWindow함수를 이용한다.

profile
I will be a socially developer

0개의 댓글