본문 바로가기
컴퓨터과학[2-1]/knou_[2-1]Visual_C

Visual C++ 4강 차일드 윈도우와 버튼 컨트롤

by boolean 2015. 1. 24.
728x90

Visual C++ 4강 차일드 윈도우와 버튼 컨트롤

  1. 차일드 윈도우에는 두 가지 종류가 있다. 버튼이나 콤보 박스와 같은 컨트롤 형태의 차일드 윈도우일반 윈도우 형태의 차일드 윈도우가 있다. 메인 윈도우가 생성 될 때 즉, WM_CREATE메시지가 발생했을 때 만들어 준다. 따라서 모두 메인 윈도우의 윈도우 프로시저 함수에서 WM_CREATE 메시지를 처리하는 곳에서 정의한다.
  2. 일반 윈도우 형태의 차일드 윈도우를 생성 할 때는 메인 윈도우를 생성하는 것과 마찬가지로 등록(RegisterClass)하고 생성(CreateWindow)하고 보여주는(ShowWindow) 함수들을 함수를 사용해서 윈도우를 생성한다.
  3. 차일드 윈도우에서 발생되는 메시지를 처리하기 위한 차일드 윈도우 프로시저 함수(콜백함수)를 정의해야한다. 예를 들면 차일드 윈도우에 문자열을 출력하려면 출력코드들을 이곳차일드 윈도우 프로시저함수의 WM_PAINT를 처리하는 곳에서 정의해 준다.
  4. 컨트롤(Control)도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 타이틀 바나 경계선을 가지고 독립적으로 사용되는 것이 아니라 메인 윈도우의 차일드 윈도우로 존재한다.
  5. 윈도우를 만들 때는 WNDCLASS형 구조체를 정의하고 RegisterClass함수를 사용하여 등록한 후 CreateWindow 함수를 호출한다. 그러나 컨트롤은 윈도우 운영체제에서 제공 해 주기 때문에 원도우 클래스를 만들 필요 없이 윈도우 운영체제에서 미리 정의되어 있는 윈도우 클래스를 사용하기만 하면 된다.
  6. 미리 정의된 윈도우 클래스는 다음과 같다.
    윈도우 클래스 컨트롤
     button  버튼, 체크, 라디오
     static  텍스트
     scrollbar  스크롤 바
     edit  에디터
     listbox  리스트 박스
     combobox  콤보 박스
  7. 버튼을 클릭할 경우 WM_COMMAND 메시지를 부모 윈도우에게 보내며 이때 전달되는 정보는 다음과 같다.
    메시지  WM_COMMAND
    wParam  상위 2 바이트 : 어떤 종류의 메시지 인지 부모에게  알려주는 통지(Notify) 코드, 버튼이 클릭되면, BN_CLICK가 전달된다.
     하위 2 바이트 : 컨트롤의 ID
    lParam  버튼 컨트롤의 윈도우 핸들
  8. 컨트롤의 ID는 CreateWindow의 아홉 번째 매개변수에서 지정한 정수 값이며 어떤 컨트롤이 통지 메시지를 보냈는지를 알려준다. 통지 코드는 차일드 컨트롤이 왜 메시지를 보냈는가를 나타내는 값이다. 버튼의 경우 통지코드는 항상 사용자가 자신을 클릭했다는 의미의 BN_CLICKED이므로 이 값은 특별히 검사해볼 필요가 없지만 통지 코드가 여러 개인 컨트롤은 이 값을 검사해 보아야 한다. 부모 윈도우는 WM_COMMAND에서 LOWORD(wParam)값을 조사하여 어떤 컨트롤이 눌러졌는지에 따라 적절한 처리를 한다.
  9. 지역대학 버튼을 클릭하면 메시지 박스가 나타나야 한다. MessageBox() 함수를 호출해야 하는데 각각의 매개변수는 다음과 같다.
    int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
     hWnd  메시지 박스를 소유하는 윈도우의 핸들
     lpText  메시지 박스의 텍스트에 보여질 문자열
     lpCaption  메시지 박스의 캡션에 보여질 문자열
     uType  메시지 박스에 보여줄 버튼의 종류
     MB_OK : [확인] 버튼만 있는 메시지 박스
     MB_OKCANCEL : [확인], [취소] 버튼만 있는 메시지 박스
     MB_YESNO : [YES], [NO] 버튼만 있는 메시지 박스


댓글