我在上一篇博客中介绍了使用ComboBox控件实现城市管理系统,这篇ListBox控件实现城市管理系统作为上一篇的姊妹篇,可以进行对比,从而发现其中的优缺点
和上一篇一样先搭建图形界面和修改ID
首先搭建成如下图所示的界面:
修改控件的ID
|
控件的名字 |
控件的ID |
|
显示找到的城市 |
IDC_STATIC |
|
显示城市编辑框 |
IDC_SHOW |
|
ListBox控件 |
IDC_LIST1 |
|
城市显示按钮 |
IDC_VIEW |
|
城市删除按钮 |
IDC_DELETE |
|
城市添加框 |
IDC_EDIT1 |
|
城市添加按钮 |
IDC_ADD |
|
城市查找框 |
IDC_EDIT2 |
|
城市查找按钮 |
IDC_FIND |
完成了以上的工作后就开始写代码:
程序初始化时添加下面的代码使得打开程序就会显示城市
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//添加城市
ListBox_InsertString(hwndList1,-1,TEXT("北京市"));
ListBox_InsertString(hwndList1,-1,TEXT("天津市"));
ListBox_InsertString(hwndList1,-1,TEXT("上海市"));
ListBox_InsertString(hwndList1,-1,TEXT("重庆市"));
ListBox_InsertString(hwndList1,-1,TEXT("南昌市"));
ListBox_InsertString(hwndList1,-1,TEXT("新余市"));
ListBox_InsertString(hwndList1,-1,TEXT("杭州市"));
ListBox_InsertString(hwndList1,-1,TEXT("长沙市"));
ListBox_InsertString(hwndList1,-1,TEXT("海口市"));
ListBox_InsertString(hwndList1,-1,TEXT("台北市"));
ListBox_InsertString(hwndList1,-1,TEXT("南宁市"));
ListBox_InsertString(hwndList1,-1,TEXT("沈阳市"));
添加城市
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
TCHAR str[256];
//字符串清零
ZeroMemory(str,sizeof(str));
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));
//得到字符串的大小
int len = strlen(str);
if(0 == len)//当编辑框中没有字符串时
{
MessageBox(hwnd,TEXT("请输入你需要添加的城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
//添加城市
ListBox_InsertString(hwndList1,-1,str);
MessageBox(hwnd,TEXT("添加成功"),TEXT("提示"),MB_OK);
}
删除城市
/*得到控件的句柄*/
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到选定的项
int CurSel = ListBox_GetCurSel(hwndList1);
if(-1 == CurSel)//当没找到城市时
{
MessageBox(hwnd,TEXT("请选择你要删除的城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
TCHAR str1[256];//得到选定的城市
//得到选定的城市
ListBox_GetText(hwndList1,CurSel,str1);
TCHAR str2[256];
wsprintf(str2,"你已成功删除了%s",str1);
//删除选定的城市
ListBox_DeleteString(hwndList1,CurSel);/*删除所选的项*/
MessageBox(hwnd,str2,TEXT("提示"),MB_OK);
}查找城市:
TCHAR str1[256];
TCHAR str2[256];
int flag = 0;//标志位
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT2,str1,sizeof(str1));
//得到字符串的长度
int len = strlen(str1);
if(0 == len)//当编辑框中没有字符串时
{
MessageBox(hwnd,TEXT("请输入一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到ListBox控件中城市的个数
int Count = ListBox_GetCount(hwndList1);
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT2,str1,sizeof(str1));
for(int i = 0; i < Count; i++)
{
//得到ListBox控件中的城市
ListBox_GetText(hwndList1,i,str2);
//当两个城市相同时
if(0 == strncmp(str1,str2,len))
{
flag = 1;//标志找到了
//得到城市的索引
ListBox_SetCurSel(hwndList1,i);
TCHAR temp[256];
//d得到找到的城市
ListBox_GetText(hwndList1,i,temp);
//将城市在编辑框中显示
SetDlgItemText(hwnd,IDC_SHOW,temp);
MessageBox(hwnd,TEXT("找到了"),TEXT("提示"),MB_OK);
return ;
}
}
if(0 == flag)//当没找到城市时
{
MessageBox(hwnd,TEXT("没找到"),TEXT("提示"),MB_OK | MB_ICONERROR);
}
}
显示城市
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到选定的城市的索引
int CurSel = ListBox_GetCurSel(hwndList1);
if(-1 == CurSel)//当没选城市时
{
MessageBox(hwnd,TEXT("请选择一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
TCHAR temp[256];
//得到选定的城市
ListBox_GetText(hwndList1,CurSel,temp);
TCHAR cmd[256];
wsprintf(cmd,"你选择的是%s",temp);
MessageBox(hwnd,cmd,TEXT("提示"),MB_OK);
//在编辑框中显示选定的城市
SetDlgItemText(hwnd,IDC_SHOW,temp);
}
在ListBox控件上双击
if(LBN_DBLCLK == codeNotify)//双击
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到选定的城市的索引
int CurSel = ListBox_GetCurSel(hwndList1);
TCHAR temp[256];
//得到选定的城市
ListBox_GetText(hwndList1,CurSel,temp);
//显示选定的城市
SetDlgItemText(hwnd,IDC_SHOW,temp);
}
通过这篇博客和上一篇博客比较发现ListBox控件和ComboBox控件的用法差不多,大同小异,只是函数的名的前半部分不同,如插入城市ComboBox控件中使用ComboBox_InsertString 在ListBox控件中用ListBox_InsertString函数,而在ListBox控件中还有一个特点,可以在ListBox控件中单击左键、单击右键、双击,在音乐播放器中的应用非常能
程序全部代码
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//添加城市
ListBox_InsertString(hwndList1,-1,TEXT("北京市"));
ListBox_InsertString(hwndList1,-1,TEXT("天津市"));
ListBox_InsertString(hwndList1,-1,TEXT("上海市"));
ListBox_InsertString(hwndList1,-1,TEXT("重庆市"));
ListBox_InsertString(hwndList1,-1,TEXT("南昌市"));
ListBox_InsertString(hwndList1,-1,TEXT("新余市"));
ListBox_InsertString(hwndList1,-1,TEXT("杭州市"));
ListBox_InsertString(hwndList1,-1,TEXT("长沙市"));
ListBox_InsertString(hwndList1,-1,TEXT("海口市"));
ListBox_InsertString(hwndList1,-1,TEXT("台北市"));
ListBox_InsertString(hwndList1,-1,TEXT("南宁市"));
ListBox_InsertString(hwndList1,-1,TEXT("沈阳市"));
return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_DELETE://删除城市
{
/*得到控件的句柄*/
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到选定的项
int CurSel = ListBox_GetCurSel(hwndList1);
if(-1 == CurSel)//当没找到城市时
{
MessageBox(hwnd,TEXT("请选择你要删除的城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
TCHAR str1[256];//得到选定的城市
//得到选定的城市
ListBox_GetText(hwndList1,CurSel,str1);
TCHAR str2[256];
wsprintf(str2,"你已成功删除了%s",str1);
//删除选定的城市
ListBox_DeleteString(hwndList1,CurSel);/*删除所选的项*/
MessageBox(hwnd,str2,TEXT("提示"),MB_OK);
}
}
break;
case IDC_ADD://添加城市
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
TCHAR str[256];
//字符串清零
ZeroMemory(str,sizeof(str));
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));
//得到字符串的大小
int len = strlen(str);
if(0 == len)//当编辑框中没有字符串时
{
MessageBox(hwnd,TEXT("请输入你需要添加的城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
//添加城市
ListBox_InsertString(hwndList1,-1,str);
MessageBox(hwnd,TEXT("添加成功"),TEXT("提示"),MB_OK);
}
}
break;
case IDC_FIND://查找城市
{
TCHAR str1[256];
TCHAR str2[256];
int flag = 0;//标志位
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT2,str1,sizeof(str1));
//得到字符串的长度
int len = strlen(str1);
if(0 == len)//当编辑框中没有字符串时
{
MessageBox(hwnd,TEXT("请输入一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到ListBox控件中城市的个数
int Count = ListBox_GetCount(hwndList1);
//得到编辑框中的字符串
GetDlgItemText(hwnd,IDC_EDIT2,str1,sizeof(str1));
for(int i = 0; i < Count; i++)
{
//得到ListBox控件中的城市
ListBox_GetText(hwndList1,i,str2);
//当两个城市相同时
if(0 == strncmp(str1,str2,len))
{
flag = 1;//标志找到了
//得到城市的索引
ListBox_SetCurSel(hwndList1,i);
TCHAR temp[256];
//d得到找到的城市
ListBox_GetText(hwndList1,i,temp);
//将城市在编辑框中显示
SetDlgItemText(hwnd,IDC_SHOW,temp);
MessageBox(hwnd,TEXT("找到了"),TEXT("提示"),MB_OK);
return ;
}
}
if(0 == flag)//当没找到城市时
{
MessageBox(hwnd,TEXT("没找到"),TEXT("提示"),MB_OK | MB_ICONERROR);
}
}
}
break;
case IDC_VIEW://显示城市
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到选定的城市的索引
int CurSel = ListBox_GetCurSel(hwndList1);
if(-1 == CurSel)//当没选城市时
{
MessageBox(hwnd,TEXT("请选择一个城市"),TEXT("提示"),MB_OK | MB_ICONEXCLAMATION);
}
else
{
TCHAR temp[256];
//得到选定的城市
ListBox_GetText(hwndList1,CurSel,temp);
TCHAR cmd[256];
wsprintf(cmd,"你选择的是%s",temp);
MessageBox(hwnd,cmd,TEXT("提示"),MB_OK);
//在编辑框中显示选定的城市
SetDlgItemText(hwnd,IDC_SHOW,temp);
}
}
break;
case IDC_LIST1://在ListBox控件上双击
{
if(LBN_DBLCLK == codeNotify)//双击
{
//得到ListBox控件的句柄
HWND hwndList1 = GetDlgItem(hwnd,IDC_LIST1);
//得到选定的城市的索引
int CurSel = ListBox_GetCurSel(hwndList1);
TCHAR temp[256];
//得到选定的城市
ListBox_GetText(hwndList1,CurSel,temp);
//显示选定的城市
SetDlgItemText(hwnd,IDC_SHOW,temp);
}
}
break;
default:
break;
}
}
void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}
说明LIstBox控件的这个特性
运行结果: 显示城市
错误处理 双击显示城市
城市管理系统(LIstBox控件),布布扣,bubuko.com
原文:http://blog.csdn.net/u010105970/article/details/20035651