DialogXP.cpp 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483
  1. // DialogXP.cpp: implementation of the CDialogXP class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. //#include "stdafx.h"
  5. //#include "test.h"
  6. //#include <winuser.H>
  7. //////////////////////////////////////////////////////////////////////
  8. /**************以下设置必需包含在每个子类中**********************/
  9. //头部
  10. ////////////////////////////////////////////////////////////////////////////////////////////////////
  11. // 编译预处理
  12. #if _WIN32_WINNT < 0x0400
  13. #define _WIN32_WINNT 0x0400
  14. #endif
  15. // 强制使用 C 语言方式编译
  16. #ifdef __cplusplus
  17. extern "C"
  18. {
  19. #endif // __cplusplus
  20. ////////////////////////////////////////////////////////////////////////////////////////////////////
  21. #include "DialogXP.h"
  22. ////////////////////////////////////////////////////////////////////////////////////////////////////
  23. // 全局变量
  24. extern HHOOK g_hPrevHookXP ; // 窗口消息 HOOK 句柄
  25. extern PCLASSXP g_pClassXP ; // 窗口的 CLASSXP 结构指针
  26. extern COLORREF g_crDialogbkColor; // 窗口背景颜色
  27. //WndColor[0]窗体颜色最深点, WndColor[1]为窗体的本色,WndColor[2]为最亮点的颜色,WndColor[3]为国次亮点颜色, WndColor[4]为国次次亮点颜色
  28. const COLORREF WndColor[]={ RGB(0,32,175), RGB(0,81,229), RGB(144,175,249), RGB(43,144,255), RGB(13,134,255)};
  29. const COLORREF WndColorUnAct[]={ RGB(79,83,188), RGB(104,141,224), RGB(132,159,234), RGB(152,178,232), RGB(129,167,232) };
  30. const COLORREF MinMaxBTColor[]={ RGB(132,159,234), RGB(104,141,224) };
  31. const COLORREF MinMaxBTColorAct[]={ RGB(144,175,249), RGB(0,81,229) };
  32. const COLORREF MinMaxBTColorMsOn[]={ RGB(132,159,234), RGB(13,134,255) };
  33. const COLORREF ExitBTColor[]={ RGB(180,155,185), RGB(175,102,115) };
  34. const COLORREF ExitBTColorAct[]={ RGB(240,169,151), RGB(228,61,5) };
  35. const COLORREF ExitBTColorMsOn[]={ RGB(240,169,151), RGB(238,101,35) };
  36. //画按钮
  37. //void DlgDrawButton2(HWND hWnd, HDC hdc, RECT rt, UINT iType, BOOL bActive, BOOL bAble, BOOL bMouseOn)
  38. //句柄、句柄、区域、类型、状态、有效
  39. void DlgDrawButton2(HWND hWnd, HDC hdc, RECT rt, UINT iType, UINT nState, BOOL bAble)
  40. {
  41. RECT rttmp;
  42. // HPEN hPen;
  43. COLORREF colors[4];
  44. COLORREF Pencolor=RGB(255,255,255);
  45. HANDLE hHandle;
  46. //画按钮边框
  47. // pen.CreatePen(PS_SOLID, 1, Pencolor);
  48. hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 1, Pencolor));
  49. // DeleteObject(SelectObject(hDC,(HGDIOBJ) hHandle));
  50. // ::SelectObject(hdc, pen.m_hObject);
  51. ::MoveToEx(hdc, rt.left+1, rt.top, NULL);
  52. ::LineTo(hdc, rt.right, rt.top);
  53. ::MoveToEx(hdc, rt.right, rt.top+1, NULL);
  54. ::LineTo(hdc, rt.right, rt.bottom);
  55. ::MoveToEx(hdc, rt.right-1, rt.bottom, NULL);
  56. ::LineTo(hdc, rt.left, rt.bottom);
  57. ::MoveToEx(hdc, rt.left, rt.bottom-1, NULL);
  58. ::LineTo(hdc, rt.left, rt.top);
  59. //给按钮填充平滑颜色
  60. if ( iType == 0 ) //EXIT
  61. {
  62. if (nState == StateFocus)
  63. {
  64. colors[0]=ExitBTColorMsOn[0];
  65. colors[1]=ExitBTColorMsOn[1];
  66. colors[2]=ExitBTColorMsOn[1];
  67. colors[3]=ExitBTColorMsOn[1];
  68. }
  69. else if(nState == StateDown)
  70. {
  71. colors[0]=ExitBTColor[0];
  72. colors[1]=ExitBTColor[1];
  73. colors[2]=ExitBTColor[1];
  74. colors[3]=ExitBTColor[1];
  75. }
  76. else
  77. {
  78. colors[0]=ExitBTColorAct[0];
  79. colors[1]=ExitBTColorAct[1];
  80. colors[2]=ExitBTColorAct[1];
  81. colors[3]=ExitBTColorAct[1];
  82. }
  83. }
  84. else //其它
  85. {
  86. if (nState == StateFocus)
  87. {
  88. colors[0]=MinMaxBTColorMsOn[0];
  89. colors[1]=MinMaxBTColorMsOn[1];
  90. colors[2]=MinMaxBTColorMsOn[1];
  91. colors[3]=MinMaxBTColorMsOn[1];
  92. }
  93. else if(nState == StateDown)
  94. {
  95. colors[0]=MinMaxBTColor[0];
  96. colors[1]=MinMaxBTColor[1];
  97. colors[2]=MinMaxBTColor[1];
  98. colors[3]=MinMaxBTColor[1];
  99. }
  100. else
  101. {
  102. colors[0]=MinMaxBTColorAct[0];
  103. colors[1]=MinMaxBTColorAct[1];
  104. colors[2]=MinMaxBTColorAct[1];
  105. colors[3]=MinMaxBTColorAct[1];
  106. }
  107. }
  108. SetRect(&rttmp, rt.left+1, rt.top+1, rt.right, rt.bottom);
  109. GradientRectXP2( hdc, rttmp, colors, GRADIENT_FILL_TRIANGLE );
  110. Pencolor = bAble? RGB(255,255,255):RGB(200,200,200);
  111. //画按扭内部图型
  112. DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
  113. switch( iType )
  114. {
  115. case 0:
  116. hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 2, Pencolor));
  117. // pen.DeleteObject();
  118. // pen.CreatePen(PS_SOLID, 2, Pencolor);
  119. // ::SelectObject(hdc, pen.m_hObject);
  120. ::MoveToEx(hdc, rt.left+4, rt.top+4, NULL);
  121. ::LineTo(hdc, rt.right-4, rt.bottom-4);
  122. ::MoveToEx(hdc, rt.right-4, rt.top+4, NULL);
  123. ::LineTo(hdc, rt.left+4, rt.bottom-4);
  124. DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
  125. break;
  126. case 1: //MAX
  127. hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 1, Pencolor));
  128. // pen.DeleteObject();
  129. // pen.CreatePen(PS_SOLID, 1, Pencolor);
  130. // ::SelectObject(hdc, pen.m_hObject);
  131. ::MoveToEx(hdc, rt.left+3, rt.top+4, NULL);
  132. ::LineTo(hdc, rt.right-3, rt.top+4);
  133. ::MoveToEx(hdc, rt.left+3, rt.top+5, NULL);
  134. ::LineTo(hdc, rt.right-4, rt.top+5);
  135. ::LineTo(hdc, rt.right-4, rt.bottom-4);
  136. ::LineTo(hdc, rt.left+3, rt.bottom-4);
  137. ::LineTo(hdc, rt.left+3, rt.top+5);
  138. DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
  139. break;
  140. case 2: //RESTORE
  141. hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 1, Pencolor));
  142. // pen.DeleteObject();
  143. // pen.CreatePen(PS_SOLID, 1, Pencolor);
  144. // ::SelectObject(hdc, pen.m_hObject);
  145. ::MoveToEx(hdc, rt.left+6, rt.top+4, NULL);
  146. ::LineTo(hdc, rt.right-4, rt.top+4);
  147. ::LineTo(hdc, rt.right-4, rt.bottom-6);
  148. ::LineTo(hdc, rt.left+6, rt.bottom-6);
  149. ::LineTo(hdc, rt.left+6, rt.top+4);
  150. ::MoveToEx(hdc, rt.left+4, rt.top+6, NULL);
  151. ::LineTo(hdc, rt.right-6, rt.top+6);
  152. ::LineTo(hdc, rt.right-6, rt.bottom-4);
  153. ::LineTo(hdc, rt.left+4, rt.bottom-4);
  154. ::LineTo(hdc, rt.left+4, rt.top+6);
  155. DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
  156. break;
  157. case 3: //MIN
  158. hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 2, Pencolor));
  159. // pen.DeleteObject();
  160. // pen.CreatePen(PS_SOLID,2,Pencolor);
  161. // ::SelectObject(hdc, HPEN(pen));
  162. ::MoveToEx(hdc, rt.left+3, rt.bottom-5, NULL);
  163. ::LineTo(hdc, rt.right-6, rt.bottom-5);
  164. DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
  165. break;
  166. case 4: //HELP
  167. ::SetTextColor(hdc, RGB(255,255,255));
  168. ::SetBkMode(hdc, TRANSPARENT);
  169. rttmp = rt;
  170. ::DrawText(hdc, "?", 1, &rttmp, DT_VCENTER|DT_CENTER);
  171. break;
  172. default:break;
  173. }
  174. }
  175. ///////////////////////////////////////////////////////////
  176. void DlgDrawHelpButton(HWND hWnd,HDC hDC, RECT Rect)
  177. {
  178. static COLORREF s_crGradientXP[][4] =
  179. {
  180. {0x00C1CCD1, 0x00C1CCD1, 0x00EEF1F2, 0xFFEEF1F2},
  181. {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
  182. {0x00BDCBD6, 0x00C6CFD6, 0x00EFF3F7, 0xFFEFF3F7},
  183. {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
  184. {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
  185. };
  186. DWORD dwStyle ;
  187. int nWidth;
  188. RECT rc;
  189. dwStyle = GetWindowLong(hWnd, GWL_STYLE);
  190. if (!(dwStyle & WS_SYSMENU)) return;
  191. if (!(dwStyle & WS_EX_CONTEXTHELP))return;
  192. nWidth = Rect.bottom - Rect.top - 3;
  193. rc.top = Rect.top ;
  194. rc.bottom = rc.top + nWidth;
  195. if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
  196. {
  197. rc.left = Rect.right - 4*(nWidth + 2);
  198. rc.right = rc.left + nWidth;
  199. }
  200. else
  201. {
  202. rc.left = Rect.right - 2*(nWidth + 2);
  203. rc.right = rc.left + nWidth;
  204. }
  205. DlgDrawButton2(hWnd,hDC, rc, 4, StateFocus, TRUE);
  206. /*
  207. if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
  208. {
  209. rc.left = Rect.right - 4*(nWidth +4) -2;
  210. rc.right = rc.left + nWidth;
  211. GradientRectXP(hDC, &rc, s_crGradientXP[2]);
  212. RoundRect(hDC, rc.left-2, rc.top -2,
  213. rc.right +2, rc.bottom +2, 4,4);
  214. }
  215. ::SetTextColor(hDC, RGB(255,255,255));
  216. ::SetBkMode(hDC, TRANSPARENT);
  217. ::DrawText(hDC, "~", 1, &rc, DT_VCENTER|DT_CENTER);
  218. */
  219. }
  220. ///////////////////////////////////////////////////////////
  221. void DlgDrawExitButton(HWND hWnd,HDC hDC, RECT Rect, int iState)
  222. {
  223. /* static COLORREF s_crGradientXP[][4] =
  224. {
  225. {RGB(180,155,185), RGB(175,102,115), RGB(175,102,115), RGB(175,102,115)},
  226. {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
  227. {RGB(240,169,151), RGB(228,61,5), RGB(228,61,5), RGB(228,61,5)},
  228. {RGB(240,169,151), RGB(238,101,35), RGB(238,101,35), RGB(238,101,35)},
  229. {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
  230. };
  231. */
  232. DWORD dwStyle ;
  233. int nWidth;
  234. RECT rc;
  235. dwStyle = GetWindowLong(hWnd, GWL_STYLE);
  236. if(!(dwStyle & WS_SYSMENU)) return;
  237. nWidth = Rect.bottom - Rect.top - 3;
  238. rc.top = Rect.top ;
  239. rc.bottom = rc.top + nWidth;
  240. rc.left = Rect.right - (nWidth+ 2);
  241. rc.right = rc.left + nWidth;
  242. DlgDrawButton2(hWnd,hDC, rc, 0, iState, TRUE);
  243. /* rc.left = Rect.right - (nWidth+ 4);
  244. rc.right = rc.left + nWidth;
  245. GradientRectXP(hDC, &rc, s_crGradientXP[iState]);
  246. MoveToEx(hDC, rc.left + 3, rc.top + 3, NULL);
  247. LineTo(hDC, rc.right - 3, rc.bottom - 3);
  248. MoveToEx(hDC, rc.right - 3, rc.top + 3, NULL);
  249. LineTo(hDC, rc.left + 3, rc.bottom - 3);
  250. RoundRect(hDC, rc.left-2, rc.top -2,
  251. rc.right +2, rc.bottom +2, 4,4);
  252. */
  253. // }
  254. }
  255. ///////////////////////////////////////////////////////////
  256. void DlgDrawMinButton(HWND hWnd, HDC hDC, RECT Rect, int iState)
  257. {
  258. /* static COLORREF s_crGradientXP[][4] =
  259. {
  260. {0x00C1CCD1, 0x00C1CCD1, 0x00EEF1F2, 0xFFEEF1F2},
  261. {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
  262. {0x00BDCBD6, 0x00C6CFD6, 0x00EFF3F7, 0xFFEFF3F7},
  263. {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
  264. {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
  265. };
  266. DWORD dwStyle ;
  267. int nWidth;
  268. RECT rc;
  269. dwStyle = GetWindowLong(hWnd, GWL_STYLE);
  270. nWidth = Rect.bottom - Rect.top - 8;
  271. rc.top = Rect.top +4;
  272. rc.bottom = rc.top + nWidth;
  273. //重画最小化button
  274. if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
  275. {
  276. rc.left = Rect.right - 3*(nWidth +4) -2;
  277. rc.right = rc.left + nWidth;
  278. GradientRectXP(hDC, &rc, s_crGradientXP[iState]);
  279. MoveToEx(hDC, rc.left + 4, rc.bottom - 4, NULL);
  280. LineTo(hDC, rc.right - 4, rc.bottom - 4);
  281. MoveToEx(hDC, rc.left + 4, rc.bottom - 5, NULL);
  282. LineTo(hDC, rc.right -
  283. 4, rc.bottom - 5);
  284. RoundRect(hDC, rc.left-2, rc.top -2,
  285. rc.right +2, rc.bottom +2, 4,4);
  286. }
  287. */
  288. DWORD dwStyle ;
  289. int nWidth;
  290. RECT rc;
  291. dwStyle = GetWindowLong(hWnd, GWL_STYLE);
  292. if(!(dwStyle & WS_SYSMENU)) return;
  293. //重画最大化/恢复button
  294. if(dwStyle & WS_MINIMIZEBOX)
  295. {
  296. nWidth = Rect.bottom - Rect.top - 3;
  297. rc.top = Rect.top;
  298. rc.bottom = rc.top + nWidth;
  299. rc.left = Rect.right - 3*(nWidth+2) ;
  300. rc.right = rc.left + nWidth;
  301. DlgDrawButton2(hWnd,hDC, rc, 3, iState, dwStyle & WS_MINIMIZEBOX);
  302. }
  303. }
  304. ///////////////////////////////////////////////////////////
  305. void DlgDrawMaxButton(HWND hWnd,HDC hDC, RECT Rect, int iState)
  306. {
  307. /* static COLORREF s_crGradientXP[][4] =
  308. {
  309. {0x00C1CCD1, 0x00C1CCD1, 0x00EEF1F2, 0xFFEEF1F2},
  310. {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
  311. {0x00BDCBD6, 0x00C6CFD6, 0x00EFF3F7, 0xFFEFF3F7},
  312. {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
  313. {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
  314. };
  315. DWORD dwStyle ;
  316. int nWidth;
  317. RECT rc;
  318. dwStyle = GetWindowLong(hWnd, GWL_STYLE);
  319. nWidth = Rect.bottom - Rect.top - 8;
  320. rc.top = Rect.top +4;
  321. rc.bottom = rc.top + nWidth;
  322. //重画最大化/恢复button
  323. if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
  324. {
  325. rc.left = Rect.right - 2*(nWidth + 4) - 1;
  326. rc.right = rc.left + nWidth;
  327. GradientRectXP(hDC, &rc, s_crGradientXP[iState]);
  328. MoveToEx(hDC, rc.left + 2, rc.top + 5, NULL);
  329. LineTo(hDC, rc.left + 9, rc.top + 5);
  330. MoveToEx(hDC, rc.left + 5, rc.top + 2, NULL);
  331. LineTo(hDC, rc.left + 5, rc.top + 9);
  332. RoundRect(hDC, rc.left-2, rc.top -2,
  333. rc.right +2, rc.bottom +2, 4,4);
  334. }
  335. */
  336. DWORD dwStyle ;
  337. int nWidth;
  338. RECT rc;
  339. dwStyle = GetWindowLong(hWnd, GWL_STYLE);
  340. if(!(dwStyle & WS_SYSMENU)) return;
  341. //重画最大化/恢复button
  342. if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
  343. {
  344. nWidth = Rect.bottom - Rect.top - 3;
  345. rc.top = Rect.top;
  346. rc.bottom = rc.top + nWidth;
  347. rc.left = Rect.right - 2*(nWidth+2) ;
  348. rc.right = rc.left + nWidth;
  349. if (IsZoomed(hWnd) ) //没有最大化
  350. DlgDrawButton2(hWnd,hDC, rc, 1, iState, dwStyle & WS_MAXIMIZEBOX);
  351. else
  352. DlgDrawButton2(hWnd,hDC, rc, 2, iState, dwStyle & WS_MAXIMIZEBOX);
  353. }
  354. }
  355. //画菜单按钮
  356. BOOL DlgDrawTitleBarButtons(PCLASSXP pCxp, HDC hDC)
  357. {
  358. // int iExit = 0, iMax = 0, iMin = 0;
  359. // HANDLE hHandle, hOldBrush;
  360. //取得标题栏的位置
  361. RECT Rect, rc;
  362. GetWindowRect(pCxp->hWnd, &rc);
  363. Rect.left = GetSystemMetrics(SM_CXDLGFRAME);
  364. Rect.top = GetSystemMetrics(SM_CYDLGFRAME);
  365. Rect.right = rc.right - rc.left - GetSystemMetrics(SM_CXDLGFRAME);
  366. Rect.bottom = Rect.top + GetSystemMetrics(SM_CYCAPTION);
  367. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  368. //画标题栏按扭
  369. DWORD dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
  370. /*
  371. if(pDlg->m_ExitButtonState == StateNormal)
  372. {
  373. iExit = 2;
  374. }
  375. else if(pDlg->m_ExitButtonState == StateDown)
  376. {
  377. iExit = 0;
  378. }
  379. else if(pDlg->m_ExitButtonState == StateFocus)
  380. {
  381. iExit = 3;
  382. }
  383. if(WS_MAXIMIZEBOX & dwStyle) //最大化按钮
  384. {
  385. if(IsZoomed(pCxp->hWnd))//最大化
  386. {
  387. if(pDlg->m_MaximizeButtonState == StateNormal)
  388. {
  389. iMax = 2;
  390. }
  391. else if(pDlg->m_MaximizeButtonState == StateDown)
  392. {
  393. iMax = 0;
  394. }
  395. else if(pDlg->m_MaximizeButtonState == StateFocus)
  396. {
  397. iMax = 3;
  398. }
  399. }
  400. else
  401. {
  402. if(pDlg->m_MaximizeButtonState == StateNormal)
  403. {
  404. iMax = 2;
  405. }
  406. else if(pDlg->m_MaximizeButtonState == StateDown)
  407. {
  408. iMax = 0;
  409. }
  410. else if(pDlg->m_MaximizeButtonState == StateFocus)
  411. {
  412. iMax = 3;
  413. }
  414. }
  415. }
  416. else if(WS_MINIMIZEBOX & dwStyle) //最小化按钮
  417. {
  418. if(IsZoomed(pCxp->hWnd))//最大化
  419. {
  420. iMin = 4;
  421. }
  422. else
  423. {
  424. iMax = 4;
  425. }
  426. }
  427. if(WS_MINIMIZEBOX & dwStyle) //最小化按钮
  428. {
  429. if(pDlg->m_MinimizeButtonState == StateNormal)
  430. {
  431. iMin = 2;
  432. }
  433. else if(pDlg->m_MinimizeButtonState == StateDown)
  434. {
  435. iMin = 0;
  436. }
  437. else if(pDlg->m_MinimizeButtonState == StateFocus)
  438. {
  439. iMin = 3;
  440. }
  441. }
  442. else if(WS_MAXIMIZEBOX & dwStyle)//最大化按钮
  443. {
  444. iMin = 4;
  445. }
  446. //重画关闭button
  447. */
  448. DlgDrawExitButton(pCxp->hWnd,hDC, Rect, pDlg->m_ExitButtonState);
  449. DlgDrawMinButton(pCxp->hWnd,hDC, Rect, pDlg->m_MinimizeButtonState);
  450. DlgDrawMaxButton(pCxp->hWnd,hDC, Rect, pDlg->m_MaximizeButtonState);
  451. DlgDrawHelpButton(pCxp->hWnd,hDC, Rect);//, pDlg->m_ExitButtonState);
  452. return TRUE;
  453. }
  454. ////////////////////////////////////////////////////////////////////////////////////////////////////
  455. // 绘制弹出窗口
  456. LRESULT DlgOnNcPaint(PCLASSXP pCxp, WPARAM wParam)
  457. {
  458. RECT Rect;
  459. // MEMDCXP Mdcxp;
  460. HDC hDC;
  461. HRGN hRgn = NULL;
  462. GetWindowRect(pCxp->hWnd, &Rect);
  463. // 获取内存兼容设备场景
  464. /* Mdcxp.hWnd = pCxp->hWnd;
  465. Mdcxp.bTransfer = FALSE;
  466. Mdcxp.hBitmap = NULL;
  467. GetMemDCXP(&Mdcxp);
  468. hDC = Mdcxp.hMemDC;
  469. */
  470. hDC = GetWindowDC(pCxp->hWnd);
  471. HRGN hRgn2;
  472. if(wParam != 1)
  473. {
  474. hRgn = (HRGN)wParam;
  475. }
  476. if(hRgn != NULL)
  477. {
  478. SelectClipRgn(hDC, hRgn);
  479. OffsetClipRgn(hDC,0 - Rect.left,0 - Rect.top);
  480. }
  481. Rect.right -= Rect.left;
  482. Rect.bottom -= Rect.top;
  483. Rect.left = Rect.top = 0;
  484. if (!pCxp->hRgn)
  485. {
  486. if(!IsZoomed(pCxp->hWnd))
  487. {
  488. // pCxp->hRgn = CreateRoundRectRgn(0,0,Rect.right ,Rect.bottom,10,10);
  489. pCxp->hRgn = CreateRoundRectRgn(0,0,Rect.right+1 ,Rect.bottom,16,16);
  490. hRgn2 = CreateRectRgn(Rect.left,Rect.bottom-10,Rect.right ,Rect.bottom);
  491. CombineRgn(pCxp->hRgn, pCxp->hRgn, hRgn2, RGN_OR);
  492. SetWindowRgn(pCxp->hWnd, pCxp->hRgn,TRUE); // set window region to make rounded window
  493. }
  494. }
  495. DlgDrawFrameBorder(pCxp, (WPARAM)hDC, hRgn);
  496. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  497. //输出
  498. // Mdcxp.bTransfer = TRUE;
  499. // ReleaseMemDCXP(&Mdcxp);
  500. if(hRgn != NULL)
  501. {
  502. SelectClipRgn(hDC,NULL);
  503. DeleteObject(hRgn);
  504. }
  505. ReleaseDC(pCxp->hWnd,hDC);
  506. return FALSE;
  507. }
  508. LRESULT DlgOnNcActive(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
  509. {
  510. HDC hDC;
  511. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  512. pCxp->dwState |= CXPS_FOCUS;
  513. hDC = GetWindowDC(pCxp->hWnd);
  514. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  515. ReleaseDC(pCxp->hWnd, hDC);
  516. return TRUE;
  517. }
  518. LRESULT DlgOnActive(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
  519. {
  520. LRESULT result = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_ACTIVATE, wParam, lParam);
  521. // PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData ;
  522. if(wParam == WA_INACTIVE)
  523. pCxp->dwState &= ~CXPS_FOCUS;
  524. else
  525. pCxp->dwState |= CXPS_FOCUS;
  526. DlgOnNcPaint(pCxp,1);
  527. return result;
  528. }
  529. // Dialog 消息处理程序
  530. BOOL DlgDrawFrameBorder(PCLASSXP pCxp, WPARAM wParam, HRGN hRgn)
  531. {
  532. COLORREF colors[2];
  533. RECT Rect, rc;
  534. HANDLE hHandle,hHandle2, hHandle3;
  535. int nWidth, nHeight;
  536. BOOL bNcActive;
  537. /* static COLORREF s_crGradientXP[][4] =
  538. {
  539. {0x00FF900B, 0x00FF900B,0x00F7CBAD, 0x00FF350B },
  540. {0x00D6DFDE, 0x00EFF3F7, 0x00EFF3F7, 0x00FFFFFF},
  541. {0x00FBFCFC, 0x00FBFCFC, 0x00E6EBEC, 0xFFE6EBEC},
  542. {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
  543. {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
  544. {0x00DEE3E7, 0x00E7E7E7, 0x00DEE3E7, 0xFFDEE3E7},
  545. {0x00FBFCFC, 0x00FBFCFC, 0x00E6EBEC, 0xFFE6EBEC},
  546. };
  547. */
  548. HDC hDC = (HDC)wParam;
  549. HRGN hRgn2;
  550. GetWindowRect(pCxp->hWnd, &Rect);
  551. Rect.right -= Rect.left;
  552. Rect.bottom -= Rect.top;
  553. Rect.left = Rect.top = 0;
  554. nWidth = GetSystemMetrics(SM_CXDLGFRAME);
  555. nHeight =GetSystemMetrics(SM_CYDLGFRAME);
  556. if (!pCxp->hRgn && !IsZoomed(pCxp->hWnd))
  557. {
  558. pCxp->hRgn = CreateRoundRectRgn(0,0,Rect.right+1 ,Rect.bottom,16,16);
  559. hRgn2 = CreateRectRgn(Rect.left,Rect.bottom - 10,Rect.right-1 ,Rect.bottom);
  560. CombineRgn(pCxp->hRgn, pCxp->hRgn, hRgn2, RGN_OR);
  561. SetWindowRgn(pCxp->hWnd, pCxp->hRgn,FALSE); // set window region to make rounded window
  562. }
  563. if (pCxp->dwState & CXPS_FOCUS)
  564. bNcActive = TRUE;
  565. else
  566. bNcActive = FALSE;
  567. //left border
  568. colors[0]=bNcActive? WndColor[1]:WndColorUnAct[1];
  569. colors[1]=bNcActive? WndColor[4]:WndColorUnAct[4];
  570. hHandle = CreateSolidBrush(colors[0]);
  571. hHandle3 = CreateSolidBrush(colors[1]);
  572. rc = Rect;
  573. rc.right = Rect.left + nWidth-1;
  574. FillRect(hDC, &rc,(HBRUSH) hHandle);
  575. rc.left = nWidth-1;
  576. rc.right = nWidth;
  577. FillRect(hDC, &rc,(HBRUSH) hHandle3);
  578. //other
  579. colors[1]=bNcActive? WndColor[0]:WndColorUnAct[0];
  580. hHandle2 = CreateSolidBrush(colors[1]);
  581. //top
  582. rc = Rect;
  583. rc.bottom = Rect.top + nHeight;
  584. FillRect(hDC, &rc,(HBRUSH) hHandle2);
  585. //right border
  586. rc = Rect;
  587. rc.left = Rect.right - nWidth;
  588. FillRect(hDC, &rc,(HBRUSH) hHandle2);
  589. //bottom
  590. rc = Rect;
  591. rc.top = Rect.bottom - nHeight;
  592. FillRect(hDC, &rc,(HBRUSH) hHandle2);
  593. DeleteObject(hHandle);
  594. DeleteObject(hHandle2);
  595. DeleteObject(hHandle3);
  596. return TRUE;
  597. }
  598. ////////////////////////////////////////
  599. //画标题栏2
  600. //BOOL DlgDrawTitleBar(HWND hWnd, HDC hdc, CRect &rt, BOOL bNcActive)
  601. BOOL DlgDrawTitleBar(PCLASSXP pCxp, WPARAM wParam)
  602. {
  603. RECT Rect, rt, rt2;
  604. char szTemp[256];
  605. HANDLE hHandle;
  606. HDC hDC;
  607. HICON hIcon;
  608. COLORREF colors[4];
  609. BOOL bNcActive;
  610. int XofText, mid,windowStyle;
  611. if (pCxp->dwState & CXPS_FOCUS)
  612. bNcActive = TRUE;
  613. else
  614. bNcActive = FALSE;
  615. hDC = (HDC)wParam;
  616. //取得标题栏的位置
  617. DWORD style =GetWindowLong(pCxp->hWnd, GWL_STYLE);
  618. if(!(style & WS_CAPTION)) return TRUE;
  619. // 获取窗口大小
  620. GetWindowRect(pCxp->hWnd, &Rect);
  621. Rect.right -= Rect.left;
  622. Rect.bottom -= Rect.top;
  623. Rect.left = Rect.top = 0;
  624. rt = Rect;
  625. //计算标题大小
  626. rt.left += GetSystemMetrics(SM_CXDLGFRAME);
  627. rt.right -= GetSystemMetrics(SM_CYDLGFRAME);
  628. rt.top += GetSystemMetrics(SM_CYDLGFRAME);
  629. rt.bottom = rt.top + GetSystemMetrics(SM_CYCAPTION);
  630. //填两角的底色
  631. colors[0]=bNcActive? WndColor[1]:WndColorUnAct[1];
  632. hHandle = CreateSolidBrush(colors[0]);
  633. rt2 = rt; rt2.right = rt.left + 10;
  634. FillRect(hDC,&rt, (HBRUSH)hHandle);
  635. rt2 = rt; rt2.left = rt.right - 10;
  636. FillRect(hDC,&rt, (HBRUSH)hHandle);
  637. DeleteObject(hHandle);
  638. colors[0]=bNcActive? WndColor[1]:WndColorUnAct[1];
  639. colors[1]=bNcActive? WndColor[4]:WndColorUnAct[4];
  640. Rect.left = 5; Rect.top = 0; Rect.right = rt.right; Rect.bottom = rt.bottom - 4;
  641. GradientRectXP2(hDC, Rect, colors, GRADIENT_FILL_RECT_V);
  642. colors[0]=bNcActive? WndColor[3]:WndColorUnAct[3];
  643. colors[1]=bNcActive? WndColor[1]:WndColorUnAct[1];
  644. Rect.left = 2; Rect.top = 1; Rect.right = rt.right; Rect.bottom = 5;
  645. GradientRectXP2(hDC, Rect, colors, GRADIENT_FILL_RECT_V);
  646. // GradientFill(hDC, CRect(2, 1, rt.right-4, 5), colors, GRADIENT_FILL_RECT_V);
  647. colors[0]=bNcActive? WndColor[4]:WndColorUnAct[4];
  648. colors[1]=bNcActive? WndColor[1]:WndColorUnAct[1];
  649. Rect.left = 5; Rect.top = rt.bottom-4; Rect.right = rt.right; Rect.bottom = rt.bottom;
  650. GradientRectXP2(hDC, Rect, colors, GRADIENT_FILL_RECT_V);
  651. // GradientFill(hDC, CRect(0, rt.bottom-4, rt.right, rt.bottom), colors, GRADIENT_FILL_RECT_V);
  652. XofText=4; //标题栏上文字的启始位置
  653. mid=(rt.bottom-rt.top)/2;
  654. windowStyle=GetWindowLong(pCxp->hWnd, GWL_STYLE);
  655. if ( windowStyle & WS_SYSMENU )
  656. {
  657. hIcon=(HICON)::SendMessage(pCxp->hWnd, WM_QUERYDRAGICON, 0, 0);
  658. if ( hIcon != NULL )
  659. {
  660. //画小图标,并将文字启始位置右移
  661. ::DrawIconEx(hDC, 5, mid-6, hIcon, 16, 16, 0, NULL, DI_NORMAL);
  662. XofText += 3+16;
  663. }
  664. }
  665. //画标题栏文字
  666. if (GetWindowText(pCxp->hWnd, szTemp, sizeof(szTemp)))
  667. {
  668. SetTextColor(hDC, RGB(255,255,255));
  669. SetBkMode(hDC,TRANSPARENT);
  670. hHandle = (HANDLE) SelectObject(hDC,
  671. (HGDIOBJ) SendMessage(pCxp->hWnd, WM_GETFONT, 0, 0));
  672. rt.left += XofText;
  673. DrawText(hDC, szTemp, -1, &rt, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
  674. SelectObject(hDC, (HGDIOBJ) hHandle);
  675. }
  676. //画标题按钮
  677. DlgDrawTitleBarButtons(pCxp,hDC);
  678. return TRUE;
  679. }
  680. ////////////////////////
  681. //画标题1
  682. /*
  683. BOOL DlgDrawTitleBar(PCLASSXP pCxp, WPARAM wParam)
  684. {
  685. RECT Rect, rc;
  686. char szTemp[256];
  687. HANDLE hHandle;
  688. HDC hDC;
  689. // MEMDCXP Mdcxp;
  690. static COLORREF s_crGradientXP[][4] =
  691. {
  692. {0x00FF900B, 0x00FF900B,0x00F7CBAD, 0x00FF350B },
  693. {0x00FFFFFF, 0x00FFFFFF,0x00FF900B, 0x00FF900B }
  694. };
  695. // 获取内存兼容设备场景
  696. // Mdcxp.hWnd = pCxp->hWnd;
  697. // Mdcxp.bTransfer = FALSE;
  698. // Mdcxp.hBitmap = NULL;
  699. // GetMemDCXP(&Mdcxp);
  700. // hDC = Mdcxp.hMemDC;
  701. hDC = (HDC)wParam;
  702. //取得标题栏的位置
  703. DWORD style =GetWindowLong(pCxp->hWnd, GWL_STYLE);
  704. if((style & WS_CAPTION) != WS_CAPTION) return TRUE;
  705. // 获取窗口大小
  706. GetWindowRect(pCxp->hWnd, &Rect);
  707. Rect.right -= Rect.left;
  708. Rect.bottom -= Rect.top;
  709. Rect.left = Rect.top = 0;
  710. rc = Rect;
  711. //计算标题大小
  712. rc.left += GetSystemMetrics(SM_CXDLGFRAME);
  713. rc.right -= GetSystemMetrics(SM_CYDLGFRAME);
  714. rc.top += GetSystemMetrics(SM_CYDLGFRAME);
  715. rc.bottom = rc.top + GetSystemMetrics(SM_CYCAPTION);
  716. //画标题
  717. hHandle = CreateSolidBrush(0x00FF350B);
  718. FillRect(hDC,&rc, (HBRUSH)hHandle);
  719. DeleteObject(hHandle);
  720. if (pCxp->dwState & CXPS_FOCUS)
  721. GradientRectXP(hDC, &rc, s_crGradientXP[0]);
  722. else
  723. GradientRectXP(hDC, &rc, s_crGradientXP[1]);
  724. //画图标
  725. HICON hIcon = (HICON)SendMessage(pCxp->hWnd,WM_GETICON,ICON_SMALL,0);
  726. if (hIcon)
  727. {
  728. DrawIconEx(hDC,rc.left+6,rc.top+2,hIcon,16,16,0,NULL,DI_NORMAL);
  729. rc.left += 18;
  730. }
  731. //画标题栏文字
  732. if (GetWindowText(pCxp->hWnd, szTemp, sizeof(szTemp)))
  733. {
  734. SetTextColor(hDC, 0x000000);
  735. SetBkMode(hDC,TRANSPARENT);
  736. hHandle = (HANDLE) SelectObject(hDC,
  737. (HGDIOBJ) SendMessage(pCxp->hWnd, WM_GETFONT, 0, 0));
  738. DrawText(hDC, szTemp, -1, &rc, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
  739. SelectObject(hDC, (HGDIOBJ) hHandle);
  740. }
  741. //画标题按钮
  742. DlgDrawTitleBarButtons(pCxp,hDC);
  743. //输出
  744. // Mdcxp.bTransfer = TRUE;
  745. // ReleaseMemDCXP(&Mdcxp);
  746. return TRUE;
  747. }
  748. */
  749. LRESULT DlgOnEraseBackGround(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
  750. {
  751. RECT Rect;
  752. HANDLE hHandle;//, hPen; //保存原来设备句柄
  753. HDC hDC;
  754. hDC = (HDC)wParam; //有效区域的句柄
  755. //客户区域
  756. GetClientRect(pCxp->hWnd, &Rect);
  757. Rect.right -= Rect.left;
  758. Rect.bottom -= Rect.top;
  759. // Rect.left = Rect.top = 0;
  760. //画客户区
  761. // if (pCxp->dwState & CXPS_FOCUS)
  762. // hHandle = CreateSolidBrush(WndColor[1]);
  763. // else
  764. // hHandle = CreateSolidBrush(WndColorUnAct[1]);
  765. //left border
  766. // FillRect(hDC,&Rect,(HBRUSH)hHandle);
  767. // DeleteObject(hHandle);
  768. // hHandle = SelectObject(hDC,CreateSolidBrush(0x00FFFFFF));
  769. // hHandle = SelectObject(hDC,CreateSolidBrush(g_crDialogbkColor));
  770. // RoundRect(hDC, Rect.left+2, Rect.top+2,
  771. // Rect.right-2 , Rect.bottom-10 , 8,8);
  772. // DeleteObject(SelectObject(hDC, (HGDIOBJ) hHandle));
  773. /* hHandle = SelectObject(hDC,CreateSolidBrush(g_crDialogbkColor));
  774. RoundRect(hDC, Rect.left, Rect.top,
  775. Rect.right , Rect.bottom , 4,4);
  776. DeleteObject(SelectObject(hDC, (HGDIOBJ) hHandle));
  777. hPen = CreatePen( PS_SOLID, 0, RGB(0, 0, 0) ); // 圆角矩形(4,4)
  778. hHandle = SelectObject(hDC, hPen);
  779. Rectangle(hDC, Rect.left, Rect.top ,
  780. Rect.right , Rect.bottom );
  781. DeleteObject(SelectObject(hDC, hHandle));
  782. */
  783. hHandle = SelectObject(hDC,CreateSolidBrush(g_crDialogbkColor));
  784. FillRect(hDC, &Rect,(HBRUSH) hHandle);
  785. DeleteObject(SelectObject(hDC, (HGDIOBJ) hHandle));
  786. return true;
  787. }
  788. LRESULT DlgOnNodify(PCLASSXP pCxp,WPARAM wParam, LPARAM lParam)
  789. {
  790. LRESULT nRet = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_NOTIFY, wParam, lParam);
  791. /* HDC hDC = GetWindowDC(pCxp->hWnd);
  792. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  793. ReleaseDC(pCxp->hWnd, hDC);
  794. */
  795. return nRet;
  796. }
  797. LRESULT DlgOnActiveApp(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
  798. {
  799. // LRESULT result = CDialog::WindowProc(WM_ACTIVATEAPP,wParam,lParam);
  800. LRESULT result = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_ACTIVATEAPP, wParam, lParam);
  801. if (wParam)
  802. pCxp->dwState |= CXPS_FOCUS;
  803. else
  804. pCxp->dwState &= ~CXPS_FOCUS;
  805. return 0;
  806. }
  807. LRESULT DlgOnSetText(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
  808. {
  809. LRESULT nRet = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_SETTEXT, wParam, lParam);
  810. HDC hDC = GetWindowDC(pCxp->hWnd);
  811. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  812. ReleaseDC(pCxp->hWnd, hDC);
  813. return nRet;
  814. }
  815. LRESULT DlgOnSetIcon(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
  816. {
  817. LRESULT nRet = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_SETICON, wParam, lParam);
  818. HDC hDC;
  819. if(IsWindow(pCxp->hWnd))
  820. {
  821. hDC = GetWindowDC(pCxp->hWnd);
  822. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  823. ReleaseDC(pCxp->hWnd, hDC);
  824. }
  825. return nRet;
  826. }
  827. LRESULT OnNcMouseMove(PCLASSXP pCxp ,WPARAM wParam,LPARAM lParam)
  828. {
  829. LRESULT result = 0;
  830. HDC hDC;
  831. hDC = GetWindowDC(pCxp->hWnd);
  832. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  833. switch(wParam)
  834. {
  835. case HTMAXBUTTON:
  836. if(pDlg->m_NcMouseState == MouseStateNormal)
  837. {
  838. if(pDlg->m_MaximizeButtonState != StateFocus)
  839. {
  840. pDlg->m_MaximizeButtonState = StateFocus;
  841. pDlg->m_MinimizeButtonState = StateNormal;
  842. pDlg->m_ExitButtonState = StateNormal;
  843. DlgDrawTitleBarButtons(pCxp, hDC);
  844. //RTDrawTitleBarButtons(&dc);
  845. }
  846. }
  847. else if(pDlg->m_NcMouseState == MouseStateDown)
  848. {
  849. if(pDlg->m_SelTitleButton == MaximizeButton)
  850. {
  851. if(pDlg->m_MaximizeButtonState != StateDown)
  852. {
  853. pDlg->m_MaximizeButtonState = StateDown;
  854. DlgDrawTitleBarButtons(pCxp, hDC);
  855. // RTDrawTitleBarButtons(&dc);
  856. }
  857. }
  858. else if(pDlg->m_SelTitleButton != NoneButton)
  859. {
  860. pDlg->m_MinimizeButtonState = StateNormal;
  861. pDlg->m_ExitButtonState = StateNormal;
  862. DlgDrawTitleBarButtons(pCxp, hDC);
  863. //RTDrawTitleBarButtons(&dc);
  864. }
  865. }
  866. break;
  867. case HTMINBUTTON:
  868. if(pDlg->m_NcMouseState == MouseStateNormal)
  869. {
  870. if(pDlg->m_MinimizeButtonState != StateFocus)
  871. {
  872. pDlg->m_MinimizeButtonState = StateFocus;
  873. pDlg->m_MaximizeButtonState = StateNormal;
  874. pDlg->m_ExitButtonState = StateNormal;
  875. DlgDrawTitleBarButtons(pCxp, hDC);
  876. //RTDrawTitleBarButtons(&dc);
  877. }
  878. }
  879. else if(pDlg->m_NcMouseState == MouseStateDown)
  880. {
  881. if(pDlg->m_SelTitleButton == MinimizeButton)
  882. {
  883. if(pDlg->m_MinimizeButtonState != StateDown)
  884. {
  885. pDlg->m_MinimizeButtonState = StateDown;
  886. DlgDrawTitleBarButtons(pCxp, hDC);
  887. // RTDrawTitleBarButtons(&dc);
  888. }
  889. }
  890. else if(pDlg->m_SelTitleButton != NoneButton)
  891. {
  892. pDlg->m_MaximizeButtonState = StateNormal;
  893. pDlg->m_ExitButtonState = StateNormal;
  894. DlgDrawTitleBarButtons(pCxp, hDC);
  895. // RTDrawTitleBarButtons(&dc);
  896. }
  897. }
  898. break;
  899. case HTCLOSE:
  900. if(pDlg->m_NcMouseState == MouseStateNormal)
  901. {
  902. if(pDlg->m_ExitButtonState != StateFocus)
  903. {
  904. pDlg->m_ExitButtonState = StateFocus;
  905. pDlg->m_MaximizeButtonState = StateNormal;
  906. pDlg->m_MinimizeButtonState = StateNormal;
  907. DlgDrawTitleBarButtons(pCxp, hDC);
  908. // RTDrawTitleBarButtons(&dc);
  909. }
  910. }
  911. else if(pDlg->m_NcMouseState == MouseStateDown)
  912. {
  913. if(pDlg->m_SelTitleButton == ExitButton)
  914. {
  915. if(pDlg->m_ExitButtonState != StateDown)
  916. {
  917. pDlg->m_ExitButtonState = StateDown;
  918. DlgDrawTitleBarButtons(pCxp, hDC);
  919. // RTDrawTitleBarButtons(&dc);
  920. }
  921. }
  922. else if(pDlg->m_SelTitleButton != NoneButton)
  923. {
  924. pDlg->m_MaximizeButtonState = StateNormal;
  925. pDlg->m_MinimizeButtonState = StateNormal;
  926. DlgDrawTitleBarButtons(pCxp, hDC);
  927. // RTDrawTitleBarButtons(&dc);
  928. }
  929. }
  930. break;
  931. default:
  932. if(pDlg->m_ExitButtonState != StateNormal ||
  933. pDlg->m_MinimizeButtonState != StateNormal ||
  934. pDlg->m_MaximizeButtonState != StateNormal)
  935. {
  936. pDlg->m_MaximizeButtonState = StateNormal;
  937. pDlg->m_MinimizeButtonState = StateNormal;
  938. pDlg->m_ExitButtonState = StateNormal;
  939. DlgDrawTitleBarButtons(pCxp, hDC);
  940. // RTDrawTitleBarButtons(&dc);
  941. }
  942. result = 0;//DefWindowProc(WM_NCMOUSEMOVE,wParam,lParam);
  943. break;
  944. }
  945. ReleaseDC(pCxp->hWnd, hDC);
  946. return result;
  947. }
  948. LRESULT DlgOnNcLMouseDown(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
  949. {
  950. LRESULT result = 0;
  951. DWORD dwStyle;
  952. HDC hDC;
  953. hDC = GetWindowDC(pCxp->hWnd);
  954. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  955. dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
  956. switch(wParam)
  957. {
  958. case HTMAXBUTTON:
  959. if(!(dwStyle & WS_MAXIMIZEBOX))return 0;//break;
  960. pDlg->m_NcMouseState = MouseStateDown;
  961. pDlg->m_SelTitleButton = MaximizeButton;
  962. pDlg->m_MaximizeButtonState = StateDown;
  963. //RTDrawTitleBarButtons(&dc);
  964. DlgDrawTitleBarButtons(pCxp,hDC);
  965. SetCapture(pCxp->hWnd);
  966. /* if(!IsZoomed(pCxp->hWnd))
  967. {
  968. SelectClipRgn(hDC,NULL);
  969. DeleteObject(pCxp->hRgn);
  970. pCxp->hRgn = NULL;
  971. ShowWindow(pCxp->hWnd,SW_SHOWMAXIMIZED);
  972. return TRUE;
  973. }
  974. */
  975. break;
  976. case HTMINBUTTON:
  977. if(!(dwStyle & WS_MINIMIZEBOX)) return 0;//break;
  978. pDlg->m_NcMouseState = MouseStateDown;
  979. pDlg->m_SelTitleButton = MinimizeButton;
  980. pDlg->m_MinimizeButtonState = StateDown;
  981. // RTDrawTitleBarButtons(&dc);
  982. DlgDrawTitleBarButtons(pCxp,hDC);
  983. SetCapture(pCxp->hWnd );
  984. break;
  985. case HTCLOSE:
  986. if(!(dwStyle & WS_SYSMENU)) return 0;//break;
  987. pDlg->m_NcMouseState = MouseStateDown;
  988. pDlg->m_SelTitleButton = ExitButton;
  989. pDlg->m_ExitButtonState = StateDown;
  990. // RTDrawTitleBarButtons(&dc);
  991. DlgDrawTitleBarButtons(pCxp,hDC);
  992. SetCapture(pCxp->hWnd);
  993. break;
  994. default: //移动
  995. //屏闭标题栏,禁止原标题栏重绘
  996. dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
  997. if(!(dwStyle & WS_CAPTION))break;
  998. dwStyle &= ~WS_CAPTION;
  999. SetWindowLong(pCxp->hWnd, GWL_STYLE, dwStyle);
  1000. result =DefWindowProc(pCxp->hWnd,
  1001. WM_NCLBUTTONDOWN, wParam, lParam);
  1002. dwStyle |= WS_CAPTION;
  1003. SetWindowLong(pCxp->hWnd, GWL_STYLE, dwStyle);
  1004. result = 0;
  1005. break;
  1006. }
  1007. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  1008. ReleaseDC(pCxp->hWnd, hDC);
  1009. return result;
  1010. }
  1011. LRESULT DlgOnNcLMouseUp(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
  1012. {
  1013. LRESULT result = 0;
  1014. HDC hDC;
  1015. hDC = GetWindowDC(pCxp->hWnd);
  1016. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  1017. if(pDlg->m_NcMouseState == MouseStateNormal)
  1018. {
  1019. //return CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
  1020. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1021. WM_NCLBUTTONUP, wParam, lParam);
  1022. }
  1023. pDlg->m_NcMouseState = MouseStateNormal;
  1024. ReleaseCapture();
  1025. //ReleaseCapture(pCxp->hWnd);
  1026. if(wParam == HTMAXBUTTON)
  1027. {
  1028. if(pDlg->m_SelTitleButton == MaximizeButton)
  1029. {
  1030. pDlg->m_SelTitleButton = NoneButton;
  1031. pDlg->m_MaximizeButtonState = StateNormal;
  1032. // RTDrawTitleBarButtons(&dc);
  1033. DlgDrawTitleBarButtons(pCxp,hDC);
  1034. if(IsZoomed(pCxp->hWnd))
  1035. {
  1036. SendMessage(pCxp->hWnd,WM_SYSCOMMAND, SC_RESTORE, lParam);
  1037. }
  1038. else
  1039. {
  1040. SendMessage(pCxp->hWnd,WM_SYSCOMMAND, SC_MAXIMIZE,lParam);
  1041. }
  1042. }
  1043. }
  1044. else if(wParam == HTMINBUTTON)
  1045. {
  1046. if(pDlg->m_SelTitleButton == MinimizeButton)
  1047. {
  1048. pDlg->m_SelTitleButton = NoneButton;
  1049. pDlg->m_MinimizeButtonState = StateNormal;
  1050. // RTDrawTitleBarButtons(&dc);
  1051. DlgDrawTitleBarButtons(pCxp,hDC);
  1052. SendMessage(pCxp->hWnd,WM_SYSCOMMAND, SC_MINIMIZE,lParam);
  1053. }
  1054. }
  1055. else if(wParam == HTCLOSE)
  1056. {
  1057. if(pDlg->m_SelTitleButton == ExitButton)
  1058. {
  1059. pDlg->m_SelTitleButton = NoneButton;
  1060. pDlg->m_ExitButtonState = StateNormal;
  1061. // RTDrawTitleBarButtons(&dc);
  1062. DlgDrawTitleBarButtons(pCxp,hDC);
  1063. SendMessage(pCxp->hWnd,WM_CLOSE,0,0);
  1064. }
  1065. }
  1066. else
  1067. {
  1068. pDlg->m_MinimizeButtonState = StateNormal;
  1069. pDlg->m_MaximizeButtonState = StateNormal;
  1070. pDlg->m_ExitButtonState = StateNormal;
  1071. //result = CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
  1072. result = CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1073. WM_NCLBUTTONUP, wParam, lParam);
  1074. }
  1075. ReleaseDC(pCxp->hWnd, hDC);
  1076. return result;
  1077. }
  1078. LRESULT DlgOnLButtonUp(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
  1079. {
  1080. UINT hit;
  1081. RECT rtWnd;
  1082. POINT point;
  1083. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  1084. if(pDlg->m_NcMouseState != MouseStateNormal)
  1085. {
  1086. GetWindowRect(pCxp->hWnd,&rtWnd);
  1087. point.x = LOWORD(lParam);
  1088. point.y = HIWORD(lParam);
  1089. ClientToScreen(pCxp->hWnd,&point);
  1090. //UINT hit = (UINT)CDialog::WindowProc(WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));
  1091. hit = (UINT)CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1092. WM_NCHITTEST,wParam,
  1093. MAKELPARAM(point.x,point.y));
  1094. return DlgOnNcLMouseUp(pCxp, hit,MAKELPARAM(point.x,point.y));
  1095. }
  1096. // return CDialog::WindowProc(WM_LBUTTONUP,wParam,lParam);
  1097. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1098. WM_LBUTTONUP,wParam,lParam);
  1099. }
  1100. LRESULT DlgOnMouseMove(PCLASSXP pCxp,WPARAM wParam, LPARAM lParam)
  1101. {
  1102. UINT hit;
  1103. RECT rtWnd;
  1104. POINT point;
  1105. HDC hDC;
  1106. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  1107. if(pDlg->m_NcMouseState != MouseStateNormal)
  1108. {
  1109. GetWindowRect(pCxp->hWnd,&rtWnd);
  1110. point.x = LOWORD(lParam);
  1111. point.y = HIWORD(lParam);
  1112. ClientToScreen(pCxp->hWnd,&point);
  1113. // hit = (UINT)CDialog::WindowProc(WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));
  1114. hit = (UINT)CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1115. WM_NCHITTEST,wParam,
  1116. MAKELPARAM(point.x,point.y));
  1117. return DlgOnNcMouseMove(pCxp,hit,MAKELPARAM(point.x,point.y));
  1118. }
  1119. else
  1120. {
  1121. if(pDlg->m_ExitButtonState != StateNormal ||
  1122. pDlg->m_MinimizeButtonState != StateNormal ||
  1123. pDlg->m_MaximizeButtonState != StateNormal)
  1124. {
  1125. hDC = GetWindowDC(pCxp->hWnd);
  1126. pDlg->m_MaximizeButtonState = StateNormal;
  1127. pDlg->m_MinimizeButtonState = StateNormal;
  1128. pDlg->m_ExitButtonState = StateNormal;
  1129. // RTDrawTitleBarButtons(&dc);
  1130. DlgDrawTitleBarButtons(pCxp,hDC);
  1131. ReleaseDC(pCxp->hWnd, hDC);
  1132. }
  1133. }
  1134. // return CDialog::WindowProc(WM_MOUSEMOVE,wParam,lParam);
  1135. return DefWindowProc(pCxp->hWnd ,WM_MOUSEMOVE, wParam, lParam);
  1136. // return CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1137. // WM_MOUSEMOVE,wParam,lParam);
  1138. }
  1139. LRESULT DlgOnNcMouseMove(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
  1140. {
  1141. LRESULT result = 0;
  1142. HDC hDC;
  1143. DWORD dwStyle;
  1144. hDC = GetWindowDC(pCxp->hWnd);
  1145. PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
  1146. dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
  1147. switch(wParam)
  1148. {
  1149. case HTMAXBUTTON:
  1150. if(!(dwStyle & WS_MAXIMIZEBOX))return 0;//break;
  1151. if(pDlg->m_NcMouseState == MouseStateNormal)
  1152. {
  1153. if(pDlg->m_MaximizeButtonState != StateFocus)
  1154. {
  1155. pDlg->m_MaximizeButtonState = StateFocus;
  1156. pDlg->m_MinimizeButtonState = StateNormal;
  1157. pDlg->m_ExitButtonState = StateNormal;
  1158. //RTDrawTitleBarButtons(&dc);
  1159. DlgDrawTitleBarButtons(pCxp,hDC);
  1160. }
  1161. }
  1162. else if(pDlg->m_NcMouseState == MouseStateDown)
  1163. {
  1164. if(pDlg->m_SelTitleButton == MaximizeButton)
  1165. {
  1166. if(pDlg->m_MaximizeButtonState != StateDown)
  1167. {
  1168. pDlg->m_MaximizeButtonState = StateDown;
  1169. // RTDrawTitleBarButtons(&dc);
  1170. DlgDrawTitleBarButtons(pCxp,hDC);
  1171. }
  1172. }
  1173. else if(pDlg->m_SelTitleButton != NoneButton)
  1174. {
  1175. pDlg->m_MinimizeButtonState = StateNormal;
  1176. pDlg->m_ExitButtonState = StateNormal;
  1177. // RTDrawTitleBarButtons(&dc);
  1178. DlgDrawTitleBarButtons(pCxp,hDC);
  1179. }
  1180. }
  1181. break;
  1182. case HTMINBUTTON:
  1183. if(!(dwStyle & WS_MINIMIZEBOX)) return 0;//break;
  1184. if(pDlg->m_NcMouseState == MouseStateNormal)
  1185. {
  1186. if(pDlg->m_MinimizeButtonState != StateFocus)
  1187. {
  1188. pDlg->m_MinimizeButtonState = StateFocus;
  1189. pDlg->m_MaximizeButtonState = StateNormal;
  1190. pDlg->m_ExitButtonState = StateNormal;
  1191. // RTDrawTitleBarButtons(&dc);
  1192. DlgDrawTitleBarButtons(pCxp,hDC);
  1193. }
  1194. }
  1195. else if(pDlg->m_NcMouseState == MouseStateDown)
  1196. {
  1197. if(pDlg->m_SelTitleButton == MinimizeButton)
  1198. {
  1199. if(pDlg->m_MinimizeButtonState != StateDown)
  1200. {
  1201. pDlg->m_MinimizeButtonState = StateDown;
  1202. // RTDrawTitleBarButtons(&dc);
  1203. DlgDrawTitleBarButtons(pCxp,hDC);
  1204. }
  1205. }
  1206. else if(pDlg->m_SelTitleButton != NoneButton)
  1207. {
  1208. pDlg->m_MaximizeButtonState = StateNormal;
  1209. pDlg->m_ExitButtonState = StateNormal;
  1210. // RTDrawTitleBarButtons(&dc);
  1211. DlgDrawTitleBarButtons(pCxp,hDC);
  1212. }
  1213. }
  1214. break;
  1215. case HTCLOSE:
  1216. if(!(dwStyle & WS_SYSMENU)) return 0;//break;
  1217. if(pDlg->m_NcMouseState == MouseStateNormal)
  1218. {
  1219. if(pDlg->m_ExitButtonState != StateFocus)
  1220. {
  1221. pDlg->m_ExitButtonState = StateFocus;
  1222. pDlg->m_MaximizeButtonState = StateNormal;
  1223. pDlg->m_MinimizeButtonState = StateNormal;
  1224. // RTDrawTitleBarButtons(&dc);
  1225. DlgDrawTitleBarButtons(pCxp,hDC);
  1226. }
  1227. }
  1228. else if(pDlg->m_NcMouseState == MouseStateDown)
  1229. {
  1230. if(pDlg->m_SelTitleButton == ExitButton)
  1231. {
  1232. if(pDlg->m_ExitButtonState != StateDown)
  1233. {
  1234. pDlg->m_ExitButtonState = StateDown;
  1235. // RTDrawTitleBarButtons(&dc);
  1236. DlgDrawTitleBarButtons(pCxp,hDC);
  1237. }
  1238. }
  1239. else if(pDlg->m_SelTitleButton != NoneButton)
  1240. {
  1241. pDlg->m_MaximizeButtonState = StateNormal;
  1242. pDlg->m_MinimizeButtonState = StateNormal;
  1243. // RTDrawTitleBarButtons(&dc);
  1244. DlgDrawTitleBarButtons(pCxp,hDC);
  1245. }
  1246. }
  1247. break;
  1248. default:
  1249. if(pDlg->m_ExitButtonState != StateNormal ||
  1250. pDlg->m_MinimizeButtonState != StateNormal ||
  1251. pDlg->m_MaximizeButtonState != StateNormal)
  1252. {
  1253. pDlg->m_MaximizeButtonState = StateNormal;
  1254. pDlg->m_MinimizeButtonState = StateNormal;
  1255. pDlg->m_ExitButtonState = StateNormal;
  1256. // RTDrawTitleBarButtons(&dc);
  1257. DlgDrawTitleBarButtons(pCxp,hDC);
  1258. }
  1259. result = 0;//DefWindowProc(WM_NCMOUSEMOVE,wParam,lParam);
  1260. break;
  1261. }
  1262. ReleaseDC(pCxp->hWnd, hDC);
  1263. return result;
  1264. }
  1265. LRESULT DlgOnNcRButtonUp(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
  1266. {
  1267. HDC hDC = GetWindowDC(pCxp->hWnd);
  1268. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  1269. ReleaseDC(pCxp->hWnd, hDC);
  1270. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_NCRBUTTONUP, wParam, lParam);
  1271. }
  1272. LRESULT DlgOnNcRButtonDown(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
  1273. {
  1274. return 0;
  1275. }
  1276. LRESULT DlgOnSysCommand(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
  1277. {
  1278. HDC hDC = GetWindowDC(pCxp->hWnd);
  1279. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  1280. ReleaseDC(pCxp->hWnd, hDC);
  1281. return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_SYSCOMMAND, wParam, lParam);
  1282. }
  1283. LRESULT DlgOnSetCursor(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
  1284. {
  1285. HDC hDC;
  1286. LRESULT rt = CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
  1287. WM_SETCURSOR,wParam, lParam);
  1288. /*
  1289. UINT nHitTest = LOWORD(lParam);
  1290. switch(nHitTest)
  1291. {
  1292. case HTBORDER:
  1293. case HTLEFT:
  1294. case HTRIGHT:
  1295. case HTTOP:
  1296. case HTBOTTOM:
  1297. case HTBOTTOMLEFT:
  1298. case HTBOTTOMRIGHT:
  1299. case HTTOPLEFT:
  1300. case HTTOPRIGHT:
  1301. pCxp->dwState &= CXPS_FOCUS;
  1302. hDC = GetWindowDC(pCxp->hWnd);
  1303. DlgDrawTitleBar(pCxp, (WPARAM)hDC);
  1304. ReleaseDC(pCxp->hWnd, hDC);
  1305. break;
  1306. return 0;
  1307. default:
  1308. break;
  1309. }
  1310. */
  1311. return rt;
  1312. }
  1313. LRESULT DlgOnSize(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
  1314. {
  1315. RECT Rect;
  1316. UINT nWidth = GetSystemMetrics(SM_CXDLGFRAME);
  1317. UINT nHeight =GetSystemMetrics(SM_CYDLGFRAME);
  1318. GetWindowRect(pCxp->hWnd, &Rect);
  1319. Rect.right -= Rect.left;
  1320. Rect.bottom -= Rect.top;
  1321. Rect.left = Rect.top = 0;
  1322. if (wParam == SIZE_MAXHIDE)
  1323. return FALSE;
  1324. if (IsZoomed(pCxp->hWnd))
  1325. {
  1326. //SelectClipRgn(GetWindowDC(pCxp->hWnd),NULL);
  1327. SetWindowRgn(pCxp->hWnd, NULL,TRUE); // set window region to make rounded window
  1328. DeleteObject((HGDIOBJ)pCxp->hRgn);
  1329. pCxp->hRgn = NULL;
  1330. }
  1331. else if(wParam == SIZE_RESTORED)
  1332. {
  1333. /* GetWindowRect(pCxp->hWnd, &Rect);
  1334. // MoveWindow(pCxp->hWnd, Rect.top,Rect.left, Rect.right, Rect.bottom, TRUE);
  1335. // return TRUE;
  1336. Rect.right -= Rect.left;
  1337. Rect.bottom -= Rect.top;
  1338. Rect.left = Rect.top = 0;
  1339. //nWidth += LOWORD(lParam); // width of client area
  1340. //nHeight += HIWORD(lParam); // height of client area
  1341. nWidth = Rect.right;
  1342. nHeight = Rect.bottom;
  1343. if(pCxp->hRgn)
  1344. DeleteObject((HGDIOBJ)pCxp->hRgn);
  1345. pCxp->hRgn = CreateRoundRectRgn(0,0,nWidth,nHeight,16,16);
  1346. SetWindowRgn(pCxp->hWnd,pCxp->hRgn,TRUE); // set window region to make rounded window
  1347. */
  1348. }
  1349. // RedrawWindow(pCxp->hWnd, NULL, NULL,
  1350. // RDW_UPDATENOW|RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ERASENOW);
  1351. // 重画窗口
  1352. return TRUE;
  1353. }
  1354. LRESULT DlgWindowProc(PCLASSXP pCxp, UINT message, WPARAM wParam, LPARAM lParam)
  1355. {
  1356. long lReturn;
  1357. switch(message)
  1358. {
  1359. case WM_SIZE:
  1360. return DlgOnSize(pCxp, wParam, lParam);
  1361. case WM_INITMENUPOPUP: //
  1362. return DlgOnSysCommand(pCxp,wParam,lParam);
  1363. //return 0;
  1364. case WM_NCPAINT: //1
  1365. return DlgOnNcPaint(pCxp, wParam);
  1366. case WM_NCACTIVATE: //2
  1367. return DlgOnNcActive(pCxp,wParam,lParam);
  1368. case WM_ACTIVATE: //3
  1369. return DlgOnActive(pCxp, wParam,lParam);
  1370. case WM_ACTIVATEAPP: //4
  1371. return DlgOnActiveApp(pCxp,wParam,lParam);
  1372. case WM_NOTIFY: //5
  1373. return DlgOnNodify(pCxp, wParam,lParam);
  1374. case WM_SETTEXT: //6
  1375. return DlgOnSetText(pCxp, wParam,lParam);
  1376. case WM_SETICON: //7
  1377. return DlgOnSetIcon(pCxp, wParam,lParam);
  1378. case WM_NCMOUSEMOVE: //8
  1379. return DlgOnNcMouseMove(pCxp, wParam,lParam);
  1380. case WM_NCLBUTTONDOWN: //9
  1381. return DlgOnNcLMouseDown(pCxp, wParam,lParam);
  1382. case WM_NCLBUTTONUP: //10
  1383. DlgOnNcLMouseUp(pCxp, wParam,lParam);
  1384. case WM_LBUTTONUP: //11
  1385. return DlgOnLButtonUp(pCxp, wParam,lParam);
  1386. case WM_MOUSEMOVE: //12
  1387. return DlgOnMouseMove(pCxp, wParam,lParam);
  1388. case WM_ERASEBKGND: //13
  1389. return DlgOnEraseBackGround(pCxp, wParam,lParam);
  1390. case WM_NCRBUTTONUP: //14
  1391. return DlgOnNcRButtonUp(pCxp, wParam,lParam);
  1392. case WM_NCRBUTTONDOWN: //15
  1393. return DlgOnNcRButtonDown(pCxp,wParam,lParam);
  1394. case WM_SYSCOMMAND: //16
  1395. return DlgOnSysCommand(pCxp, wParam,lParam);
  1396. case WM_SETCURSOR: //17
  1397. return DlgOnSetCursor(pCxp, wParam,lParam);
  1398. default:
  1399. break;
  1400. }
  1401. // 调用原来的回调函数
  1402. lReturn = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, message, wParam, lParam);
  1403. if (message == WM_NCDESTROY) // 窗口销毁
  1404. DeleteClassXP(pCxp->hWnd);
  1405. return lReturn;
  1406. // return DefWindowProc(pCxp->hWnd, message, wParam, lParam);
  1407. }
  1408. ////////////////////////////////////////////////////////////////////////////////////////////////////
  1409. #ifdef __cplusplus
  1410. }
  1411. #endif // __cplusplus
  1412. ////////////////////////////////////////////////////////////////////////////////////////////////////