沧州网站建设刘磊云主机网站模板
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:09
当前位置: 首页 > news >正文
沧州网站建设刘磊,云主机网站模板,设计素材网站好融资吗,网页制作与设计教案Win32 ListBox控件
创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int …Win32 ListBox控件
创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int y, // 左上角垂直坐标int nWidth,int nHeight,HWND hWndParent, // 窗口的父窗口句柄 – 如果是子窗口要写这个参数HMENU hMenu, // 窗口菜单句柄HINSTANCE hInstance, // 应用程序实例句柄 – WinMain 第一个参数LPVOID lpParam // 窗口创建时附加参数 – 一般给NULL
); // 创建成功返回窗口句柄创建ListBox #define ID_LIST 1001 // 窗口句柄HWND hListBox CreateWindowEx(0, TEXT(ListBox), NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_HASSTRINGS,10, 10, 200, 200, hWnd, (HMENU)ID_LIST, ((LPCREATESTRUCT)lParam)-hInstance, 0);const TCHAR *strArray[] { TEXT(星期一), TEXT(星期二), TEXT(星期三), TEXT(星期四), TEXT(星期五), TEXT(星期六), TEXT(星期日)};
for (int i 0; i 7; i){// 添加内容SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)strArray[i]);
}效果
控件样式
样式说明LBS_COMBOBOX通知列表框它是组合框的一部分。 这允许两个控件之间的协调以便它们呈现统一的 UI。 组合框本身必须设置此样式。LBS_DISABLENOSCROLL当列表框不包含足够的项目滚动时显示禁用的水平或垂直滚动条。 如果未指定此样式则当列表框不包含足够的项目时滚动条将隐藏。 此样式必须与 WS_VSCROLL 或 WS_HSCROLL 样式一起使用。LBS_EXTENDEDSEL允许使用 SHIFT 键和鼠标或特殊键组合选择多个项。LBS_HASSTRINGS指定列表框包含由字符串组成的项。 列表框维护字符串的内存和地址以便应用程序可以使用 LB_GETTEXT 消息检索特定项的文本。 默认情况下除所有者绘制的列表框之外的所有列表框都具有此样式。 可以创建具有或不带此样式的所有者绘制列表框。对于没有此样式的所有者绘制列表框 LB_GETTEXT 消息检索与项关联的值 (项数据) 。LBS_MULTICOLUMN指定水平滚动的多列列表框。 列表框自动计算列的宽度或者应用程序可以使用 LB_SETCOLUMNWIDTH 消息设置宽度。 如果列表框具有 LBS_OWNERDRAWFIXED 样式则当列表框发送 WM_MEASUREITEM 消息时应用程序可以设置宽度。具有 LBS_MULTICOLUMN 样式的列表框不能垂直滚动它忽略它接收的任何 WM_VSCROLL 消息。不能组合 LBS_MULTICOLUMN 和 LBS_OWNERDRAWVARIABLE 样式。 如果同时指定了两者 则忽略LBS_OWNERDRAWVARIABLE 。LBS_MULTIPLESEL每次用户单击或双击列表框中的字符串时都会打开或关闭字符串选择。 用户可以选择任意数量的字符串。LBS_NODATA指定无数据列表框。 当列表框中的项数超出一千时请指定此样式。 无数据列表框还必须具有 LBS_OWNERDRAWFIXED 样式但不得具有 LBS_SORT 或 LBS_HASSTRINGS 样式。无数据列表框类似于所有者描述的列表框但它不包含项的字符串或位图数据。 用于添加、插入或删除项的命令始终忽略任何指定的项数据;在列表框中查找字符串的请求始终失败。 系统在必须绘制项时将 WM_DRAWITEM 消息发送到所有者窗口。 使用WM_DRAWITEM消息传递的 DRAWITEMSTRUCT 结构的 itemID 成员指定要绘制的项的行号。 无数据列表框不发送 WM_DELETEITEM 消息。LBS_NOINTEGRALHEIGHT指定列表框的大小正好是应用程序在创建列表框时指定的大小。 通常系统调整列表框的大小以便列表框不显示部分项。对于 具有LBS_OWNERDRAWVARIABLE 样式的列表框始终强制实施 LBS_NOINTEGRALHEIGHT 样式。LBS_OWNERDRAWFIXED指定列表框的所有者负责绘制其内容并且列表框中的项目高度相同。 创建列表框时所有者窗口会收到 WM_MEASUREITEM 消息当列表框的可视方面发生更改时收到 WM_DRAWITEM 消息。LBS_SORT按字母顺序对列表框中的字符串进行排序。LBS_STANDARD按字母顺序对列表框中的字符串进行排序。 每当用户单击列表框项、双击项目或取消所选内容时父窗口都会收到通知代码。 列表框具有垂直滚动条其边框位于右侧。 此样式结合了 LBS_NOTIFY、 LBS_SORT、 WS_VSCROLL和 WS_BORDER 样式。LBS_USETABSTOPS允许列表框在绘制其字符串时识别和展开制表符。 可以使用 LB_SETTABSTOPS 消息指定制表位位置。 默认选项卡位置相隔 32 个对话框模板单位。 对话框模板单元是对话框模板中使用的与设备无关的单位。 若要将度量值从对话框模板单位转换为屏幕单位 (像素) 请使用 MapDialogRect 函数。LBS_WANTKEYBOARDINPUT指定每当用户按下键且列表框具有输入焦点时列表框的所有者将接收 WM_VKEYTOITEM 消息。 这使应用程序能够在键盘输入上执行特殊处理。
控件消息
消息码说明WPARAMLPARAM返回值LB_ADDSTRING添加字符串到列表项中0LPCTSTRIntLB_DELETESTRING删除指定字符串项nIndex0IntLB_GETCOUNT获得列表项的部数00IntLB_GETCURSEL获得当前选中项的索引00IntLB_GETITEMDATA获得指定项的附加数据nIndex0DWORD_PTRLB_GETSEL获得指定项的选中状态nIndex0IntLB_GETSELCOUNT获得多选项的总数00IntLB_GETSELITEMS获得选中项的索引数组nMaxArray数组大小lpArray数组IntLB_GETTEXT获得指定项的字符串nIndexLPTSTRIntLB_GETTEXTLEN获得指定项字符串长度nIndex0IntLB_GETTOPINDEX获得第一个可见项的索引00IntLB_INSERTSTRING插入字符串项nIndexLPCTSTRIntLB_RESETCONTENT删除所有的项00VoidLB_SELITEMRANGE范围选择项或取消范围选择BOOL选择TRUE取消FALSEDWORD (L开始选择项的索引H结束项的索引)IntLB_SETCARETINDEX设置指定项获得焦点并可见nIndexBOOLFALSE为完全可见TRUE为部分可见IntLB_SETCURSEL设置当前选中的字符串项nIndex0IntLB_SETITEMDATA设置指定项的附加数据nIndexDWORD_PTRIntLB_SETSEL设置指定项的选中状态并获得焦点和可见BOOL 为真突出显示为FALSE取消突出显示nIndexIntLB_SETTOPINDEX设置指定项为可见项nIndex0Int
Demo
- 单击选项弹出消息框显示选择的项
if (LOWORD (wParam) ID_LIST HIWORD(wParam) LBN_SELCHANGE) {int iIndex SendMessage(hListBox, LB_GETCURSEL, 0, 0);int iLength SendMessage(hListBox, LB_GETTEXTLEN, iIndex, 0) 1;TCHAR * pVarName (TCHAR*)malloc(iLength*sizeof(TCHAR));SendMessage(hListBox, LB_GETTEXT, iIndex, (LPARAM)pVarName);MessageBox(hWnd, pVarName, TEXT(选择的内容), MB_OK);free(pVarName);
}2. ListBox重绘
ListBox重绘实现QQ 消息列表效果
通过指定LBS_OWNERDRAWFIXED样式可以进行ListBox的重绘。
两个重要消息WM_DRAWITEM 和 WM_MEASUREITEM
2.1 WM_DRAWITEM 消息
第二个附加参数lParam里包含了控件的相关信息 其实际类型是DRAWITEMSTRUCT的指针类型
DRAWITEMSTRUCT 原型
typedef struct tagDRAWITEMSTRUCT {UINT CtlType;UINT CtlID;UINT itemID;UINT itemAction;UINT itemState;HWND hwndItem;HDC hDC;RECT rcItem;ULONG_PTR itemData;
} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;CtlType 指定了控件的类型 CtlID 组合框、列表框、按钮或静态控件的标识符。 此成员不用于菜单项。 itemID 菜单项的菜单项标识符或列表框或组合框中项的索引。 对于空列表框或组合框此成员可以是 -1。 这允许应用程序仅在 rcItem 成员指定的坐标处绘制焦点矩形即使控件中没有项也是如此。 这向用户指示列表框或组合框是否具有焦点。 itemAction 成员中设置位的方式决定了矩形是否与列表框或组合框具有焦点一样绘制 itemAction 所需的绘图操作。 此成员可以是一个或多个值。 itemState 当前绘图操作发生后项的视觉状态。 此成员可以是下表中显示的值的组合。 hwndItem 组合框、列表框、按钮和静态控件的控件的句柄。 对于菜单此成员是包含该项的菜单的句柄。 hDC 设备上下文的句柄;在控件上执行绘图操作时必须使用此设备上下文。 rcItem 一个矩形用于定义要绘制的控件的边界。 此矩形位于 hDC 成员指定的设备上下文中。 系统会自动剪辑所有者窗口在组合框、列表框和按钮的设备上下文中绘制的任何内容但不会剪辑菜单项。 绘制菜单项时所有者窗口不得在 rcItem 成员定义的矩形边界之外绘制。 itemData 与菜单项关联的应用程序定义值。 对于控件此参数指定LB_SETITEMDATA或CB_SETITEMDATA消息最后分配给列表框或组合框的值。 如果列表框或组合框具有 LBS_HASSTRINGS或 CBS_HASSTRINGS样式则此值最初为零。 否则此值最初是传递给下列消息之一的 lParam 参数中的列表框或组合框的值 CB_ADDSTRINGCB_INSERTSTRINGLB_ADDSTRINGLB_INSERTSTRING 如果 CtlType是ODT_BUTTON 或 ODT_STATIC 则itemData 为零。
2.2 WM_MEASUREITEM消息 第二个附加参数lParam描述了相关项的绘制信息其实际类型是MEASUREITEMSTRUCT的指针类型 typedef struct tagMEASUREITEMSTRUCT {UINT CtlType;UINT CtlID;UINT itemID;UINT itemWidth;UINT itemHeight;ULONG_PTR itemData; } MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, LPMEASUREITEMSTRUCT;大部分字段同DRAWITEMSTRUCT, 两个重要字段itemWidth, itemHeight 指定列表项的宽度和高度 2.3 重要代码 void SetListBoxItemRect(LPARAM lParam) {PMEASUREITEMSTRUCT pmr (PMEASUREITEMSTRUCT)lParam;if (pmr-CtlID ID_LIST) {pmr-itemHeight 58;} }void DrawListBoxItem(LPARAM lParam) {TCHAR pVarName;PDRAWITEMSTRUCT pdr (PDRAWITEMSTRUCT)(lParam);COLORREF nColor RGB(66, 66, 66);HBRUSH hBursh NULL; if(pdr-itemState ODS_SELECTED ) // 选中状态hBursh CreateSolidBrush(RGB(255, 128, 0));elsehBursh CreateSolidBrush(RGB(255, 255, 255));FillRect(pdr-hDC, pdr-rcItem, hBursh);DeleteObject(hBursh);int itemLength SendMessage(hListBox, LB_GETTEXTLEN, pdr-itemID, 0) 1;pVarName (TCHAR*)malloc(itemLength * sizeof(TCHAR));SendMessage(hListBox, LB_GETTEXT, pdr-itemID, (LPARAM)pVarName);if (pVarName NULL) return;HBITMAP hBmp LoadBitmap(hInst, (char*)info_arr[atoi(pVarName)].bitmapId);HDC Bhdc CreateCompatibleDC(pdr-hDC);HGDIOBJ oldBMP SelectObject(Bhdc, hBmp);StretchBlt(pdr-hDC, pdr-rcItem.left 1, pdr-rcItem.top 1, 56, 56, Bhdc, 0, 0, 100, 100, SRCCOPY);HFONT font1 CreateFont(20,0,0,0,900,NULL,NULL,NULL,GB2312_CHARSET,NULL,NULL,NULL,NULL,仿宋);HFONT font2 CreateFont(20,0,0,0,800,NULL,NULL,NULL,GB2312_CHARSET,NULL,NULL,NULL,NULL,方正舒体);SetBkMode(pdr-hDC, TRANSPARENT);HGDIOBJ oldfont SelectObject(pdr-hDC, font1);nColor RGB(0, 0, 0);SetTextColor(pdr-hDC, nColor);TextOut(pdr-hDC, pdr-rcItem.left 65, pdr-rcItem.top 5, info_arr[atoi(pVarName)].userName, strlen(info_arr[atoi(pVarName)].userName));SelectObject(pdr-hDC, font2);nColor RGB(133, 193, 246);SetTextColor(pdr-hDC, nColor);TextOut(pdr-hDC, pdr-rcItem.left 65, pdr-rcItem.top 30, info_arr[atoi(pVarName)].newData, strlen(info_arr[atoi(pVarName)].newData));SelectObject(pdr-hDC, oldfont);SelectObject(Bhdc, oldBMP);DeleteObject(hBmp);DeleteObject(font1);DeleteObject(font2);DeleteDC(Bhdc);free(pVarName); }2.4 实现效果 参考 基本使用https://blog.csdn.net/qq_31178679/article/details/125904122 ListBox风格、消息说明https://www.cnblogs.com/H-R-J/p/11882224.html ListBox重绘: https://www.freesion.com/article/3893191680/ ListBox简单使用https://www.codenong.com/cs109127861/ 微软文档https://learn.microsoft.com/zh-cn/windows/win32/msi/listbox-control DRAWITEMSTRUCT 结构 https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/ns-winuser-drawitemstruct
项目地址 https://github.com/wa-kakalala/QQMsgList
- 上一篇: 沧州网站建设定制价格微网站作用
- 下一篇: 沧州网站建设王宝祥宁波汽车网站建设
相关文章
-
沧州网站建设定制价格微网站作用
沧州网站建设定制价格微网站作用
- 技术栈
- 2026年03月21日
-
沧州网站建设的集成商自媒体seo优化
沧州网站建设的集成商自媒体seo优化
- 技术栈
- 2026年03月21日
-
沧州网站建设代理价格好品质高端网站设计推荐
沧州网站建设代理价格好品质高端网站设计推荐
- 技术栈
- 2026年03月21日
-
沧州网站建设王宝祥宁波汽车网站建设
沧州网站建设王宝祥宁波汽车网站建设
- 技术栈
- 2026年03月21日
-
沧州网站建设优化公司互联网营销师培训机构哪家好
沧州网站建设优化公司互联网营销师培训机构哪家好
- 技术栈
- 2026年03月21日
-
沧州网站建设运营公司网页美工培训中心
沧州网站建设运营公司网页美工培训中心
- 技术栈
- 2026年03月21日






