最近在看BlueCoder的博客专栏《Win32基础技术》,所以有一段时间没写关于控件的博客了,今天忽然想起来我曾经用两种控件分别实现过城市管理系统,我首先用了ComboBox控件,做完后过了一段时间我又用ListBox控件做了一个
废话不多说了,先来看看效果
程序界面 选择城市
显示城市 增加城市
错误提示 警告提醒
在写代码前需要将程序搭成下图所示的界面
修改控件的ID
| 控件名称 | 控件的ID |
| ComboBox控件 | IDC_COMBO1 |
| 城市显示框 | IDC_SHOW |
| 城市添加框 | IDC_EDIT1 |
| 城市添加按钮 | IDC_ADD |
| 城市显示按钮 | IDC_VIEW |
| 城市删除按钮 | IDC_DELETE |
| 城市查找框 | IDC_EDIT2 |
| 城市查找按钮 | IDC_SEARCH |
展示完功能后就开始写代码
这个程序中的最基本的功能是添加城市
添加城市到ComboBox控件中用ComboBox_InsertString函数
函数参数
HWND hwndCtl, ComboBox控件的句柄
int index, 当前索引
LPCSTR lpsz ComboBox控件中添加的字符串
添加城市
//得到ComboBox控件的句柄
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("南京市"));
ComboBox_InsertString(hwndCombo1,-1,TEXT("广州市"));
ComboBox_InsertString(hwndCombo1,-1,TEXT("海口市"));
ComboBox_InsertString(hwndCombo1,-1,TEXT("南昌市"));
ComboBox_InsertString(hwndCombo1,-1,TEXT("新余市"));
从添加框中添加城市
//得到ComboBox控件的句柄
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_COMBO1);
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));
//字符串的大小
int len = strlen(str);
//当没输入添加的城市时
if(0 == len)
{
MessageBox(hwnd,TEXT("请输入一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
//添加城市
ComboBox_InsertString(hwndCombo1,-1,str);
TCHAR cmd[256];
wsprintf(cmd,"%s添加成功",str);
MessageBox(hwnd,cmd,TEXT("提示"),MB_OK);
}
删除城市
//得到ComboBox控件的句柄
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_COMBO1);
//得到城市的索引
int CurSel = ComboBox_GetCurSel(hwndCombo1);
if(-1== CurSel)//如果没选择城市
{
MessageBox(hwnd,TEXT("请选择一个需要删除的城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
TCHAR str1[256];
TCHAR str2[256];
//得到选定的城市
ComboBox_GetLBText(hwndCombo1,CurSel,str1);
wsprintf(str2,"%s删除成功",str1);
//删除城市
ComboBox_DeleteString(hwndCombo1,CurSel);
MessageBox(hwnd,str2,TEXT("提示"),MB_OK);
}
查找城市
TCHAR str1[256];
TCHAR str2[256];
//字符串清零
ZeroMemory(str1,sizeof(str1));
SetDlgItemText(hwnd,IDC_SHOW,TEXT(""));
//得到ComboBox控件的句柄
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_COMBO1);
//得到Combobox控件中有多少个城市
int Count = ComboBox_GetCount(hwndCombo1);
//得到对话框中的字符串
GetDlgItemText(hwnd,IDC_EDIT2,str1,sizeof(str1));
//得到字符串的大小
int len = strlen(str1);
int flag = 0;//标示查找
if(0 == len)
{
MessageBox(hwnd,TEXT("请输入一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
for(int i = 0;i <Count ; i++)
{
ComboBox_GetLBText(hwndCombo1,i,str2);
if(0 == strncmp(str1,str2,len))
{
flag = 1;//找到了
//显示城市
SetDlgItemText(hwnd,IDC_SHOW,str2);
wsprintf(str1,"找到了%s",str2);
MessageBox(hwnd,str1,TEXT("提示"),MB_OK);
}
}
if(0 == flag)
{
MessageBox(hwnd,TEXT("没找到"),TEXT("提示"),MB_OK | MB_ICONERROR);
}
}
显示城市
//得到ComboBox控件的句柄
HWND hwndCombo1 = GetDlgItem(hwnd,IDC_COMBO1);
//得到当前的索引
int CurSel = ComboBox_GetCurSel(hwndCombo1);
if(-1 == CurSel)
{
MessageBox(hwnd,TEXT("请选择一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
TCHAR str[256];
//得到城市
ComboBox_GetLBText(hwndCombo1,CurSel,str);
TCHAR cmd[256];
wsprintf(cmd,"你选择了%s",str);
MessageBox(hwnd,cmd,TEXT("提示"),MB_OK);
//在对话框中显示城市
SetDlgItemText(hwnd,IDC_SHOW,str);
}
通过上面的代码克制我在程序中还增加了错误验证和提示,这使得程序更有可行性

被折叠的 条评论
为什么被折叠?



