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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 弹出选择菜单
  3. // Copyright : Kingsoft 2003
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2003-2-21
  6. ------------------------------------------------------------------------------------------
  7. *****************************************************************************************/
  8. #pragma once
  9. struct KPopupMenuItem
  10. {
  11. char szData[64];
  12. unsigned int uDataLen;
  13. unsigned int uBgColor;
  14. unsigned short uID;
  15. };
  16. #define MENU_DEFAULT_POS -607
  17. #define MENU_ITEM_DEFAULT_WIDTH 0
  18. #define MENU_ITEM_DEFAULT_HEIGHT 0
  19. #define MENU_ITEM_DEFAULT_RIGHT_WIDTH -1
  20. #define MENU_ITEM_DEFAULT_INDENT 255
  21. #define MENU_ITEM_DEFAULT_TITLEUPSPACE 1
  22. enum POPUPMENU_FLAG
  23. {
  24. PM_F_HAVE_HEAD_TAIL_IMG = 0x0001, //在菜单顶上底下添加边界图形
  25. PM_F_ZOOM_SELECTED_ITEM = 0x0002, //放大当前选中的菜单项
  26. PM_F_TAB_SPLIT_ITEM_TEXT = 0x0004, //tab字符分割的菜单项
  27. PM_F_HAVE_ITEM_SEPARATOR = 0x0008, //菜单项之间有分隔线
  28. PM_F_AUTO_DEL_WHEN_HIDE = 0x0010, //菜单消失的时候自动删除菜单数据
  29. PM_F_CANCEL_BY_CALLER = 0x0020, //由调用者来负责否菜单的消失/关闭
  30. };
  31. struct KPopupMenuData
  32. {
  33. short nX; //菜单弹出位置的x坐标
  34. short nY; //菜单弹出位置的y坐标
  35. short nXX; //原始的菜单弹出位置的x坐标
  36. short nYY; //原始的菜单弹出位置的y坐标
  37. short nItemWidth; //菜单项的宽度(包括下面的宽度)
  38. short nItemRightWidth; //菜单项右部特殊点击区域的宽度
  39. short nItemHeight; //菜单项的高度
  40. short nNumItem; //菜单项的数目
  41. short nSelectedItem; //当前选中的菜单项
  42. unsigned short usMenuFlag; //菜单特性的一些标记,为枚举类型POPUPMENU_FLAG取值的组合
  43. unsigned char byFontSize; //菜单项字体的大小
  44. unsigned char byItemTitleUpSpace; //菜单项文字离项顶端的间隔(单位:像素点)
  45. short nItemTitleIndent; //菜单项文字缩进
  46. // bool bZoomSelectedItem; //是否放大当前选中的菜单项
  47. // bool bHaveHeadTailImg; //是否在菜单顶上底下添加边界图形
  48. // bool bHaveSeparator; //菜单项是否有分隔线
  49. // bool bAutoDelete; //是否菜单消失的时候自动删除菜单数据
  50. // bool bManualCancel; //是否由调用者来决定是否菜单消失
  51. unsigned int uBorderLineColor; //菜单的边框颜色,为0则无
  52. unsigned int uSelItemBgColor; //被选中菜单项的背景色
  53. unsigned int uTextColor; //菜单项的文字色
  54. unsigned int uTextBorderColor; //菜单项的文字边缘色
  55. unsigned int uSelTextColor; //被选中菜单项的文字色
  56. unsigned int uSelTextBorderColor;//被选中菜单项的文字边缘色
  57. KPopupMenuItem Items[1]; //菜单项数据
  58. };
  59. #define MENU_DATA_SIZE(nNumItem) (sizeof(KPopupMenuData) + (nNumItem - 1) * sizeof(KPopupMenuItem))
  60. class KWndWindow;
  61. class KPopupMenu
  62. {
  63. public:
  64. static void Popup(KPopupMenuData* pMenu, KWndWindow* pCaller, unsigned int uParam);
  65. static void Cancel();
  66. static void PaintMenu();
  67. static void LoadTheme(const char* pScheme); //载入界面方案
  68. static int HandleInput(unsigned int uMsg, unsigned int uParam, int nParam);//窗口函数
  69. static void OnWndDelete(KWndWindow* pWnd);
  70. static void InitMenuData(KPopupMenuData* pMenu, int nNumItem);
  71. static KPopupMenuData* GetMenuData() { return m_pMenu;}
  72. private:
  73. static bool SelectItem(int x, int y, bool bApply);
  74. static bool SelectItem(int nIndex, bool bApply);
  75. private:
  76. static KPopupMenuData*  m_pMenu;
  77. static KWndWindow* m_pCaller;
  78. static unsigned int m_uCallerParam;
  79. static short m_nImgWidth; //图形水平长度
  80. static short m_nImgHeight; //图形垂直高度
  81. static short m_nIndent;
  82.     static short m_nFrame;
  83. static int m_nMenuHeight;
  84. static char m_szImage[128]; //图形文件名
  85. static unsigned int m_uDefBorderLineColor; //菜单的变框颜色,为0则无
  86. static unsigned int m_uDefItemBgColor; //菜单项的背景色
  87. static unsigned int m_uDefSelItemBgColor; //被选中菜单项的背景色
  88. static unsigned int m_uDefTextColor; //菜单项的文字色
  89. static unsigned int m_uDefTextBorderColor; //菜单项的文字边缘色
  90. static unsigned int m_uDefSelTextColor; //被选中菜单项的文字色
  91. static unsigned int m_uDefSelTextBorderColor;//被选中菜单项的文字边缘色
  92. };