ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컨트롤의 활용 - 1인 채팅방 만들기 ( 엔터 키, 탭 키, 스크롤 기능 )
    Win API/3. Control 2021. 4. 1. 10:56

    개발 환경은 Visual Studio 2008

    이번 글에서 만들어볼 내용은 컨트롤의 기본적인 내용을 가지고 1인 채팅방을 만들어 볼 것이다.

    아래는 이 프로그램의 완성된 내용의 결과 화면이다.

     

     

    1. 기본 기능 만들기

     

     

     

     

     

     

     

    소스 파일

    WinMain.cpp
    0.00MB

     

     

    위의 프로그램을 실행시키고, 글을 계속 입력하다보면 불편한 점이 나타난다.

    스크롤에 관련한 것인데, 아래의 그림을 보자.

     

     

    2. 스크롤 기능 만들기

    위의 창을 보면 채팅창의 화면( 리스트 박스 )에서 입력한 글의 수가 채팅창 화면의 크기를 넘어서면,

    스크롤의 기능이 활성화 되면 좋겠다.

    위의 채팅창의 화면에서 18줄을 넘어서면, 스크롤의 기능이 활성화 되야 한다.

    스크롤 기능을 만들기 위해서는 아래의 SetScrollPos 함수를 이용해야 한다.

     

    아래 [그림 1]에서는 스크롤 바에서 최소값, 최대값, 현재값을 표시한 것이다.

    다른 컨트롤들은 자신에게 변화가 있을 때 부모 윈도우로 WM_COMMAND 통지 메시지를 보내는데 비해, 
    스크롤 바는 수평일 경우 WM_HSCROLL, 수직일 경우 WM_VSCROLL이라는 별도의 메시지를 부모 윈도우로 보낸다. 

    메시지 전달 후 파리미터는 상기와 같은 값들이 들어가 있고, 

    [그림 1]

     

    [그림 2]

     

    그리고 아래의 내용도 이 스크롤 기능을 만드는데 내용의 힌트다.

     

     

    스크롤의 기능을 추가해 보자.

    스크롤의 기능을 추가할 부분은 사용자가 글을 입력하고 입력 버튼을 클릭했을 때 이다.

    맨 아래의 세 문장이 스크롤의 기능을 수행한다.

     

     

    프로그램 실행결과

    1부터 19까지 차례로 입력하면, 19가 입력되면 스크롤 기능이 동작해야 된다. 

     

     

    소스 파일

    WinMain.cpp
    0.01MB

     

     

     

     

    3. 엔터 키 기능 만들기 ( 서브클래싱 )

    위의 프로그램에서는 다시 불편한 부분이 있다.

    글을 입력하고 전송하려면 입력 버튼을 클릭해야 하는데, 이는 너무 번거롭다.

    즉, 글을 입력하고 "엔터 키"를 입력하는 것도 가능하도록 해야 편할 것이다.

     

    아래와 같이 전역 변수 하나를 선언하고 함수를 정의한다.

     

    아래와 같이 함수의 몸체를 만든다.

     

     

     

     

    소스 파일

    WinMain.cpp
    0.01MB

     

     

     

    4. 탭 키 기능 만들기 ( 서브클래싱 )

    만약에 마우스 커서가 글의 입력 부분에 있다고 가정하자.

    이 상태에서 탭 키를 누르면, 마우스 커서를 ID 입력 부분으로 옮기는 기능을 한다.

    반대로, ID입력 부분에 마우스 커서가 있는 경우에 탭 키를 누르면

    마우스 커서를 글의 입력 부분으로 옮기는 기능을 하도록 구현할 것이다. 

    방식은 위의 엔터 키 기능을 구현할 때와 거의 같다.

     

     

    아래는 WndProc 메시지 처리 함수의  WM_CREATE 부분이다.

     

     

     

    EditSubProc 함수에서 VK_TAB 으로 들어오는 경우는

    마우스 커서의 위치가 글의 입력 공간에 있다가 탭 키가 눌린 경우이므로, 마우스 커서를 ID입력 공간으로 옮기면 된다.

     

     

    아래의 TapSubProc 함수에서 탭 키가 눌리는 경우는

    마우스 커서의 위치가 ID 입력 공간에 있다가 탭 키가 눌린 경우이므로, 마우스 커서를 글 입력 공간으로 옮기면 된다.

     

     

    소스 파일

    WinMain.cpp
    0.01MB

    'Win API > 3. Control' 카테고리의 다른 글

    콤보 박스  (0) 2021.04.01
    리스트 박스  (0) 2021.03.31
    에디트 박스  (0) 2021.03.31
    체크 박스  (0) 2021.03.31
    버튼  (0) 2021.03.29

    댓글

Designed by Tistory.