본문 바로가기

API

컨트롤(에디트)

에디트는 문자열을 직업 입력받을 때 사용.
CreateWindow함수의 세 번째 인수로 지정한다.
 

스타일

설     명

ES_AUTOHSCROLL

수평 스크롤을 지원한다.

ES_AUTOVSCROLL

여러 줄 편집시 수직 스크롤을 지원한다.

ES_LEFT

왼쪽 정렬한다.

ES_CENTER

중앙 정렬한다.

ES_RIGHT

오른쪽 정렬한다.

ES_LOWERCASE

소문자로 변환하여 표시한다.

ES_UPPERCASE

대문자로 변환하여 표시한다.

ES_MULTILINE

여러 줄을 편집할 수 있도록 한다.

ES_NOHIDESEL

포커스를 잃더라도 선택된 영역을 표시한다.

ES_READONLY

읽기전용으로 만들어 편집을 금지한다.



자신의 변화에 대해 다음과 같은 통지 메시지를 부모윈도우로 보낸다. 

메시지

설     명

EN_CHANGE

문자열이 변경되었다.

EN_ERRSPACE

메모리가 부족하다.

EN_HSCROLL

시용자가 수평 스크롤 바를 클릭하였다.

EN_VSCROLL

시용자가 수직 스크롤 바를 클릭하였다.

EN_KILLFOCUS

포커스를 잃었다.

EN_SETFOCUS

포커스를 얻었다.

EN_MAXTEXT

지정한 문자열 길이를 초과하였다.

EN_UPDATE

문자열이 변경되기 직전이다.


EN_UPDATE는 문자열이 변경된 후 화면에 출력하기 직전에 보내는 메시지이며, EN_CHANGE는 문자열이 화면으로 출력되고 난 후 보내지는 메시지이다.

#define ID_EDIT 100
HWND hEdit;
TCHAR str[128];

LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  hEdit = CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,
    10,10,200,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);

  return 0;
}

LRESULT OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  switch(LOWORD(wParam))
  {
    case ID_EDIT:
      switch(HIWORD(wParam))
      {
        case EN_CHANGE:
          GetWindowText(hEdit,str,128);
          SetWindowText(hWnd,str);
      }
  }
  return 0;
}

LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;
  hdc=BeginPaint(hWnd, &ps);
  EndPaint(hWnd, &ps);
  
  return 0;
}

LRESULT OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  PostQuitMessage(0);
  return 0;
}


WM_CREATE에서 에디트를 생성하였으며 ES_AUTOHSCROLL스타일을 주면 에디트 끝부분에 닿았을 때 자동으로 수평 스크롤되어 자신의 폭보다 긴 문자열도 입력할 수 있다.



컨트롤도 윈도우다. 이유는 스스로 메시지를 처리할 수 있는 능력을 가진다는 점이다.
버튼을 마우스로 누르면 들어가는 모양으로 바뀌고 에디트는 키보드 입력을 받으면 문자열을 조립하여 보여준다. 또 WM_PAINT 메시지를 처리하기 때문에 스스로 자신을 복구할수 있고 부모윈도우가 메시지를 보내면 그 메시지를 처리한다. 체크박스는 BM_SETCHECK 메시지를 받으면 wParam값에 따라 자신의 체크 상태를 스스로 변경한다.


#define ID_EDIT 100
HWND hEdit;
int nTop=10;
BOOL bShow=TRUE;
TCHAR *Mes = TEXT("왼쪽 클릭:에디트 이동, 오른쪽 클릭:보임/숨김");

LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  hEdit = CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,
    10,nTop,200,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
  SetWindowText(hEdit,TEXT("에디트도 윈도우다"));

  return 0;
}

LRESULT OnLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  nTop += 10;
  MoveWindow(hEdit,10,nTop,200,25,TRUE);
  return 0;
}

LRESULT OnRButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  if(bShow)
  {
    bShow=FALSE;
    ShowWindow(hEdit,SW_HIDE);
  }
  else
  {
    bShow=TRUE;
    ShowWindow(hEdit,SW_SHOW);
  }
  return 0;
}

LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;
  hdc=BeginPaint(hWnd, &ps);
  TextOut(hdc,200,100,Mes,lstrlen(Mes));
  EndPaint(hWnd, &ps);
  
  return 0;
}

LRESULT OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
  PostQuitMessage(0);
  return 0;

'API' 카테고리의 다른 글

컨트롤과의 통신  (0) 2011.09.28
컨트롤(리스트,콤보 박스)  (0) 2011.09.23
컨트롤(라디오)  (0) 2011.09.21
컨트롤(체크박스)  (0) 2011.09.20
컨트롤(버튼)  (0) 2011.09.19