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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 剑侠引擎,界面窗口体系结构的最基本窗口对象
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-7-9
  6. ------------------------------------------------------------------------------------------
  7. *****************************************************************************************/
  8. #pragma once
  9. //============窗口风格================
  10. #define WND_S_VISIBLE 0x80000000 //可见
  11. #define WND_S_DISABLED 0x40000000 //不可操作
  12. #define WND_S_TOPMOST 0x20000000 //置顶窗口
  13. #define WND_S_MOVEALBE 0x10000000 //可被拖动
  14. #define WND_S_DISABLE 0x04000000 //窗口不可被操作
  15. #define WND_S_TOBEDESTROY 0x02000000 //window is to be destroy
  16. #define WND_S_MOVE_WITH_R_EDGE 0x01000000 //跟随父窗口右下边界的变化移动窗口
  17. #define WND_S_MOVE_WITH_B_EDGE 0x00800000 //跟随父窗口右下边界的变化移动窗口
  18. #define WND_S_SIZE_WITH_R_EDGE 0x00400000 //跟随父窗口大小的变化调整窗口大小
  19. #define WND_S_SIZE_WITH_B_EDGE 0x00200000 //跟随父窗口大小的变化调整窗口大小
  20. #define WND_S_SIZE_WITH_ALL_CHILD 0x00100000 //以子窗口的范围测试的集合作为自己的范围测试的集合
  21. extern int WND_SHOW_DEBUG_FRAME_TEXT;
  22. class KIniFile;
  23. class KWndWindow
  24. {
  25. protected:
  26. //----窗口参数----
  27. unsigned int m_Style; //窗口风格,见Wnd.h中窗口风格的定义
  28. int m_Left; //左上角X坐标,相对于父窗口
  29. int m_Top; //左上角Y坐标,相对于父窗口
  30. int m_Width; //宽度
  31. int m_Height; //高度
  32. int m_nAbsoluteLeft; //窗口左上角的绝对坐标x
  33. int m_nAbsoluteTop; //窗口左上角的绝对坐标y
  34. #ifdef _DEBUG
  35. char m_Caption[32]; //标题文字
  36. #endif
  37. int m_bMoving;
  38. int m_nLastMouseHoldPosX;
  39. int m_nLastMouseHoldPosY;
  40. //----与其他窗口的级连关系----
  41. KWndWindow* m_pPreviousWnd; //前一个同级窗口
  42. KWndWindow* m_pNextWnd; //后一个同级窗口
  43. KWndWindow* m_pFirstChild; //第一个子窗口
  44. KWndWindow* m_pParentWnd; //父窗口
  45. public:
  46. KWndWindow();
  47. virtual ~KWndWindow();
  48. void Destroy();
  49. virtual void UpdateData(){}
  50. //====可重载的函数====
  51. // flying add this function
  52. virtual int CloseWindow(bool bDestory){return 0;};
  53. virtual int Init(KIniFile* pIniFile, const char* pSection);//初始化
  54. virtual int WndProc(unsigned int uMsg, unsigned int uParam, int nParam);//窗口函数
  55. virtual int PtInWindow(int x, int y); //判断一个点是否在窗口范围内,传入的是绝对坐标
  56. virtual void PaintWindow(); //窗体绘制
  57. void PaintDebugInfo();
  58. virtual void SetSize(int nWidth, int nHeight); //设置窗口大小
  59. //====窗口行为操作====
  60. void BringToTop(); //把窗口置顶
  61. void GetPosition(int* pLeft, int* pTop); //获取窗口位置,相对坐标
  62. void SetPosition(int nLeft, int nTop); //设置窗口位置,相对坐标
  63. void GetAbsolutePos(int* pLeft, int* pTop); //获取窗口位置,绝对坐标
  64. void GetSize(int* pWidth, int* pHeight); //获取窗口大小
  65. void SetCursorAbove(); //使鼠标指针以移动到悬浮在此窗口中的位置上
  66. void GetAllChildLayoutRect(RECT* pRect); //取得包含所有子窗口分布区域的最小区域
  67. virtual void Show(); //显示窗口
  68. virtual void Hide(); //隐藏窗口
  69. int IsVisible(); //判断窗口是否被显示
  70. virtual void Enable(int bEnable); //禁止或者允许使窗口被操作
  71. // void SetStyle(DWORD dwStyle); //修改窗口风格
  72. void AddChild(KWndWindow* pChild); //添加子窗口
  73. void AddBrother(KWndWindow* pBrother); //添加兄弟窗口
  74. virtual KWndWindow* TopChildFromPoint(int x, int y); //得到处于指定坐标位置的最上层窗口,传入的坐标为绝对坐标
  75. KWndWindow* GetPreWnd() const { return m_pPreviousWnd; } //得到前一个兄弟窗口
  76. KWndWindow* GetNextWnd() const { return m_pNextWnd; } //得到后一个兄弟窗口
  77. KWndWindow* GetParent() const { return m_pParentWnd; } //得到父窗口
  78. KWndWindow* GetFirstChild() const { return m_pFirstChild; } //得到第一个子窗口
  79. KWndWindow* GetOwner(); //获得不再有父窗口的祖先窗口
  80. void Paint(); //绘制
  81. void LetMeBreathe(); //让窗口活动
  82. void SplitSmaleFamily(); //把自己(及子窗口)从窗口树里面里面分离出来
  83. void LeaveAlone(); //世间再无窗在我左右,一无牵连
  84. //----属性设置,获取----
  85. #ifdef _DEBUG
  86. void SetCaption(char* pszCaption);
  87. #endif
  88. int IsDisable() { return (m_Style & WND_S_DISABLE); }
  89. int GetStyle() { return m_Style; }
  90. int SetStyle(unsigned int nStyle)
  91. {
  92. m_Style = nStyle;
  93. return m_Style; 
  94. }
  95. protected:
  96. void Clone(KWndWindow* pCopy);
  97. private:
  98. virtual void Breathe() {} //窗口的持续行为
  99. void OnLBtnDown(int x, int y); //响应鼠标左键按下的操作,传入的坐标为绝对坐标
  100. void OnMoveWnd(); //响应鼠标左键按下移动的操作,传入的坐标为绝对坐标
  101. private:
  102. void AbsoluteMove(int dx, int dy); //绝对坐标的调整
  103. };
  104. //把字符串表示的颜色信息转为数值表示
  105. unsigned int GetColor(const char* pString);
  106. //把数值表示的颜色信息转为字符串表示
  107. const char* GetColorString(unsigned int nColor);