CXPMessage.c
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:7k
源码类别:

CA认证

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // 预处理
  3. #include "CXPBase.h"
  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. // 通用消息处理
  7. LRESULT CXPCommonProc(PCLASSXP pCxp, UINT uMsg, WPARAM wParam, LPARAM lParam)
  8. {
  9. LRESULT lResult;
  10. switch (uMsg)
  11. {
  12. case WM_MOUSEMOVE:
  13. if (!_CXPGetState(CXPS_HOTLIGHT) && !(wParam & MK_LBUTTON) && CXPTrackMouseLeave(pCxp->hWnd))
  14. {
  15. _CXPSetState(CXPS_HOTLIGHT);
  16. break;
  17. }
  18. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, uMsg, wParam, lParam);
  19. case WM_MOUSELEAVE:
  20. if (_CXPGetState(CXPS_HOTLIGHT))
  21. {
  22. _CXPClearState(CXPS_HOTLIGHT);
  23. break;
  24. }
  25. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, uMsg, wParam, lParam);
  26. case WM_ENABLE:
  27. _CXPSetState2(CXPS_DISABLED, !wParam);
  28. break;
  29. case WM_SETFOCUS:
  30. _CXPSetState(CXPS_FOCUS);
  31. break;
  32. case WM_KILLFOCUS:
  33. _CXPClearState(CXPS_FOCUS);
  34. break;
  35. case WM_NCDESTROY:
  36. lResult = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, uMsg, wParam, lParam);
  37. CXPSet(pCxp->hWnd, FALSE);
  38. return lResult;
  39. default:
  40. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, uMsg, wParam, lParam);
  41. }
  42. lResult = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, uMsg, wParam, lParam);
  43. pCxp->pDraw(pCxp);
  44. return lResult;
  45. }
  46. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. // 按钮回调函数
  49. LRESULT CALLBACK CXPButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  50. {
  51. LONG lStyle;
  52. PCLASSXP pCxp;
  53. LRESULT lResult;
  54. pCxp = (PCLASSXP) GetProp(hWnd, TEXT("ClassXP"));
  55. _Assert(pCxp);
  56. switch (uMsg)
  57. {
  58. case BM_SETSTYLE:
  59. _CXPSetState2(CXPS_DEFAULT, wParam & BS_DEFPUSHBUTTON);
  60. break;
  61. case BM_SETSTATE:
  62. _CXPSetState2(CXPS_PRESSED, wParam);
  63. lStyle = GetWindowLong(hWnd, GWL_STYLE);
  64. SetWindowLong(hWnd, GWL_STYLE, (lStyle & ~BS_TYPEMASK) | BS_GROUPBOX);
  65. lResult = CallWindowProc(pCxp->wpPrev, hWnd, uMsg, wParam, lParam);
  66. SetWindowLong(hWnd, GWL_STYLE, lStyle);
  67. pCxp->pDraw(pCxp);
  68. return lResult;
  69. case BM_SETCHECK:
  70. _CXPSetState2(CXPS_CHECKED, (wParam == BST_CHECKED));
  71. _CXPSetState2(CXPS_INDETERMINATE, (wParam == BST_INDETERMINATE));
  72. break;
  73. case WM_PAINT:
  74. case WM_SETTEXT:
  75. lResult = DefWindowProc(hWnd, uMsg, wParam, lParam);
  76. pCxp->pDraw(pCxp);
  77. return lResult;
  78. case WM_ERASEBKGND:
  79. return TRUE;
  80. default:
  81. return CXPCommonProc(pCxp, uMsg, wParam, lParam);
  82. }
  83. lResult = CallWindowProc(pCxp->wpPrev, hWnd, uMsg, wParam, lParam);
  84. pCxp->pDraw(pCxp);
  85. return lResult;
  86. }
  87. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  88. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  89. // 编辑框回调函数
  90. LRESULT CALLBACK CXPEditBoxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  91. {
  92. PCLASSXP pCxp;
  93. LRESULT lResult;
  94. pCxp = (PCLASSXP) GetProp(hWnd, TEXT("ClassXP"));
  95. _Assert(pCxp);
  96. switch (uMsg)
  97. {
  98. case EM_SETREADONLY:
  99. _CXPSetState2(CXPS_READONLY, wParam);
  100. case WM_NCPAINT:
  101. lResult = DefWindowProc(hWnd, uMsg, wParam, lParam);
  102. pCxp->pDraw(pCxp);
  103. return lResult;
  104. /*case WM_SYSCOMMAND:
  105. case WM_LBUTTONDOWN:
  106. case WM_NCLBUTTONDOWN:
  107. case WM_HSCROLL:
  108. case WM_VSCROLL:
  109. case WM_CHAR:
  110. case WM_PASTE:
  111. lStyle = GetWindowLong(hWnd, GWL_STYLE);
  112. SetWindowLong(hWnd, GWL_STYLE, lStyle & ~(WS_VSCROLL | WS_HSCROLL));
  113. lResult = CallWindowProc(pCxp->wpPrev, hWnd, uMsg, wParam, lParam);
  114. SetWindowLong(hWnd, GWL_STYLE, lStyle);
  115. return lResult;*/
  116. default:
  117. return CXPCommonProc(pCxp, uMsg, wParam, lParam);
  118. }
  119. }
  120. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  121. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  122. // 组合框回调函数
  123. LRESULT CALLBACK CXPComboBoxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  124. {
  125. PCLASSXP pCxp;
  126. LRESULT lResult;
  127. pCxp = (PCLASSXP) GetProp(hWnd, TEXT("ClassXP"));
  128. _Assert(pCxp);
  129. switch (uMsg)
  130. {
  131. case WM_LBUTTONDOWN:
  132. _CXPSetState(CXPS_PRESSED);
  133. break;
  134. case WM_LBUTTONUP:
  135. _CXPClearState(CXPS_PRESSED);
  136. case WM_PAINT:
  137. case WM_NCPAINT:
  138. break;
  139. default:
  140. return CXPCommonProc(pCxp, uMsg, wParam, lParam);
  141. }
  142. lResult = CallWindowProc(pCxp->wpPrev, hWnd, uMsg, wParam, lParam);
  143. pCxp->pDraw(pCxp);
  144. return lResult;
  145. }
  146. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  147. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  148. // 旋转控件回调函数
  149. LRESULT CALLBACK CXPSpinBoxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  150. {
  151. RECT rtRect;
  152. PCLASSXP pCxp;
  153. LRESULT lResult;
  154. pCxp = (PCLASSXP) GetProp(hWnd, TEXT("ClassXP"));
  155. _Assert(pCxp);
  156. switch (uMsg)
  157. {
  158. case WM_STYLECHANGED:
  159. if (wParam == GWL_STYLE)
  160. {
  161. pCxp->lStyle = ((LPSTYLESTRUCT) lParam)->styleNew;
  162. CXPGetState(pCxp);
  163. }
  164. break;
  165. case WM_LBUTTONDOWN:
  166. _CXPSetState(CXPS_PRESSED);
  167. break;
  168. case WM_LBUTTONUP:
  169. _CXPClearState(CXPS_PRESSED);
  170. case WM_PAINT:
  171. case WM_NCPAINT:
  172. case WM_ERASEBKGND:
  173. lResult = DefWindowProc(hWnd, uMsg, wParam, lParam);
  174. pCxp->pDraw(pCxp);
  175. ReleaseCapture();
  176. return lResult;
  177. case WM_MOUSEMOVE:
  178. // 判断鼠标位于上下部分
  179. GetClientRect(hWnd, &rtRect);
  180. rtRect.right /= 2;
  181. rtRect.bottom /= 2;
  182. if (_CXPGetState(CXPS_FIRSTPART))
  183. {
  184. if ((_CXPGetState(CXPS_HORIZON) && (LOWORD(lParam) > rtRect.right)) ||
  185. (!_CXPGetState(CXPS_HORIZON) && (HIWORD(lParam) > rtRect.bottom)))
  186. {
  187. _CXPClearState(CXPS_FIRSTPART);
  188. break;
  189. }
  190. }
  191. else
  192. {
  193. if ((_CXPGetState(CXPS_HORIZON) && (LOWORD(lParam) <= rtRect.right)) ||
  194. (!_CXPGetState(CXPS_HORIZON) && (HIWORD(lParam) <= rtRect.bottom)))
  195. {
  196. _CXPSetState(CXPS_FIRSTPART);
  197. break;
  198. }
  199. }
  200. default:
  201. return CXPCommonProc(pCxp, uMsg, wParam, lParam);
  202. }
  203. lResult = CallWindowProc(pCxp->wpPrev, hWnd, uMsg, wParam, lParam);
  204. pCxp->pDraw(pCxp);
  205. return lResult;
  206. }
  207. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////