我在上一篇博客中介绍了使用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