본문 바로가기

Programming Study

윈도우 관리 1. 윈도우 관련 함수 생성 및 파괴 윈도우를 생성하는 함수 CreateWindow / CreateWindowEx 대화상자를 만드는 함수 CreateDialog 윈도우를 파괴하거나 최소화하는 함수 BOOL DestroyWindow(HWND hWnd); BOOL CloseWindow(HWND hWnd); - 사실상 윈도우를 직접 파괴하는 경우는 흔하지 않다. - 임시적으로 잠시 만든 윈도우라든가, 아니면 사용자의 명시적인 요구로 메인 윈도우를 파괴할때, 또는 모델리스 대화상자를 파괴할때 등에 DestroyWindow 함수를 가끔 사용한다. - CloseWindow 함수는 윈도우를 단순히 최소화하기만 하는데 ShowWindow(hWnd, SW_MINIMIZE)와 기능적으로 동일하다. 위치와 크기 윈도우의 좌.. 더보기
윈도우 1. 윈도우(Window) 윈도우의 정의 Window : A rectangular area of the screen where the application displays output and receives input from user. 프로그램이 출력 결과를 내 보내고 사용자로부터 입력을 받아들이는 화면상의 사각영역 윈도우의 가장 일반적인 세가지 특징. - 윈도우는 일단 화면상에 존재한다. - 그 모양은 반드시 직사각형이다. - 윈도우는 독립적으로 사용자와 상호작용을 할 수 있다. 2. 윈도우 클래스 모든 윈도우들은 윈도우 클래스로부터 만들어진다. 윈도우 클래스는 윈도우를 만들기위한 형틀이며 생성될 윈도우의 여러 가지 특징들을 모아놓은 구조체이다. 프로그램의 메인 윈도우를 만들기 위해서는 Registe.. 더보기
대화상자 1.대화상자 대화상자는 프로그램과 사용자간의 대화, 곧 명령 및 정보 전달을 위한 특별한 윈도우이다. 대화상자를 컨트롤의 컨테이너라고도 한다. 사용자는 대화상자를 호출한 후 컨트롤을 통해 자신의 의사를 표시하고 명령을 내리며 프로그램은 대화상자에 배치된 컨트롤을 통해 현재 상태를 사용자에게 보여준다. 대화상자는 동작 방식에 따라 크게 모달형과 모델리스형으로 나뉘어진다. 모달(Modal)형은 대화상자를 닫기 전에 다른 윈도우로 전환할 수 없으며 반드시 확인(또는 OK) 버튼이나 취소(또는 Cancel) 버튼을 눌러 대화상자를 닫아야 다른 윈도우로 전환할 수 있다. 그러나 모달형이라 하더라도 다른 프로그램으로는 전환할 수 있다. 모델리스(Modeless)형은 대화상자를 열어 놓은 채로 다른 윈도우로 전환할 .. 더보기
컨트롤 컨트롤(Control) 컨트돌이란 사용자와의 인터페이스를 이루는 도구이다. 인터페이스를 이룬다는 말은 사용자로부터 명령과 입력을 받아들이고 출력 결과를 보여준다는 뜻이므로 컨트롤은 곧 입출력 도구를 뜻한다. 컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 그렇다고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재한다. 컨트롤은 윈도우즈가 운영체제 차원에서 제공하기 때문에 미리 등록되어 있는 윈도우 클래스를 사용하면 된다. 미리 정의된 윈도우 클래스에는 다음과 같은 종류가 있다. 컨트롤 생성 함수 CreateWindow 함수 CreateWindow(lpClassName, lpWindowName, dwStyle, x,.. 더보기
그래픽 1. DC의 정보 수정 GDI(Graphic Device Interface)는 화면, 프린터 등의 모든 출력 장치를 제어하는 윈도우즈의 핵심 모듈 중 하나이다. 윈도우즈 프로그램에서의 모든 출력은 GDI를 통해서 화면과 프린터로 나가게 되어 있다. GDI 오브젝트(GDI Object) - 그래픽 출력에 사용되는 도구를 말한다. - 사용자가 GDI의 출력을 조정할 수 있는 도구이기도 하다. GDI 오브젝트는 모두 핸들로 관리되므로 우리는 다만 GDI 오브젝트를 생성하는 함수를 부르고 이 함수가 리턴하는 핸들을 받아서 사용하기만 하면 된다. DC가 BeginPaint나 GetDC 함수에 의해 처음 만들어졌을 때 디폴트로 선택된 GDI 오브젝트는 다음과 같다. 스톡 오브젝트(Stock Object) - 윈도우.. 더보기
리소스 1. 리소스 리소스란? - 코드의 논리와 무관한 데이터들 - 메뉴, 비트맵, 액셀러레이터, 문자열, 아이콘, 커서 등등 리소스들은 별도의 편집기로 만들어져 컴파일되며 링크시에 실행파일에 결합된다. 이런 컴파일 과정은 API나 MFC에서나 동일하다. 윈도우즈 프로그래밍이 도스에서와 구별되는 큰 차이점 중 하나가 바로 리소스가 코드와 분리되어 있다는 점이다. 윈도우즈 환경에서 리소스를 만드는 과정과 코딩 과정이 분리되어 있어 생기는 장점들 - 디자이너와 프로그래머가 분담하여 작업하기 편리하다. - 컴파일 속도가 현저히 빨라진다. - 한 번 만들어 놓은 리소스를 다른 프로젝트에 쉽게 가져다 쓸 수 있어 재사용에 유리하다. - 리소스는 실행중에 교체가 가능한 모듈이므로 상황에 따라 다른 형태의 리소스를 사용할 .. 더보기
입력_윈도우 관리 메시지 키보드, 마우스, 타이머 등의 입력 처리의 중심에는 메시지가 있다. 이런 명시적인 입력 외에 윈도우에 관한 기본적인 관리도 메시지로 한다. 윈도우의 상황 변화시에 보내지는 메시지들도 응용 프로그램의 입장에서 보면 일종의 입력이라고 보아야 하며 프로그램은 이를 적절하게 처리해야 한다. 생성 및 파괴 윈도우와 관련된 메시지 중 가장 간단한 메시지는 WM_CREATE와 WM_DESTROY 두가지가 있다. WM_CREATE 메시지는 윈도우가 생성될 때 보내지므로 각종 초기화를 하기에 적합한 장소이며 반대로 윈도우가 파괴될 때 보내지는 WM_DESTROY 메시지는 종료처리를 하기에 적합하다. 두 메시지는 윈도우의 일생을 통틀어 딱 한 번씩만 전달되는 특성이 있어 일회적인 작업인 초기, 종료 처리에 사용할 수 있다.. 더보기
입력_타이머 타이머 키보드나 마우스 메시지는 프로그램 실행중에 사용자로부터 입력된다. 메시지는 이렇게 사용자의 동작으로부터 유발되는 것이 보통이지만 사용자의 동작과는 상관 없이 발생하는 메시지도 있다. 대표적으로 타이머 메시지인 WM_TIMER를 들 수 있으며 이 메시지는 한 번 지정해 놓기만 하면 일정한 시간 간격을 두고 연속적으로 계속 발생한다. 주기적으로 같은 동작을 반복해야 한다거나 여러 번 나누어 해야 할 일이 있을 때 이 메시지를 이용한다. 시계 시간이라는 것은 주기적으로 갱신되어야 하는 것이므로 타이머 메시지를 사용하기에 가장 적절한 예이다. #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR l.. 더보기
입력_마우스 MOUSE 윈도우즈와 같은 GUI운영체제에서는 키보드보다 마우스가 더 많이 사용된다. 키보드 입력 처리를 메시지로 하는 것과 마찬가지로 마우스 입력 처리도 메시지를 받아 처리한다. 마우스 입력에 관한 메시지는 다음과 같은 종류가 있다. 마우스 메시지는 lParam의 상위 워드에 마우스 버튼이 눌러진 y좌표, 하위 워드에 x좌표를 가지며 좌표값을 검출해 내기 위해 HIWORD, LOWORD 등의 매크로 함수를 사용한다. 즉 마우스 메시지가 발생한 위치의 좌표는 (LOWORD(lParam),HIWORD(lParam))이 된다. 단, 좌표값은 당연히 영수지만 음수가 되는 특별한 경우도 있음을 주의해야 한다. 음수 좌표가 전달되는 경우에는 (int)(short)형으로 다시 한번 더 캐스팅하여 부호를 제대로 변환.. 더보기
입력_키보드 키보드 WM_CHAR 메시지 윈도우즈 환경에서는 명시적인 입력 함수가 존재하지 않으며 반드시 메시지를 받아야 한다. 왜냐하면 여러 개의 프로그램이 동시에 실행되는 멀티 태스킹 환경이며 사용자가 언제 자신에게 관심을 가질지 예측할 수 없기 때문이다. 윈도우즈 환경에서는 주로 마우스가 많이 사용되지만 아직까지도 컴퓨터의 가장 기본적인 입력장치는 키보드이다. 키보드로부터 입력이 발생했을 경우 윈도우즈 포커스를 가진 프로그램에게 키보드 메시지(WM_CHAR, WM_KEYDOWN)를 보내며 프로그램은 이런 메시지를 받아 키보드 입력을 처리한다. 여기서 포커스(Focus)란 입력 초점이라는 뜻이며 키보드 입력을 받아 들일 수 있는 상태라는 뜻이다. 포커스를 가진 상태란 활성화되어 있고 현재 사용자가 쓰고 있다는 뜻.. 더보기