本节的知识点:
组合框
-
GetDlgItem ————由对话框句柄+id 得到控件的句柄,返回HWND类型
例如:HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1);
hwndCombo1是变量名,IDC_COMBO1 是控件ID(名称), 大致意思:实现把控件的句柄放到变量hwndCombo1中
-
ComboBox_AddString ————添加一项,并不是按照顺序添加项
例如: ComboBox_AddString(hwndCombo1, TEXT("河南省"));
hwndCombo1是控件的句柄
-
ComboBox_InsertString———— 添加一项,依次向最后一项添加
例如: ComboBox_InsertString(hwndCombo1, -1, TEXT("河南省"));
第一个参数hwndCombo1是控件的句柄,第二个参数是索引
-
ComboBox_GetCurSel————得到当前项的索引,返回int类型
例如: int CurSel = ComboBox_GetCurSel(hwndCombo1);
hwndCombo1是控件的句柄
-
ComboBox_GetCount ————取得有多少项,返回int类型
例如: int count = ComboBox_GetCount(hwndCombo1);
hwndCombo1是控件的句柄
-
ComboBox_DeleteString ———— 删除项
例如: ComboBox_DeleteString(hwndcombo1, 1);
第一个参数hwndCombo1是控件的句柄,第二个参数是索引
-
ComboBox_SetCurSel———— 选择某一项
例如:ComboBox_SetCurSel(hwndCombo1, 1);
第一个参数hwndCombo1是控件的句柄,第二个参数是索引
-
ComboBox_GetLBText ————得到某项的值,放到字符串指针中
例如:ComboBox_GetLBText(hwndCombo1, 1, str);
第一个参数hwndCombo1是控件的句柄,第二个参数是索引,第三个参数是字符串指针
更多宏的用法请参考: msdn.microsoft.com/en-us/libra…
课堂练习
控件如下:

代码如下:
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) //Main_OnInitDialog 对话框初始化的时候被调用,运行时进行加载。
{
HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1);//GetDlgItem 由对话框句柄+id 得到控件的句柄,返回HWND类型
/*
ComboBox_AddString(hwndCombo1, TEXT("河南省"));//并不是按照顺序添加项
ComboBox_AddString(hwndCombo1, TEXT("江苏省"));
ComboBox_AddString(hwndCombo1, TEXT("河北省"));
ComboBox_AddString(hwndCombo1, TEXT("浙江省"));
*/
ComboBox_InsertString(hwndCombo1, -1, TEXT("河南省"));//依次向最后一项添加
ComboBox_InsertString(hwndCombo1, -1, TEXT("江苏省"));
ComboBox_InsertString(hwndCombo1, -1, TEXT("河北省"));
ComboBox_InsertString(hwndCombo1, -1, TEXT("浙江省"));
return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
{
HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO1);//得到控件的句柄
int CurSel = ComboBox_GetCurSel(hwndCombo1); //ComboBox_GetCurSel得到当前项的索引,返回int类型
if(0 == CurSel)
{
//MessageBox(hwnd, TEXT("你选择的是河北省"), TEXT("提示"), MB_OK);
//int count = ComboBox_GetCount(hwndCombo1);//取得有多少项
}
//ComboBox_DeleteString(hwndcombo1, 1);//删除项
//ComboBox_SetCurSel(hwndCombo1, 1);//单击确定,选定某一项
TCHAR str[256];
ComboBox_GetLBText(hwndCombo1, 1, str); //得到某项的值,放到字符串指针中
MessageBox(hwnd, str, TEXT("消息"), MB_OK);
}
break;
default:
break;
}
}
运行图:

我们可以看到这个组合框中还可以输入

可通过以下方法来禁止
右击 combobox(组合框)选择属性,弹出的对话框中按如下设置:类型选择【下拉列表】

课后作业
1. 小型计算器2.0版
控件如下:

