에디트는 문자열을 직업 입력받을 때 사용.
CreateWindow함수의 세 번째 인수로 지정한다.
자신의 변화에 대해 다음과 같은 통지 메시지를 부모윈도우로 보낸다.
EN_UPDATE는 문자열이 변경된 후 화면에 출력하기 직전에 보내는 메시지이며, EN_CHANGE는 문자열이 화면으로 출력되고 난 후 보내지는 메시지이다.
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;
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;
}
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;