WndList.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面窗口体系结构--列表窗口
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-8-8
  6. ------------------------------------------------------------------------------------------
  7.     列表窗口只列出文字。但是每项都可以关联其他数据。
  8. 列表窗口设置的内容为一个数组,数组的每一个元素对应一个列表项。每个数组原素的存储空间大
  9. 小相同。每个数组元素的结构为一个定长的字符串或者为表含一个定长字符串成员的结构,字符串可以
  10. 处于结构中的任意位置。列表窗口类提供访问函数可以获取这些数组元素结构中的整数形成员的值。
  11.     列表窗口所能列出的列表项数目小于数组元素数目时,可以设置列表窗口顶部从哪个数组元素开始
  12. 显示。
  13. *****************************************************************************************/
  14. #pragma once
  15. #include "WndWindow.h"
  16. #define WNDLIST_ES_HALIGN_CENTRE 0x0001 //水平居中
  17. #define WNDLIST_ES_HALIGN_RIGHT 0x0002 //水平靠右对齐
  18. #define WNDLIST_ES_HALIGN_FILTER (WNDLIST_ES_HALIGN_RIGHT | WNDLIST_ES_HALIGN_CENTRE)
  19. #define WNDLIST_ES_HIGHLIGHT_ENABLE 0x0004 //以不同颜色显示鼠标指针指向的项
  20. #define WNDLIST_ES_MULTI_SEL 0x0008 //可以同时选中多项
  21. #define NO_CUSTOM_COLOR 0xffffffff
  22. class KWndScrollBar;
  23. class KWndList : public KWndWindow
  24. {
  25. public:
  26. virtual int Init(KIniFile* pIniFile, const char* pSection);//初始化
  27. virtual int WndProc(unsigned int uMsg, unsigned int uParam, int nParam);//窗口函数
  28. virtual void PaintWindow(); //绘制窗口
  29. //设置列表显示的内容
  30. void SetContent(BYTE* pContent, int nNumItem, int nItemSize, int nStringOffset);
  31. void GetString(int nItemIndex, char* pBuffer);//获取列表项的字符串内容
  32. int GetStrignLen(int nItemIndex); //获得列表项的字符串内容长度。
  33. //在列表中查找某个字符串。
  34. int FindString(int nPrecedingStart, const char* pString);
  35. //获得列表项关联数据结构中某个整数型成员的值
  36. int GetItemDataInt(int nItemIndex, int nDataOffset);
  37. void SetTopItemIndex(int nTopItemIndex); //设置列表窗口顶部显示的数据项的索引
  38. int GetTopItemIndex() { return m_nTopItemIndex; }//获得列表窗口顶部显示的数据项的索引
  39. int GetVisibleItemCount() const; //获得列表框可以同时显示的项的数目
  40. int GetCount()  { return m_nNumItem; } //获取数据项的总数目
  41. int GetCurSel() { return m_nSelItemIndex;  }//得到当前选择的数据项的索引
  42. int SetCurSel(int nSel);
  43. int IsItemSel(int nIndex); //判断某项是否被选中
  44. void SetCustomColorOffset(int nOffset);
  45. void EnableMultiSel(int bEnable); //启用/禁用多选
  46. void SetScrollbar(KWndScrollBar* pScroll);
  47. KWndList();
  48. ~KWndList();
  49. protected:
  50. void Clone(KWndList* pCopy);
  51. private:
  52. void OnLButtonDown(int x, int y); //响应鼠标左键按下
  53. void OnRButtonDown(int x, int y); //响应鼠标右键按下
  54. void OnLButtonDClick(int x, int y); //响应鼠标左键double click
  55. void OnMouseMove(int x, int y); //响应鼠标在列表窗口上移动
  56. int GetIemIndexAtPoint(int x, int y); //获得的指定位置的选项的索引
  57. void UpdateData();
  58. private:
  59. KWndScrollBar* m_pScrollbar; //滚动条
  60. BYTE* m_pContent; //列表项内容数据
  61. int m_nNumItem; //数据项的数目
  62. int m_nItemSize; //数据项结构的存储空间宽度
  63. int m_nStringOffset; //要显示的字符串在数据项结构中的偏移位置
  64. int m_nColorOffset; //要显示的字符串的颜色在数据项结构中的偏移位置,
  65. //只当有WNDLIST_ES_CUSTOM_COLOR标记时,才有效果
  66. int m_nTopItemIndex; //窗口顶部显示的数据项的索引
  67. int m_nSelItemIndex; //选中的数据项的索引
  68. int m_nHighLightItemIndex; //高亮度显示(鼠标指针下方)的数据项的索引
  69. unsigned int m_ItemColor; //显示数据项文本的颜色
  70. unsigned int m_ItemBorderColor; //显示数据项文本的边缘颜色
  71. unsigned int m_SelItemColor; //被选中的数据项文本的颜色
  72. unsigned int m_SelItemBorderColor; //被选中的数据项文本的边缘颜色
  73. unsigned int m_HighLightColor; //高亮度显示的数据项文本的颜色
  74. unsigned int m_HighLightBorderColor; //高亮度显示的数据项文本的边缘颜色
  75. unsigned int m_uSelItemBgColor; //选中项的背景色,如果值为0xffffffff表示无背景色
  76. int m_nFontSize; //显示字体大小
  77. int m_nNumColumn; //可以同时显示几列数据
  78. unsigned int m_uIsItemSelStatus; //纪录每个项是否被选择
  79. unsigned int* m_puItemSelStatusList; //纪录序号32及以上的项是否被选择
  80. unsigned int m_uNumSelStatusList; //m_upItemSelStatusList包含的unsigned int空间的数目
  81. };