代码如下:
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
HWND hwndcombo1 = GetDlgItem(hwnd, IDC_COMBO1); //获得控件的句柄
ComboBox_InsertString(hwndcombo1, -1,TEXT("+"));//依次向最后一项添加
ComboBox_InsertString(hwndcombo1, -1,TEXT("-"));
ComboBox_InsertString(hwndcombo1, -1,TEXT("*"));
ComboBox_InsertString(hwndcombo1, -1,TEXT("/"));
ComboBox_InsertString(hwndcombo1, -1,TEXT("%"));
return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
{
TCHAR str1[256];
TCHAR str2[256];
GetDlgItemText(hwnd, IDC_EDIT1, str1, sizeof(str1)); //在IDC_EDIT1文本框中输入
GetDlgItemText(hwnd, IDC_EDIT2, str2, sizeof(str2)); //在IDC_EDIT2文本框中输入
int i1 = atoi(str1);
int i2 = atoi(str2);
HWND hwndcombo1 = GetDlgItem(hwnd, IDC_COMBO1); //获得控件的句柄
int curIndex = ComboBox_GetCurSel(hwndcombo1); //确定目前选项的索引
int s = 0;
switch(curIndex)
{
case 0:
{
s = i1+i2;
}
break;
case 1:
{
s = i1-i2;
}
break;
case 2:
{
s = i1*i2;
}
break;
case 3:
{
s = i1/i2;
}
break;
case 4:
{
s = i1%i2;
}
break;
}
TCHAR str3[256];
itoa(s, str3, 10);
SetDlgItemText(hwnd, IDC_EDIT3, str3);
}
break;
default:
break;
}
}
运行结果:





2. 数据的增加、删除与查找
控件如下:

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_BUTTONADD: //添加命令按钮
{
TCHAR str1[256];
GetDlgItemText(hwnd, IDC_EDITADD, str1, sizeof(str1)); //在IDC_EDIT1文本框中输入
HWND hwndCombo = GetDlgItem(hwnd, IDC_COMBO1);
ComboBox_AddString(hwndCombo, str1);
}
break;
case IDC_BUTTONDEL: //删除命令按钮
{
HWND hwndCombo = GetDlgItem(hwnd, IDC_COMBO1);
int curSel2 = ComboBox_GetCurSel(hwndCombo);
if(CB_ERR == curSel2) //没有任何项被选择,返回值为CB_ERR
{
MessageBox(hwnd, TEXT("没有任何项被选择,无法删除"), TEXT("错误"), MB_OK|MB_ICONERROR);
return ;
}
ComboBox_DeleteString(hwndCombo, curSel2);
SetDlgItemText(hwnd, IDC_EDITADD, TEXT("")); //赋值为空字符串,清除在文本框添加的字符串
}
break;
case IDC_BUTTONSEARCH://查找命令按钮
{
TCHAR strSearch[256];
GetDlgItemText(hwnd, IDC_EDITSEARCH, strSearch, sizeof(strSearch)); //在IDC_EDIT1文本框中输入
HWND hwndCombo3 = GetDlgItem(hwnd, IDC_COMBO1);
int count = ComboBox_GetCount(hwndCombo3); //对添加的字符串进行计数
int i;
BOOL found = FALSE;
for(i = 0; i<count; i++)
{
TCHAR str2[256];
ComboBox_GetLBText(hwndCombo3, i, str2);
if(lstrcmp(str2, strSearch) == 0) //字符串比较通常用lstrcmp 代替 strcmp
{
found = TRUE;
ComboBox_SetCurSel(hwndCombo3, i); //找到后在组合框选中
}
}
if(found) //found 是真是假由上面的步骤决定
{
MessageBox(hwnd, TEXT("找到了"), TEXT("提示"), MB_OK);
}
else
{
MessageBox(hwnd, TEXT("没有找到,请查看输入的信息是否有误"), TEXT("提示"), MB_OK|MB_ICONERROR);
}
}
break;
default:
break;
}
}
运行图:
比如添加了1、a、b、c、d, 然后查找a

1. 小型计算器2.0版成品:pan-yz.chaoxing.com/share/info/…
2. 数据的增加、删除与查找成品:pan-yz.chaoxing.com/share/info/…