일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- DP
- 다익스트라
- Hash
- Two Points
- MYSQL
- 이진탐색
- 스토어드 프로시저
- SQL
- Stored Procedure
- 그래프
- Trie
- String
- two pointer
- Brute Force
- union find
- binary search
- Dijkstra
Archives
- Today
- Total
codingfarm
7-4. 컨트롤 - 에디트 본문
0. 개요
문자열을 입력받을때 쓰이는 에디트
"edit" 윈도우 클래스를 사용하며 아래의 스타일들을 지정 가능하다.
스타일 | 설명 |
ES_AUTOHSCROLL | 수평 스크롤을 지원한다. |
ES_AUTOVSCROLL | 여러줄 편집시 수직 스크롤을 지원한다. |
ES_LEFT | 왼쪽 정렬한다. |
ES_CENTER | 중앙 정렬한다. |
ES_RIGHT | 오른쪽 정렬한다. |
ES_LOWERCASE | 소문자로 변환하여 표시한다. |
ES_UPPERCASE | 대문자로 변환하여 표시한다. |
ES_MULTILINE | 여러줄을 편집할 수 있도록 한다. |
ES_NOHIDESEL | 포커스를 잃더라도 선택된 영역을 표시한다. |
ES_READONLY | 읽기전용으로 만들어 편집을 금지한다. |
자세한 설명은 14장에서 진행
에디트는 자신에게 발생한 변화에 대해 부모 윈도우에게 아래와 같은 통보 메시지를 전달한다.
메시지 | 설명 |
EN_CHANGE | 문자열이 변경되었다. 문자열 변경 후 화면에 출력되기 전 발생하는 메시지 |
EN_ERRSPACE | 메모리가 부족하다. |
EN_HSCROLL | 사용자가 수평 스크롤 바를 클릭하였다. |
EN_VSCROLL | 사용자가 수직 스크롤 바를 클릭하였다. |
EN_KILLFOCUS | 포커스를 잃었다. |
EN_SETFOCUS | 포커스를 얻었다. |
EN_MAXTEXT | 지정한 문자열 길이를 초과하였다. |
EN_UPDATE | 문자열이 변경되기 직전이다. 문자열 변경 후 화면에 출력된 후 발생하는 메시지 |
EN_CHANGE와 EN_UPDATE의 차이에 주목
1. 사용 예
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include <windows.h>
#include <tchar.h>
#define ID_EDIT 100
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("Menu");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance
, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
HWND hEdit;
char str[128];
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage) {
case WM_CREATE:
hEdit=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_AUTOHSCROLL,10,10,200,25,hWnd,(HMENU)ID_EDIT,g_hInst,NULL);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case ID_EDIT:
switch (HIWORD(wParam)) {
case EN_CHANGE:
GetWindowText(hEdit,str,128);
SetWindowText(hWnd,str);
}
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
|
cs |
사용법 자체는 크게 별것없다.
WM_CREATE 메시지 발생시 edit 컨트롤을 생성한다.
edit에서 문자열의 변경이 감지되면 ID_EDIT 통보 메시지가 발생한다.
여기서 GetWindowText를 통해 에디트(hEdit)에 입력된 문자열을 str에 저장한다.
그리고 SetWindowText를 통해 윈도우(hWnd)의 텍스트를 변경한다.
edit에 입력한 문자열이 윈도우의 이름에 그대로 반영되었음이 확인된다.
14장에서 보다 자세한 관리 방법에 대해 알아본다.
'Windows > 윈도우즈 API' 카테고리의 다른 글
7-7. 콤보 박스 (0) | 2021.12.28 |
---|---|
7-6. 컨트롤 - 리스트 박스 (0) | 2021.12.27 |
7-3. 컨트롤 - 라디오 버튼 (0) | 2021.12.27 |
7-2. 컨트롤 - 체크박스 버튼 (0) | 2021.12.26 |
7-1. 컨트롤 - 버튼 (0) | 2021.12.26 |
Comments