티스토리 뷰
제 1 장 COMBO BOX란?
COMBO BOX(콤보 박스)는 EDIT CONTROL(에디트 컨트롤)와 LIST BOX(리스트 박스)를 결합해 놓은 컨트롤이고 필요할 경우만 목록을 열어 선택하므로 화면 공간을 적게 차지한다는 장점이 있습니다.하지만 LIST BOX처럼 목록을 한 번에 보는게 아니라 아래로 펼쳐야하므로 항목이 어떤 것들이 있는지 바로 확인할 수 없다는 단점이 있습니다.
제 1 절 COMBO BOX 생성
HWND _ComboBox = CreateWindowA("combobox","”,
//윈도우 생성을 하고 combobox를 생성
WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,
//윈도우 창 스타일, 제 2장 1절에서 자세히 다룸
10,
//combobox의 x좌표
10,
//combobox의 y좌표
200,
//combobox의 너비
200,
//combobox의 높이
hWnd,
//부모 윈도우를 지정
0,
//combobox의 식별자(ID)인데 여기선 따로 지정하지 않음
0,
//윈도우와 연결될 인스턴스 핸들
0);
//CREATESTRUCT 구조체를 통해 전달되는 값이며, MDI 구조일 경우에는 CLIENTCREATESTRUCT 구조체를 사용함
제 2 절 COMBO BOX 사용 예
COMBO BOX부분 코드
void OnCreate(HWND hWnd)
{
CreateWindowA("static","Kim JuYeon ",
//윈도우를 생성하고 static control을 생성
WS_CHILD|WS_VISIBLE,
//윈도우 창 스타일, 제 2장 1절에서 자세히 다룸
10,
//static의 x좌표
0,
//static의 y좌표
200,
//static의 너비
100,
//static의 높이
hWnd,
//부모 윈도우를 지정
0,
//static의 식별자(ID)인데 여기선 따로 지정하지 않음
0,
//윈도우와 연결될 인스턴스 핸들
0);
//CREATESTRUCT 구조체를 통해 전달되는 값이며, MDI 구조일 경우에는 CLIENTCREATESTRUCT 구조체를 사용함
HWND _ComboBox = CreateWindowA("combobox","",
//윈도우 생성을 하고 combobox를 생성
WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,
//윈도우 창 스타일, 제 2장 1절에서 자세히 다룸
10,
//combobox의 x좌표
30,
//combobox의 y좌표
200,
//combobox의 너비
200,
//combobox의 높이
hWnd,
//부모 윈도우를 지정
0,
//combobox의 식별자(ID)인데 여기선 따로 지정하지 않음
0,
//윈도우와 연결될 인스턴스 핸들
0);
//CREATESTRUCT 구조체를 통해 전달되는 값이며, MDI 구조일 경우에는 CLIENTCREATESTRUCT 구조체를 사용함
SendMessageA(_ComboBox,CB_ADDSTRING,0,(LPARAM)"FIRST");
//SendMessage(A는 32비트 W는 WIDE를 말함.)를 _ComboBox에 CB_ADDSTRING(ComboBox의 문자열을 추가하는 메시지),wParam은 0이고,"FIRST"문자열을 써달라는 것.
SendMessageA(_ComboBox,CB_ADDSTRING,0,(LPARAM)"SECOND");
//SendMessage(A는 32비트 W는 WIDE를 말함.)를 _ComboBox에 CB_ADDSTRING(ComboBox의 문자열을 추가하는 메시지),wParam은 0이고,"SECOND"문자열을 써달라는 것.
SendMessageA(_ComboBox,CB_ADDSTRING,0,(LPARAM)"THIRD");
//SendMessage(A는 32비트 W는 WIDE를 말함.)를 _ComboBox에 CB_ADDSTRING(ComboBox의 문자열을 추가하는 메시지),wParam은 0이고,"THIRD"문자열을 써달라는 것.
}
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT iMessage,WPARAM wParam,LPARAM lParam)
//(사건발생 윈도우개체,사건번호,사건을 처리하기위한 부가정보,wPararm : 사건 원인,lPararm : 사건 처리를 위한 어떤 것)
{
switch(iMessage)
{
case WM_CREATE: OnCreate(hWnd);return 0;
case WM_DESTROY: OnDestroy(hWnd);return 0;
}
return DefWindowProc(hWnd,iMessage,wParam,lParam);
}
제 2 장 COMBO BOX 스타일
l CBS_AUTOHSCROLL 콤보박스의 에디트 컨트롤을 수평스크롤 할 수 있게 합니다.
- CBS_DISABLENOSCROLL 리스트 내의 모든 항목이 화면 상에 나타나 있으면 수직스크롤 바를 사용 불가능하게 합니다.
- CBS_DROPDOWN 에디트 컨트롤과 드롭다운 가능한 리스트 박스를 가집니다.
- CBS_DROPDOWNLIST 리스트 박스만 가지며 에디트 컨트롤에 항목을 입력할 수 없습니다.
- CBS_HASSTRINGS OWNER_DRAWN 콤보박스와 함께 사용되면 콤보 박스에 추가되는 문자열을 지정합니다.
- CBS_LOWERCASE 에디트 컨트롤에 있는 모든 텍스트를 소문자로 변환합니다.
- CBS_NOINTEGRALHEIGHT 콤보 박스의 크기를 조정할 수 없게 만듭니다..
- CBS_OEMCONVERT ANSI 문자열에 있는 콤보 박스를 OEM 문자로 변환 합니다.
- CBS_OWNERDRAWFIXED 내용을 그리기 위한 리스트 박스의 항목 높이가 있습니다.
- CBS_OWNERDRAWVARIABLE 내용을 그리기 위한 리스트 박스의 항목 높이가 있고, 각 항목은 크기가 변할 수 있습니다.
- CBS_SIMPLE 항목 리스트 박스가 항상 화면에 나타나고 현재 선택된 내용이 에디터 박스에 나타납니다.
- CBS_SORT 리스트박스에 입력한 문자열을 자동으로 정렬합니다.
- CBS_UPPERCASE 에디트 컨트롤는 모든 텍스트를 대문자로 변환합니다.
제 1 절 윈도우 창 스타일
- WS_BORDER 크기 조정 테두리가 있는 창을 만듭니다.
- WS_CAPTION 제목 표시줄이 있는 창을 만듭니다(WS_BORDER 스타일 의미). WS_DLGFRAME 스타일과 함께 사용할 수 없습니다.
- WS_CHILD 자식 창을 만듭니다. WS_POPUP 스타일과 함께 사용할 수 없습니다.
- WS_CHILDWINDOW WS_CHILD 스타일과 동일합니다.
- WS_CLIPCHILDREN 부모 창 안에서 그릴 경우 자식 창이 차지하는 영역을 제외합니다. 부모 창을 만들 때 사용합니다.
- WS_CLIPSIBLINGS 서로 상대적인 자식 창을 잘라냅니다. 즉, 특정 자식 창이 paint 메시지를 받으면, WS_CLIPSIBLINGS 스타일은 다른 모든 겹쳐진 자식 창을, 업데이트 할 자식 창의 영역 밖으로 잘라냅니다. (WS_CLIPSIBLINGS가 지정되지 않았고 자식 창이 겹쳐진 경우, 어떤 자식 창의 클라이언트 영역 안에 그리기를 하면 인근 자식 창의 클라이언트 영역 안에 그려질 수 있습니다.) WS_CHILD 스타일의 경우에만 사용합니다.
- WS_DISABLED 처음부터 비활성화되어 있는 창을 만듭니다.
- WS_DLGFRAME 이중 테두리가 있고 제목이 없는 창을 만듭니다.
- WS_GROUP 사용자가 한 컨트롤에서 다음 컨트롤로 화살표 키를 사용하여 이동할 수 있도록 컨트롤 그룹의 첫 번째 컨트롤을 지정합니다. 첫 번째 컨트롤 이후 WS_GROUP 스타일이 FALSE로 지정된 모든 컨트롤은 같은 그룹에 속합니다. 이후의 WS_GROUP 스타일 컨트롤은, 다음 그룹을 시작합니다 (즉, 하나의 그룹이 끝나고 다음 것을 시작).
- WS_HSCROLL 가로 스크롤 막대가 있는 창을 만듭니다.
- WS_ICONIC 처음부터 최소화되어 있는 창을 만듭니다. WS_MINIMIZE 스타일과 동일합니다.
- WS_MAXIMIZE 최대화 된 창을 만듭니다.
- WS_MAXIMIZEBOX 최대화 단추가 있는 창을 만듭니다.
- WS_MINIMIZE 처음부터 최소화되어 있는 창을 만듭니다. WS_OVERLAPPED 스타일에서만 사용합니다.
- WS_MINIMIZEBOX 최소화 단추가 있는 창을 만듭니다.
- WS_OVERLAPPED 중첩된 창을 만듭니다. 중첩된 창에는 일반적으로 제목과 테두리가 있습니다.
- WS_OVERLAPPEDWINDOW WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX 및WS_MAXIMIZEBOX 스타일을 사용하여 겹친 창을 만듭니다.
- WS_POPUP 팝업 창을 만듭니다. WS_CHILD 스타일과 함께 사용할 수 없습니다.
- WS_POPUPWINDOW WS_BORDER, WS_POPUP 및 WS_SYSMENU 스타일을 사용하여 팝업 창을 만듭니다. 컨트롤 메뉴를 보이게 하려면WS_CAPTION 스타일이 WS_POPUPWINDOW 스타일과 결합되어야 합니다.
- WS_SIZEBOX 크기 조정 테두리가 있는 창을 만듭니다. WS_THICKFRAME 스타일과 동일합니다.
- WS_SYSMENU 창의 제목 표시줄에 컨트롤 메뉴 상자가 있는 창을 만듭니다. 제목 표시줄이 있는 창에만 사용합니다.
- WS_TABSTOP 사용자가 TAB 키를 사용하여 이동할 수 있는 컨트롤 중 하나를 지정합니다. TAB 키를 사용하면 WS_TABSTOP 스타일로 지정된 다음 컨트롤로 이동합니다.
- WS_THICKFRAME 창 크기를 조정할 수 있는 두꺼운 프레임이 붙은 창을 만듭니다.
- WS_TILED 중첩된 창을 만듭니다. 중첩된 창에는 제목 표시줄과 테두리가 있습니다. WS_OVERLAPPED 스타일과 동일합니다.
- WS_TILEDWINDOW WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX 및 WS_MAXIMIZEBOX 스타일을 사용하여 중첩 창을 만듭니다. WS_OVERLAPPEDWINDOW 스타일과 동일합니다.
- WS_VISIBLE 처음부터 표시되는 창을 만듭니다.
- WS_VSCROLL 세로 스크롤 막대가 있는 창을 만듭니다.
제 3 장 COMBO BOX 메시지
l CB_ADDSTRING 문자열을 목록 끝에 추가합니다.
l CB_CLEAR 현재 선택된 콤보 박스의 에디트 컨트롤 모든 텍스트를 삭제합니다.
l CB_COPY 현재 선택된 콤보 박스에 있는 모든 텍스트를 CF_TEXT 형식으로 클립보드에 복사합니다.
l CB_CUT 현재 선택된 콤보 박스에 있는 모든 텍스트를 삭제하고, CF_TEXT형식으로 클립보드에 복사합니다.
l CB_GETCOMBOBOXINFO CComboBox 개체에 대한 상태 정보를 가져옵니다.
l CB_GETCOUNT 콤보 박스의 리스트에 있는 항목의 수를 가져옵니다.
l CB_GETCURSEL 콤보 박스에 리스트가 있는 경우, 현재 선택된 항목의 인덱스를 가져옵니다.
l CB_GETDROPPEDCONTROLRECT 화면 드롭 다운 콤보 박스의 리스트 박스의 좌표를 가져옵니다.
l CB_GETDROPPEDSTATE 드롭 다운 리스트의 상태를 가져옵니다.
l CB_GETDROPPEDWIDTH 드롭 다운 리스트의 픽셀의 최소 허용 폭을 가져옵니다.
l CB_GETEDITSEL 현재 선택된 콤보 박스의 에디트 컨트롤의 문자열을 가져옵니다.
l CB_GETEXTENDEDUI 콤보 박스의 UI 확장 상태를 가져옵니다.
l CB_GETHORIZONTALEXTENT 콤보 박스의 리스트 박스의 가로 스크롤 폭을 가져옵니다.
l CB_GETITEMDATA 인덱스로 콤보 박스 아이템과 연관된 32 비트 값을 가져옵니다.
l CB_GETITEMDATAPTR 인덱스로 콤보 박스 아이템과 연관된 32 비트 값의 포인터를 가져옵니다.
l CB_GETITEMHEIGHT 콤보 박스의 리스트의 높이를 가져옵니다.
l CB_GETLBTEXT 콤보 박스의 리스트의 문자열을 가져옵니다.
l CB_GETLBTEXTLEN 콤보 박스의 리스트의 문자열의 길이를 가져옵니다.
l CB_GETLOCALE 콤보 박스에 사용되는 로케일 식별자(LCID)를 가져옵니다.
l CB_GETMINVISIBLE 현재 콤보 박스 컨트롤의 드롭 다운 리스트에서 표시되는 항목의 최소 수를 가져옵니다.
l CB_GETTOPINDEX 콤보 박스의 리스트 박스 부분에 표시되는 첫 번째 항목의 인덱스를 가져옵니다.
l CB_LIMITTEXT 사용자가 콤보 박스의 에디트 컨트롤에 입력할 수 있는 텍스트의 길이를 바이트 단위로 제한합니다.
l CB_PASTE 현재 커서 위치에 있는 에디트 컨트롤에 클립보드에 있는 데이터를 CF_TEXT 형식으로 붙여넣습니다.
l CB_SETCUEBANNER 콤보 박스 컨트롤에 대해 표시되는 큐 텍스트를 설정합니다.
l CB_SETCURSEL 콤보 박스의 리스트에서 문자열을 선택합니다.
l CB_SETDROPPEDWIDTH 콤보 박스의 리스트의 허용되는 최소 너비를 설정합니다.
l CB_SETEDITSEL 콤보 상자의 에디트 컨트롤에 문자를 선택합니다.
l CB_SETEXTENDEDUI 콤보 상자의 UI를 기본 UI 또는, 확장 된 UI 중 하나로 설정합니다.
l CB_SETHORIZONTALEXTENT 콤보 박스의 리스트 부분을 수평으로 스크롤 할 수 있는 폭을 설정합니다.
l CB_SETITEMDATA 콤보 박스에서 지정된 아이템과 연관된 32 비트 값을 설정합니다.
l CB_SETITEMDATAPTR 지정된 포인터가 될 수 있는 콤보 박스에서 지정된 아이템과 연관된 32 비트 값을 설정합니다.
l CB_SETITEMHEIGHT 콤보 박스나 에디트 컨트롤(또는 스태틱 텍스트)의 리스트 높이를 설정합니다.
l CB_SETLOCALE 콤보 박스에 사용되는 로케일 식별자를 설정합니다.
l CB_SETMINVISIBLEITEMS 현재 콤보 박스 컨트롤의 드롭 다운 리스트에서 표시되는 항목의 최소 수를 설정합니다.
l CB_SETTOPINDEX 특정 아이템이 콤보 박스의 리스트 박스 부분에 표시되도록 설정합니다.
l CB_SHOWDROPDOWN 콤보 박스의 리스트를 표시하거나 숨기도록 설정합니다.
참 고 문 헌
https://msdn.microsoft.com/ko-kr/library/czada357.aspx
https://msdn.microsoft.com/ko-kr/library/12h9x0ch.aspx
https://msdn.microsoft.com/ko-kr/library/7h63bxbe.aspx
'Document > Tech Doc' 카테고리의 다른 글
Stored Procedure(저장 프로시저) (0) | 2016.04.17 |
---|