组和框的创建
CreateWindowEx(0, L"COMBOBOX", L"Simple", WS_VISIBLE | WS_CHILD | CBS_SIMPLE, 50, 50, 100, 200, hWnd, (HMENU)1001, hInst, NULL);
CreateWindowEx(0, L"COMBOBOX", L"DropDown", WS_VISIBLE | WS_CHILD | CBS_DROPDOWN, 150, 50, 200, 200, hWnd, (HMENU)1002, hInst, NULL);
CreateWindowEx(0, L"COMBOBOX", L"DropList", WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST, 250, 300, 300, 200, hWnd, (HMENU)1003, hInst, NULL);
组合框的添加
HWND hSimple = GetDlgItem(hWnd, 1001);
HWND hDropDown = GetDlgItem(hWnd, 1002);
HWND hDropList = GetDlgItem(hWnd, 1003);
for (int i = 0; i < 100; i++)
{
TCHAR szText[256] = { 0 };
wsprintf(szText, L"Item%d", i);
SendMessage(hSimple, CB_ADDSTRING, 0, (LPARAM)szText);
SendMessage(hDropDown, CB_ADDSTRING, 0, (LPARAM)szText);
SendMessage(hDropList, CB_ADDSTRING, 0, (LPARAM)szText);
}
组合框的删除:
CB_RESETCONTENT -- 清除所有项
SendMessage(hComboBox,CB_RESETCONTENT,0,0);
CB_DELETESTRING -- 删除指定项
lParam: 0;
wParam: 选项索引;
eg:
HWND hSimple = GetDlgItem(hWnd, 1001);
HWND hDropDown = GetDlgItem(hWnd, 1002);
HWND hDropList = GetDlgItem(hWnd, 1003);
int ret = SendMessage(hSimple, CB_GETCURSEL, 0, 0);
if (ret == CB_ERR )
{
MessageBox(NULL, L"...", L"Infor", MB_OK);
}
else
{
SendMessage(hSimple, CB_DELETESTRING, ret, 0);
}
ret = SendMessage(hDropDown, CB_GETCURSEL, 0, 0);
if (ret == CB_ERR)
{
MessageBox(NULL, L"...", L"Infor", MB_OK);
}
else
{
SendMessage(hDropDown, CB_DELETESTRING, ret, 0);
}
ret = SendMessage(hDropList, CB_GETCURSEL, 0, 0);
if (ret == CB_ERR)
{
MessageBox(NULL, L"...", L"Infor", MB_OK);
}
else
{
SendMessage(hDropList, CB_DELETESTRING, ret, 0);
}
}
查找和设定选定项
获得当前选项:
CB_GETCURSEL:
SendMessage(hwnd,CB_GETCURSEL,0,0);
其返回值是索引.如果当前无选择项,则返回CB_ERR(-1);
设置当前选项:
CB_SETCURSEL:
设置索引为50的为当前选项...
SendMessage(hSimple, CB_SETCURSEL, (WPARAM)50, 0);
SendMessage(hDropDown, CB_SETCURSEL, (WPARAM)50, 0);
SendMessage(hDropList, CB_SETCURSEL, (WPARAM)50, 0);
CB_FINDSTRING
wParam //指定从哪里开始 ,-1是从0开始
lParam //搜索的字符串.
如果找到通过SendMessage返回,如果没有找到则返回-1;
非精确匹配查找.但是不能粗
HWND hSimple = GetDlgItem(hWnd, 1001);
int ret = SendMessage(hSimple, CB_FINDSTRING, -1, (LPARAM)L"Item50");
if (ret == CB_ERR)
{
MessageBox(NULL, L"没有匹配上", L"Infor", MB_OK);
}
else
{
TCHAR szText[256];
wsprintf(szText, L"%d", ret);
MessageBox(NULL, szText, L"Infor", MB_OK);
}
CB_GETLBTEXTLEN:
SendMessage(
(HWND) hWnd, // handle to destination window
CB_GETLBTEXTLEN, // message to send
(WPARAM) wParam, // 索引.
(LPARAM) lParam // not used; must be zero
);
其长度通过SendMessage返回.
CB_GETLBTEXT:
获取文本:
CB_SELECTSTRING: 设置并查找字符串.
--------------------------------------组合框的附加数据----------------------------------------
CB_SETITEMDATA:
wParam -- 选项索引
lParam -- 具体的附加数据
CB_GETITEMDATA:
CBN_SELCHANGE,当选项改变时,会向父窗口发送该消息.以WM_COMMAND的形式通知父窗口.
CBN_EDITCHANGE, 当组合框内容改变时 会向父窗口发送该消息.