티스토리 뷰
콤보박스, combobox
- 스타일
CBS_AUTOHSCROLL
CBS_DROPDOWN 콤보박스 다운버튼을 누르면 리스트를 보여줌
CBS_OWNERDRAWFIXED 문자열 대신 이미지 삽입 가능하도록한다. 콤보박스 크기 고정된 상태
CBS_OWNERDRAWVARIABLE 문자열 대신 이미지 삽입 가능하고, 콤보 박스 크기가 변함
CBS_SORT
CBS_SIMPLE 리스트 박스가 항상 보이는 형태
- 통지 메시지
CBN_DBLCLK 항목을 더블클릭
CBN_ERRSPACE 메모리 부족
CBN_SETFOCUS 현재 리스트에 포커스를 가질때
CBN_KILLFOCUS 포커스가 사라질때
CBN_DROPDOWN 콤보 박스에서 다운 버튼을 클릭할때
CBN_SELCHANGE 콤보 박스에서 선택 항목이 바뀔때
예> 강제로 CBN_SELCHANGE 이벤트를 발생시킨다.
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_COMBO_VI_OPTION, CBN_SELCHANGE), (LPARAM)GetDlgItem(IDC_COMBO_VI_OPTION)->GetSafeHwnd());
- 명령 메시지 : SendMessage()로 콤보박스에 명령을 내린다
명령 메시지 |
내용 |
결과값 |
CB_ADDSTRING |
새로운 문자열을 추가 |
lParam에 추가할 문자열 입력 |
CB_DELETESTRING |
선택된 문자열을 삭제 |
wParam에 삭제할 항목을 지정 |
CB_INSERTSTRING |
문자열 삽입 |
wParam : 삽입 위치 지정 |
CB_DIR |
파일 목록을 보여준다 |
wParam : 파일 속성 입력 |
CB_FINDSTRING |
리스트에서 측정 문자열 찾기 |
wParam : 시작번호 입력 |
CB_GETCURSEL |
현재 리스트의 커서 위치 찾기 |
현재 선택된 리스트 번호 리턴 받음 |
CB_GETLBTEXT |
특정 위치 문자열 얻기 |
wParam : 특정 위치 번호 |
CB_GETLBTEXTLEN |
특정 위치의 문자열 길이 얻기 |
wParam : 문자열 길이 리턴 |
대체로 결과값은 lParam 으로 넘겨주거나, SendMessage() 의 리턴값으로 넘겨준다.
소스코드 분석은 리스트박스 참고
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 |
#define ID_COMBO 701
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hCombo;
TCHAR listItem[][30] = { L"C++", L"Win32", L"MFC", L"자바" };
TCHAR strList[128];
int nSetSel;
switch (message)
{
case WM_CREATE:
hCombo = CreateWindow(TEXT("combobox"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWN, 280, 360, 200, 100, hWnd, (HMENU)ID_COMBO, hInst, NULL);
for (int i = 0; i < 4; i++)
SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)listItem[i]);
break;
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 메뉴 선택을 구문 분석합니다.
switch (wmId)
{
case ID_COMBO:
switch (HIWORD(wParam))
{
case CBN_SELCHANGE:
int nGetSel = SendMessage(hCombo, CB_GETCURSEL, 0, 0);
SendMessage(hCombo, CB_GETLBTEXT, nGetSel, (LPARAM)strList);
SetWindowText(hST2, strList);
break;
}
break;
|
cs |