1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483 |
- // DialogXP.cpp: implementation of the CDialogXP class.
- //
- //////////////////////////////////////////////////////////////////////
- //#include "stdafx.h"
- //#include "test.h"
- //#include <winuser.H>
- //////////////////////////////////////////////////////////////////////
- /**************以下设置必需包含在每个子类中**********************/
- //头部
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 编译预处理
- #if _WIN32_WINNT < 0x0400
- #define _WIN32_WINNT 0x0400
- #endif
- // 强制使用 C 语言方式编译
- #ifdef __cplusplus
- extern "C"
- {
- #endif // __cplusplus
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #include "DialogXP.h"
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 全局变量
- extern HHOOK g_hPrevHookXP ; // 窗口消息 HOOK 句柄
- extern PCLASSXP g_pClassXP ; // 窗口的 CLASSXP 结构指针
- extern COLORREF g_crDialogbkColor; // 窗口背景颜色
- //WndColor[0]窗体颜色最深点, WndColor[1]为窗体的本色,WndColor[2]为最亮点的颜色,WndColor[3]为国次亮点颜色, WndColor[4]为国次次亮点颜色
- const COLORREF WndColor[]={ RGB(0,32,175), RGB(0,81,229), RGB(144,175,249), RGB(43,144,255), RGB(13,134,255)};
- const COLORREF WndColorUnAct[]={ RGB(79,83,188), RGB(104,141,224), RGB(132,159,234), RGB(152,178,232), RGB(129,167,232) };
- const COLORREF MinMaxBTColor[]={ RGB(132,159,234), RGB(104,141,224) };
- const COLORREF MinMaxBTColorAct[]={ RGB(144,175,249), RGB(0,81,229) };
- const COLORREF MinMaxBTColorMsOn[]={ RGB(132,159,234), RGB(13,134,255) };
- const COLORREF ExitBTColor[]={ RGB(180,155,185), RGB(175,102,115) };
- const COLORREF ExitBTColorAct[]={ RGB(240,169,151), RGB(228,61,5) };
- const COLORREF ExitBTColorMsOn[]={ RGB(240,169,151), RGB(238,101,35) };
- //画按钮
- //void DlgDrawButton2(HWND hWnd, HDC hdc, RECT rt, UINT iType, BOOL bActive, BOOL bAble, BOOL bMouseOn)
- //句柄、句柄、区域、类型、状态、有效
- void DlgDrawButton2(HWND hWnd, HDC hdc, RECT rt, UINT iType, UINT nState, BOOL bAble)
- {
- RECT rttmp;
- // HPEN hPen;
- COLORREF colors[4];
- COLORREF Pencolor=RGB(255,255,255);
- HANDLE hHandle;
- //画按钮边框
- // pen.CreatePen(PS_SOLID, 1, Pencolor);
- hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 1, Pencolor));
- // DeleteObject(SelectObject(hDC,(HGDIOBJ) hHandle));
- // ::SelectObject(hdc, pen.m_hObject);
- ::MoveToEx(hdc, rt.left+1, rt.top, NULL);
- ::LineTo(hdc, rt.right, rt.top);
- ::MoveToEx(hdc, rt.right, rt.top+1, NULL);
- ::LineTo(hdc, rt.right, rt.bottom);
- ::MoveToEx(hdc, rt.right-1, rt.bottom, NULL);
- ::LineTo(hdc, rt.left, rt.bottom);
- ::MoveToEx(hdc, rt.left, rt.bottom-1, NULL);
- ::LineTo(hdc, rt.left, rt.top);
- //给按钮填充平滑颜色
- if ( iType == 0 ) //EXIT
- {
- if (nState == StateFocus)
- {
- colors[0]=ExitBTColorMsOn[0];
- colors[1]=ExitBTColorMsOn[1];
- colors[2]=ExitBTColorMsOn[1];
- colors[3]=ExitBTColorMsOn[1];
- }
- else if(nState == StateDown)
- {
- colors[0]=ExitBTColor[0];
- colors[1]=ExitBTColor[1];
- colors[2]=ExitBTColor[1];
- colors[3]=ExitBTColor[1];
- }
- else
- {
- colors[0]=ExitBTColorAct[0];
- colors[1]=ExitBTColorAct[1];
- colors[2]=ExitBTColorAct[1];
- colors[3]=ExitBTColorAct[1];
- }
- }
- else //其它
- {
- if (nState == StateFocus)
- {
- colors[0]=MinMaxBTColorMsOn[0];
- colors[1]=MinMaxBTColorMsOn[1];
- colors[2]=MinMaxBTColorMsOn[1];
- colors[3]=MinMaxBTColorMsOn[1];
- }
- else if(nState == StateDown)
- {
- colors[0]=MinMaxBTColor[0];
- colors[1]=MinMaxBTColor[1];
- colors[2]=MinMaxBTColor[1];
- colors[3]=MinMaxBTColor[1];
- }
- else
- {
- colors[0]=MinMaxBTColorAct[0];
- colors[1]=MinMaxBTColorAct[1];
- colors[2]=MinMaxBTColorAct[1];
- colors[3]=MinMaxBTColorAct[1];
- }
- }
- SetRect(&rttmp, rt.left+1, rt.top+1, rt.right, rt.bottom);
- GradientRectXP2( hdc, rttmp, colors, GRADIENT_FILL_TRIANGLE );
- Pencolor = bAble? RGB(255,255,255):RGB(200,200,200);
- //画按扭内部图型
- DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
- switch( iType )
- {
- case 0:
- hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 2, Pencolor));
- // pen.DeleteObject();
- // pen.CreatePen(PS_SOLID, 2, Pencolor);
- // ::SelectObject(hdc, pen.m_hObject);
- ::MoveToEx(hdc, rt.left+4, rt.top+4, NULL);
- ::LineTo(hdc, rt.right-4, rt.bottom-4);
- ::MoveToEx(hdc, rt.right-4, rt.top+4, NULL);
- ::LineTo(hdc, rt.left+4, rt.bottom-4);
- DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
- break;
- case 1: //MAX
- hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 1, Pencolor));
- // pen.DeleteObject();
- // pen.CreatePen(PS_SOLID, 1, Pencolor);
- // ::SelectObject(hdc, pen.m_hObject);
- ::MoveToEx(hdc, rt.left+3, rt.top+4, NULL);
- ::LineTo(hdc, rt.right-3, rt.top+4);
- ::MoveToEx(hdc, rt.left+3, rt.top+5, NULL);
- ::LineTo(hdc, rt.right-4, rt.top+5);
- ::LineTo(hdc, rt.right-4, rt.bottom-4);
- ::LineTo(hdc, rt.left+3, rt.bottom-4);
- ::LineTo(hdc, rt.left+3, rt.top+5);
- DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
- break;
- case 2: //RESTORE
- hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 1, Pencolor));
- // pen.DeleteObject();
- // pen.CreatePen(PS_SOLID, 1, Pencolor);
- // ::SelectObject(hdc, pen.m_hObject);
- ::MoveToEx(hdc, rt.left+6, rt.top+4, NULL);
- ::LineTo(hdc, rt.right-4, rt.top+4);
- ::LineTo(hdc, rt.right-4, rt.bottom-6);
- ::LineTo(hdc, rt.left+6, rt.bottom-6);
- ::LineTo(hdc, rt.left+6, rt.top+4);
-
- ::MoveToEx(hdc, rt.left+4, rt.top+6, NULL);
- ::LineTo(hdc, rt.right-6, rt.top+6);
- ::LineTo(hdc, rt.right-6, rt.bottom-4);
- ::LineTo(hdc, rt.left+4, rt.bottom-4);
- ::LineTo(hdc, rt.left+4, rt.top+6);
- DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
- break;
- case 3: //MIN
- hHandle = (HANDLE) SelectObject(hdc,CreatePen(PS_SOLID, 2, Pencolor));
- // pen.DeleteObject();
- // pen.CreatePen(PS_SOLID,2,Pencolor);
- // ::SelectObject(hdc, HPEN(pen));
- ::MoveToEx(hdc, rt.left+3, rt.bottom-5, NULL);
- ::LineTo(hdc, rt.right-6, rt.bottom-5);
- DeleteObject(SelectObject(hdc,(HGDIOBJ) hHandle));
- break;
- case 4: //HELP
- ::SetTextColor(hdc, RGB(255,255,255));
- ::SetBkMode(hdc, TRANSPARENT);
- rttmp = rt;
- ::DrawText(hdc, "?", 1, &rttmp, DT_VCENTER|DT_CENTER);
- break;
- default:break;
- }
- }
- ///////////////////////////////////////////////////////////
- void DlgDrawHelpButton(HWND hWnd,HDC hDC, RECT Rect)
- {
- static COLORREF s_crGradientXP[][4] =
- {
- {0x00C1CCD1, 0x00C1CCD1, 0x00EEF1F2, 0xFFEEF1F2},
- {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
- {0x00BDCBD6, 0x00C6CFD6, 0x00EFF3F7, 0xFFEFF3F7},
- {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
- {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
- };
- DWORD dwStyle ;
- int nWidth;
- RECT rc;
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- if (!(dwStyle & WS_SYSMENU)) return;
- if (!(dwStyle & WS_EX_CONTEXTHELP))return;
- nWidth = Rect.bottom - Rect.top - 3;
- rc.top = Rect.top ;
- rc.bottom = rc.top + nWidth;
- if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
- {
- rc.left = Rect.right - 4*(nWidth + 2);
- rc.right = rc.left + nWidth;
- }
- else
- {
- rc.left = Rect.right - 2*(nWidth + 2);
- rc.right = rc.left + nWidth;
- }
- DlgDrawButton2(hWnd,hDC, rc, 4, StateFocus, TRUE);
- /*
- if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
- {
- rc.left = Rect.right - 4*(nWidth +4) -2;
- rc.right = rc.left + nWidth;
- GradientRectXP(hDC, &rc, s_crGradientXP[2]);
- RoundRect(hDC, rc.left-2, rc.top -2,
- rc.right +2, rc.bottom +2, 4,4);
- }
- ::SetTextColor(hDC, RGB(255,255,255));
- ::SetBkMode(hDC, TRANSPARENT);
- ::DrawText(hDC, "~", 1, &rc, DT_VCENTER|DT_CENTER);
- */
- }
- ///////////////////////////////////////////////////////////
- void DlgDrawExitButton(HWND hWnd,HDC hDC, RECT Rect, int iState)
- {
- /* static COLORREF s_crGradientXP[][4] =
- {
- {RGB(180,155,185), RGB(175,102,115), RGB(175,102,115), RGB(175,102,115)},
- {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
- {RGB(240,169,151), RGB(228,61,5), RGB(228,61,5), RGB(228,61,5)},
- {RGB(240,169,151), RGB(238,101,35), RGB(238,101,35), RGB(238,101,35)},
- {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
- };
- */
- DWORD dwStyle ;
- int nWidth;
- RECT rc;
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- if(!(dwStyle & WS_SYSMENU)) return;
- nWidth = Rect.bottom - Rect.top - 3;
- rc.top = Rect.top ;
- rc.bottom = rc.top + nWidth;
- rc.left = Rect.right - (nWidth+ 2);
- rc.right = rc.left + nWidth;
- DlgDrawButton2(hWnd,hDC, rc, 0, iState, TRUE);
- /* rc.left = Rect.right - (nWidth+ 4);
- rc.right = rc.left + nWidth;
- GradientRectXP(hDC, &rc, s_crGradientXP[iState]);
- MoveToEx(hDC, rc.left + 3, rc.top + 3, NULL);
- LineTo(hDC, rc.right - 3, rc.bottom - 3);
- MoveToEx(hDC, rc.right - 3, rc.top + 3, NULL);
- LineTo(hDC, rc.left + 3, rc.bottom - 3);
- RoundRect(hDC, rc.left-2, rc.top -2,
- rc.right +2, rc.bottom +2, 4,4);
- */
- // }
- }
- ///////////////////////////////////////////////////////////
- void DlgDrawMinButton(HWND hWnd, HDC hDC, RECT Rect, int iState)
- {
- /* static COLORREF s_crGradientXP[][4] =
- {
- {0x00C1CCD1, 0x00C1CCD1, 0x00EEF1F2, 0xFFEEF1F2},
- {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
- {0x00BDCBD6, 0x00C6CFD6, 0x00EFF3F7, 0xFFEFF3F7},
- {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
- {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
- };
- DWORD dwStyle ;
- int nWidth;
- RECT rc;
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- nWidth = Rect.bottom - Rect.top - 8;
- rc.top = Rect.top +4;
- rc.bottom = rc.top + nWidth;
- //重画最小化button
- if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
- {
- rc.left = Rect.right - 3*(nWidth +4) -2;
- rc.right = rc.left + nWidth;
- GradientRectXP(hDC, &rc, s_crGradientXP[iState]);
- MoveToEx(hDC, rc.left + 4, rc.bottom - 4, NULL);
- LineTo(hDC, rc.right - 4, rc.bottom - 4);
- MoveToEx(hDC, rc.left + 4, rc.bottom - 5, NULL);
- LineTo(hDC, rc.right -
- 4, rc.bottom - 5);
- RoundRect(hDC, rc.left-2, rc.top -2,
- rc.right +2, rc.bottom +2, 4,4);
- }
- */
- DWORD dwStyle ;
- int nWidth;
- RECT rc;
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- if(!(dwStyle & WS_SYSMENU)) return;
- //重画最大化/恢复button
- if(dwStyle & WS_MINIMIZEBOX)
- {
- nWidth = Rect.bottom - Rect.top - 3;
- rc.top = Rect.top;
- rc.bottom = rc.top + nWidth;
- rc.left = Rect.right - 3*(nWidth+2) ;
- rc.right = rc.left + nWidth;
- DlgDrawButton2(hWnd,hDC, rc, 3, iState, dwStyle & WS_MINIMIZEBOX);
- }
- }
- ///////////////////////////////////////////////////////////
- void DlgDrawMaxButton(HWND hWnd,HDC hDC, RECT Rect, int iState)
- {
- /* static COLORREF s_crGradientXP[][4] =
- {
- {0x00C1CCD1, 0x00C1CCD1, 0x00EEF1F2, 0xFFEEF1F2},
- {0x00CFF0FF, 0x00CFF0FF, 0x000097E5, 0xFF0097E5},
- {0x00BDCBD6, 0x00C6CFD6, 0x00EFF3F7, 0xFFEFF3F7},
- {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
- {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
- };
- DWORD dwStyle ;
- int nWidth;
- RECT rc;
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- nWidth = Rect.bottom - Rect.top - 8;
- rc.top = Rect.top +4;
- rc.bottom = rc.top + nWidth;
- //重画最大化/恢复button
- if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
- {
- rc.left = Rect.right - 2*(nWidth + 4) - 1;
- rc.right = rc.left + nWidth;
- GradientRectXP(hDC, &rc, s_crGradientXP[iState]);
- MoveToEx(hDC, rc.left + 2, rc.top + 5, NULL);
- LineTo(hDC, rc.left + 9, rc.top + 5);
- MoveToEx(hDC, rc.left + 5, rc.top + 2, NULL);
- LineTo(hDC, rc.left + 5, rc.top + 9);
- RoundRect(hDC, rc.left-2, rc.top -2,
- rc.right +2, rc.bottom +2, 4,4);
- }
- */
- DWORD dwStyle ;
- int nWidth;
- RECT rc;
- dwStyle = GetWindowLong(hWnd, GWL_STYLE);
- if(!(dwStyle & WS_SYSMENU)) return;
- //重画最大化/恢复button
- if(dwStyle & WS_MAXIMIZEBOX || dwStyle & WS_MINIMIZEBOX)
- {
- nWidth = Rect.bottom - Rect.top - 3;
- rc.top = Rect.top;
- rc.bottom = rc.top + nWidth;
- rc.left = Rect.right - 2*(nWidth+2) ;
- rc.right = rc.left + nWidth;
- if (IsZoomed(hWnd) ) //没有最大化
- DlgDrawButton2(hWnd,hDC, rc, 1, iState, dwStyle & WS_MAXIMIZEBOX);
- else
- DlgDrawButton2(hWnd,hDC, rc, 2, iState, dwStyle & WS_MAXIMIZEBOX);
- }
- }
- //画菜单按钮
- BOOL DlgDrawTitleBarButtons(PCLASSXP pCxp, HDC hDC)
- {
- // int iExit = 0, iMax = 0, iMin = 0;
- // HANDLE hHandle, hOldBrush;
- //取得标题栏的位置
- RECT Rect, rc;
- GetWindowRect(pCxp->hWnd, &rc);
- Rect.left = GetSystemMetrics(SM_CXDLGFRAME);
- Rect.top = GetSystemMetrics(SM_CYDLGFRAME);
- Rect.right = rc.right - rc.left - GetSystemMetrics(SM_CXDLGFRAME);
- Rect.bottom = Rect.top + GetSystemMetrics(SM_CYCAPTION);
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- //画标题栏按扭
- DWORD dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
- /*
- if(pDlg->m_ExitButtonState == StateNormal)
- {
- iExit = 2;
- }
- else if(pDlg->m_ExitButtonState == StateDown)
- {
- iExit = 0;
- }
- else if(pDlg->m_ExitButtonState == StateFocus)
- {
- iExit = 3;
- }
- if(WS_MAXIMIZEBOX & dwStyle) //最大化按钮
- {
- if(IsZoomed(pCxp->hWnd))//最大化
- {
- if(pDlg->m_MaximizeButtonState == StateNormal)
- {
- iMax = 2;
- }
- else if(pDlg->m_MaximizeButtonState == StateDown)
- {
- iMax = 0;
- }
- else if(pDlg->m_MaximizeButtonState == StateFocus)
- {
- iMax = 3;
- }
- }
- else
- {
- if(pDlg->m_MaximizeButtonState == StateNormal)
- {
- iMax = 2;
- }
- else if(pDlg->m_MaximizeButtonState == StateDown)
- {
- iMax = 0;
- }
- else if(pDlg->m_MaximizeButtonState == StateFocus)
- {
- iMax = 3;
- }
- }
- }
- else if(WS_MINIMIZEBOX & dwStyle) //最小化按钮
- {
- if(IsZoomed(pCxp->hWnd))//最大化
- {
- iMin = 4;
- }
- else
- {
- iMax = 4;
- }
- }
- if(WS_MINIMIZEBOX & dwStyle) //最小化按钮
- {
- if(pDlg->m_MinimizeButtonState == StateNormal)
- {
- iMin = 2;
- }
- else if(pDlg->m_MinimizeButtonState == StateDown)
- {
- iMin = 0;
- }
- else if(pDlg->m_MinimizeButtonState == StateFocus)
- {
- iMin = 3;
- }
- }
- else if(WS_MAXIMIZEBOX & dwStyle)//最大化按钮
- {
- iMin = 4;
- }
- //重画关闭button
- */
- DlgDrawExitButton(pCxp->hWnd,hDC, Rect, pDlg->m_ExitButtonState);
- DlgDrawMinButton(pCxp->hWnd,hDC, Rect, pDlg->m_MinimizeButtonState);
- DlgDrawMaxButton(pCxp->hWnd,hDC, Rect, pDlg->m_MaximizeButtonState);
- DlgDrawHelpButton(pCxp->hWnd,hDC, Rect);//, pDlg->m_ExitButtonState);
- return TRUE;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- // 绘制弹出窗口
- LRESULT DlgOnNcPaint(PCLASSXP pCxp, WPARAM wParam)
- {
- RECT Rect;
- // MEMDCXP Mdcxp;
- HDC hDC;
- HRGN hRgn = NULL;
- GetWindowRect(pCxp->hWnd, &Rect);
- // 获取内存兼容设备场景
- /* Mdcxp.hWnd = pCxp->hWnd;
- Mdcxp.bTransfer = FALSE;
- Mdcxp.hBitmap = NULL;
- GetMemDCXP(&Mdcxp);
- hDC = Mdcxp.hMemDC;
- */
- hDC = GetWindowDC(pCxp->hWnd);
- HRGN hRgn2;
- if(wParam != 1)
- {
- hRgn = (HRGN)wParam;
- }
- if(hRgn != NULL)
- {
- SelectClipRgn(hDC, hRgn);
- OffsetClipRgn(hDC,0 - Rect.left,0 - Rect.top);
- }
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- if (!pCxp->hRgn)
- {
- if(!IsZoomed(pCxp->hWnd))
- {
- // pCxp->hRgn = CreateRoundRectRgn(0,0,Rect.right ,Rect.bottom,10,10);
- pCxp->hRgn = CreateRoundRectRgn(0,0,Rect.right+1 ,Rect.bottom,16,16);
- hRgn2 = CreateRectRgn(Rect.left,Rect.bottom-10,Rect.right ,Rect.bottom);
- CombineRgn(pCxp->hRgn, pCxp->hRgn, hRgn2, RGN_OR);
- SetWindowRgn(pCxp->hWnd, pCxp->hRgn,TRUE); // set window region to make rounded window
- }
- }
- DlgDrawFrameBorder(pCxp, (WPARAM)hDC, hRgn);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- //输出
- // Mdcxp.bTransfer = TRUE;
- // ReleaseMemDCXP(&Mdcxp);
- if(hRgn != NULL)
- {
- SelectClipRgn(hDC,NULL);
- DeleteObject(hRgn);
- }
- ReleaseDC(pCxp->hWnd,hDC);
- return FALSE;
- }
- LRESULT DlgOnNcActive(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
- {
- HDC hDC;
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- pCxp->dwState |= CXPS_FOCUS;
- hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- return TRUE;
- }
- LRESULT DlgOnActive(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
- {
- LRESULT result = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_ACTIVATE, wParam, lParam);
- // PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData ;
- if(wParam == WA_INACTIVE)
- pCxp->dwState &= ~CXPS_FOCUS;
- else
- pCxp->dwState |= CXPS_FOCUS;
- DlgOnNcPaint(pCxp,1);
- return result;
- }
- // Dialog 消息处理程序
- BOOL DlgDrawFrameBorder(PCLASSXP pCxp, WPARAM wParam, HRGN hRgn)
- {
- COLORREF colors[2];
- RECT Rect, rc;
- HANDLE hHandle,hHandle2, hHandle3;
- int nWidth, nHeight;
- BOOL bNcActive;
- /* static COLORREF s_crGradientXP[][4] =
- {
- {0x00FF900B, 0x00FF900B,0x00F7CBAD, 0x00FF350B },
- {0x00D6DFDE, 0x00EFF3F7, 0x00EFF3F7, 0x00FFFFFF},
- {0x00FBFCFC, 0x00FBFCFC, 0x00E6EBEC, 0xFFE6EBEC},
- {0x00FFE7CE, 0x00FFE7CE, 0x00EE8269, 0xFFEE8269},
- {0x00FFFFFF, 0x00FFFFFF, 0x00D6DFE2, 0xFFD6DFE2},
- {0x00DEE3E7, 0x00E7E7E7, 0x00DEE3E7, 0xFFDEE3E7},
- {0x00FBFCFC, 0x00FBFCFC, 0x00E6EBEC, 0xFFE6EBEC},
- };
- */
- HDC hDC = (HDC)wParam;
- HRGN hRgn2;
- GetWindowRect(pCxp->hWnd, &Rect);
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- nWidth = GetSystemMetrics(SM_CXDLGFRAME);
- nHeight =GetSystemMetrics(SM_CYDLGFRAME);
-
- if (!pCxp->hRgn && !IsZoomed(pCxp->hWnd))
- {
- pCxp->hRgn = CreateRoundRectRgn(0,0,Rect.right+1 ,Rect.bottom,16,16);
- hRgn2 = CreateRectRgn(Rect.left,Rect.bottom - 10,Rect.right-1 ,Rect.bottom);
- CombineRgn(pCxp->hRgn, pCxp->hRgn, hRgn2, RGN_OR);
- SetWindowRgn(pCxp->hWnd, pCxp->hRgn,FALSE); // set window region to make rounded window
- }
- if (pCxp->dwState & CXPS_FOCUS)
- bNcActive = TRUE;
- else
- bNcActive = FALSE;
- //left border
- colors[0]=bNcActive? WndColor[1]:WndColorUnAct[1];
- colors[1]=bNcActive? WndColor[4]:WndColorUnAct[4];
- hHandle = CreateSolidBrush(colors[0]);
- hHandle3 = CreateSolidBrush(colors[1]);
- rc = Rect;
- rc.right = Rect.left + nWidth-1;
- FillRect(hDC, &rc,(HBRUSH) hHandle);
- rc.left = nWidth-1;
- rc.right = nWidth;
- FillRect(hDC, &rc,(HBRUSH) hHandle3);
- //other
- colors[1]=bNcActive? WndColor[0]:WndColorUnAct[0];
- hHandle2 = CreateSolidBrush(colors[1]);
- //top
- rc = Rect;
- rc.bottom = Rect.top + nHeight;
- FillRect(hDC, &rc,(HBRUSH) hHandle2);
- //right border
- rc = Rect;
- rc.left = Rect.right - nWidth;
- FillRect(hDC, &rc,(HBRUSH) hHandle2);
- //bottom
- rc = Rect;
- rc.top = Rect.bottom - nHeight;
- FillRect(hDC, &rc,(HBRUSH) hHandle2);
- DeleteObject(hHandle);
- DeleteObject(hHandle2);
- DeleteObject(hHandle3);
- return TRUE;
- }
- ////////////////////////////////////////
- //画标题栏2
- //BOOL DlgDrawTitleBar(HWND hWnd, HDC hdc, CRect &rt, BOOL bNcActive)
- BOOL DlgDrawTitleBar(PCLASSXP pCxp, WPARAM wParam)
- {
- RECT Rect, rt, rt2;
- char szTemp[256];
- HANDLE hHandle;
- HDC hDC;
- HICON hIcon;
- COLORREF colors[4];
- BOOL bNcActive;
- int XofText, mid,windowStyle;
- if (pCxp->dwState & CXPS_FOCUS)
- bNcActive = TRUE;
- else
- bNcActive = FALSE;
- hDC = (HDC)wParam;
- //取得标题栏的位置
- DWORD style =GetWindowLong(pCxp->hWnd, GWL_STYLE);
- if(!(style & WS_CAPTION)) return TRUE;
- // 获取窗口大小
- GetWindowRect(pCxp->hWnd, &Rect);
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- rt = Rect;
- //计算标题大小
- rt.left += GetSystemMetrics(SM_CXDLGFRAME);
- rt.right -= GetSystemMetrics(SM_CYDLGFRAME);
- rt.top += GetSystemMetrics(SM_CYDLGFRAME);
- rt.bottom = rt.top + GetSystemMetrics(SM_CYCAPTION);
-
- //填两角的底色
- colors[0]=bNcActive? WndColor[1]:WndColorUnAct[1];
- hHandle = CreateSolidBrush(colors[0]);
- rt2 = rt; rt2.right = rt.left + 10;
- FillRect(hDC,&rt, (HBRUSH)hHandle);
- rt2 = rt; rt2.left = rt.right - 10;
- FillRect(hDC,&rt, (HBRUSH)hHandle);
- DeleteObject(hHandle);
- colors[0]=bNcActive? WndColor[1]:WndColorUnAct[1];
- colors[1]=bNcActive? WndColor[4]:WndColorUnAct[4];
- Rect.left = 5; Rect.top = 0; Rect.right = rt.right; Rect.bottom = rt.bottom - 4;
- GradientRectXP2(hDC, Rect, colors, GRADIENT_FILL_RECT_V);
- colors[0]=bNcActive? WndColor[3]:WndColorUnAct[3];
- colors[1]=bNcActive? WndColor[1]:WndColorUnAct[1];
- Rect.left = 2; Rect.top = 1; Rect.right = rt.right; Rect.bottom = 5;
- GradientRectXP2(hDC, Rect, colors, GRADIENT_FILL_RECT_V);
- // GradientFill(hDC, CRect(2, 1, rt.right-4, 5), colors, GRADIENT_FILL_RECT_V);
- colors[0]=bNcActive? WndColor[4]:WndColorUnAct[4];
- colors[1]=bNcActive? WndColor[1]:WndColorUnAct[1];
- Rect.left = 5; Rect.top = rt.bottom-4; Rect.right = rt.right; Rect.bottom = rt.bottom;
- GradientRectXP2(hDC, Rect, colors, GRADIENT_FILL_RECT_V);
- // GradientFill(hDC, CRect(0, rt.bottom-4, rt.right, rt.bottom), colors, GRADIENT_FILL_RECT_V);
- XofText=4; //标题栏上文字的启始位置
- mid=(rt.bottom-rt.top)/2;
- windowStyle=GetWindowLong(pCxp->hWnd, GWL_STYLE);
- if ( windowStyle & WS_SYSMENU )
- {
- hIcon=(HICON)::SendMessage(pCxp->hWnd, WM_QUERYDRAGICON, 0, 0);
- if ( hIcon != NULL )
- {
- //画小图标,并将文字启始位置右移
- ::DrawIconEx(hDC, 5, mid-6, hIcon, 16, 16, 0, NULL, DI_NORMAL);
- XofText += 3+16;
- }
- }
- //画标题栏文字
- if (GetWindowText(pCxp->hWnd, szTemp, sizeof(szTemp)))
- {
- SetTextColor(hDC, RGB(255,255,255));
- SetBkMode(hDC,TRANSPARENT);
- hHandle = (HANDLE) SelectObject(hDC,
- (HGDIOBJ) SendMessage(pCxp->hWnd, WM_GETFONT, 0, 0));
- rt.left += XofText;
- DrawText(hDC, szTemp, -1, &rt, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
- SelectObject(hDC, (HGDIOBJ) hHandle);
- }
-
- //画标题按钮
- DlgDrawTitleBarButtons(pCxp,hDC);
- return TRUE;
- }
- ////////////////////////
- //画标题1
- /*
- BOOL DlgDrawTitleBar(PCLASSXP pCxp, WPARAM wParam)
- {
- RECT Rect, rc;
- char szTemp[256];
- HANDLE hHandle;
- HDC hDC;
- // MEMDCXP Mdcxp;
- static COLORREF s_crGradientXP[][4] =
- {
- {0x00FF900B, 0x00FF900B,0x00F7CBAD, 0x00FF350B },
- {0x00FFFFFF, 0x00FFFFFF,0x00FF900B, 0x00FF900B }
- };
- // 获取内存兼容设备场景
- // Mdcxp.hWnd = pCxp->hWnd;
- // Mdcxp.bTransfer = FALSE;
- // Mdcxp.hBitmap = NULL;
- // GetMemDCXP(&Mdcxp);
- // hDC = Mdcxp.hMemDC;
- hDC = (HDC)wParam;
- //取得标题栏的位置
- DWORD style =GetWindowLong(pCxp->hWnd, GWL_STYLE);
- if((style & WS_CAPTION) != WS_CAPTION) return TRUE;
- // 获取窗口大小
- GetWindowRect(pCxp->hWnd, &Rect);
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- rc = Rect;
- //计算标题大小
- rc.left += GetSystemMetrics(SM_CXDLGFRAME);
- rc.right -= GetSystemMetrics(SM_CYDLGFRAME);
- rc.top += GetSystemMetrics(SM_CYDLGFRAME);
- rc.bottom = rc.top + GetSystemMetrics(SM_CYCAPTION);
- //画标题
- hHandle = CreateSolidBrush(0x00FF350B);
- FillRect(hDC,&rc, (HBRUSH)hHandle);
- DeleteObject(hHandle);
- if (pCxp->dwState & CXPS_FOCUS)
- GradientRectXP(hDC, &rc, s_crGradientXP[0]);
- else
- GradientRectXP(hDC, &rc, s_crGradientXP[1]);
- //画图标
- HICON hIcon = (HICON)SendMessage(pCxp->hWnd,WM_GETICON,ICON_SMALL,0);
- if (hIcon)
- {
- DrawIconEx(hDC,rc.left+6,rc.top+2,hIcon,16,16,0,NULL,DI_NORMAL);
- rc.left += 18;
- }
- //画标题栏文字
- if (GetWindowText(pCxp->hWnd, szTemp, sizeof(szTemp)))
- {
- SetTextColor(hDC, 0x000000);
- SetBkMode(hDC,TRANSPARENT);
- hHandle = (HANDLE) SelectObject(hDC,
- (HGDIOBJ) SendMessage(pCxp->hWnd, WM_GETFONT, 0, 0));
- DrawText(hDC, szTemp, -1, &rc, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
- SelectObject(hDC, (HGDIOBJ) hHandle);
- }
- //画标题按钮
- DlgDrawTitleBarButtons(pCxp,hDC);
- //输出
- // Mdcxp.bTransfer = TRUE;
- // ReleaseMemDCXP(&Mdcxp);
- return TRUE;
- }
- */
- LRESULT DlgOnEraseBackGround(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
- {
- RECT Rect;
- HANDLE hHandle;//, hPen; //保存原来设备句柄
- HDC hDC;
- hDC = (HDC)wParam; //有效区域的句柄
- //客户区域
- GetClientRect(pCxp->hWnd, &Rect);
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- // Rect.left = Rect.top = 0;
- //画客户区
- // if (pCxp->dwState & CXPS_FOCUS)
- // hHandle = CreateSolidBrush(WndColor[1]);
- // else
- // hHandle = CreateSolidBrush(WndColorUnAct[1]);
- //left border
- // FillRect(hDC,&Rect,(HBRUSH)hHandle);
- // DeleteObject(hHandle);
- // hHandle = SelectObject(hDC,CreateSolidBrush(0x00FFFFFF));
- // hHandle = SelectObject(hDC,CreateSolidBrush(g_crDialogbkColor));
- // RoundRect(hDC, Rect.left+2, Rect.top+2,
- // Rect.right-2 , Rect.bottom-10 , 8,8);
- // DeleteObject(SelectObject(hDC, (HGDIOBJ) hHandle));
- /* hHandle = SelectObject(hDC,CreateSolidBrush(g_crDialogbkColor));
- RoundRect(hDC, Rect.left, Rect.top,
- Rect.right , Rect.bottom , 4,4);
- DeleteObject(SelectObject(hDC, (HGDIOBJ) hHandle));
- hPen = CreatePen( PS_SOLID, 0, RGB(0, 0, 0) ); // 圆角矩形(4,4)
- hHandle = SelectObject(hDC, hPen);
- Rectangle(hDC, Rect.left, Rect.top ,
- Rect.right , Rect.bottom );
- DeleteObject(SelectObject(hDC, hHandle));
- */
- hHandle = SelectObject(hDC,CreateSolidBrush(g_crDialogbkColor));
- FillRect(hDC, &Rect,(HBRUSH) hHandle);
- DeleteObject(SelectObject(hDC, (HGDIOBJ) hHandle));
- return true;
- }
- LRESULT DlgOnNodify(PCLASSXP pCxp,WPARAM wParam, LPARAM lParam)
- {
- LRESULT nRet = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_NOTIFY, wParam, lParam);
- /* HDC hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- */
- return nRet;
- }
- LRESULT DlgOnActiveApp(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
- {
- // LRESULT result = CDialog::WindowProc(WM_ACTIVATEAPP,wParam,lParam);
- LRESULT result = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_ACTIVATEAPP, wParam, lParam);
- if (wParam)
- pCxp->dwState |= CXPS_FOCUS;
- else
- pCxp->dwState &= ~CXPS_FOCUS;
- return 0;
- }
- LRESULT DlgOnSetText(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
- {
- LRESULT nRet = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_SETTEXT, wParam, lParam);
- HDC hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- return nRet;
- }
- LRESULT DlgOnSetIcon(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
- {
- LRESULT nRet = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_SETICON, wParam, lParam);
- HDC hDC;
- if(IsWindow(pCxp->hWnd))
- {
- hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- }
- return nRet;
- }
- LRESULT OnNcMouseMove(PCLASSXP pCxp ,WPARAM wParam,LPARAM lParam)
- {
- LRESULT result = 0;
- HDC hDC;
- hDC = GetWindowDC(pCxp->hWnd);
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- switch(wParam)
- {
- case HTMAXBUTTON:
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- if(pDlg->m_MaximizeButtonState != StateFocus)
- {
- pDlg->m_MaximizeButtonState = StateFocus;
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- //RTDrawTitleBarButtons(&dc);
- }
- }
- else if(pDlg->m_NcMouseState == MouseStateDown)
- {
- if(pDlg->m_SelTitleButton == MaximizeButton)
- {
- if(pDlg->m_MaximizeButtonState != StateDown)
- {
- pDlg->m_MaximizeButtonState = StateDown;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- }
- else if(pDlg->m_SelTitleButton != NoneButton)
- {
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- //RTDrawTitleBarButtons(&dc);
- }
- }
- break;
- case HTMINBUTTON:
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- if(pDlg->m_MinimizeButtonState != StateFocus)
- {
- pDlg->m_MinimizeButtonState = StateFocus;
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- //RTDrawTitleBarButtons(&dc);
- }
- }
- else if(pDlg->m_NcMouseState == MouseStateDown)
- {
- if(pDlg->m_SelTitleButton == MinimizeButton)
- {
- if(pDlg->m_MinimizeButtonState != StateDown)
- {
- pDlg->m_MinimizeButtonState = StateDown;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- }
- else if(pDlg->m_SelTitleButton != NoneButton)
- {
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- }
- break;
- case HTCLOSE:
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- if(pDlg->m_ExitButtonState != StateFocus)
- {
- pDlg->m_ExitButtonState = StateFocus;
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- }
- else if(pDlg->m_NcMouseState == MouseStateDown)
- {
- if(pDlg->m_SelTitleButton == ExitButton)
- {
- if(pDlg->m_ExitButtonState != StateDown)
- {
- pDlg->m_ExitButtonState = StateDown;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- }
- else if(pDlg->m_SelTitleButton != NoneButton)
- {
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- }
- break;
- default:
- if(pDlg->m_ExitButtonState != StateNormal ||
- pDlg->m_MinimizeButtonState != StateNormal ||
- pDlg->m_MaximizeButtonState != StateNormal)
- {
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- DlgDrawTitleBarButtons(pCxp, hDC);
- // RTDrawTitleBarButtons(&dc);
- }
- result = 0;//DefWindowProc(WM_NCMOUSEMOVE,wParam,lParam);
- break;
- }
- ReleaseDC(pCxp->hWnd, hDC);
- return result;
- }
- LRESULT DlgOnNcLMouseDown(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
- {
- LRESULT result = 0;
- DWORD dwStyle;
- HDC hDC;
- hDC = GetWindowDC(pCxp->hWnd);
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
- switch(wParam)
- {
- case HTMAXBUTTON:
- if(!(dwStyle & WS_MAXIMIZEBOX))return 0;//break;
- pDlg->m_NcMouseState = MouseStateDown;
- pDlg->m_SelTitleButton = MaximizeButton;
- pDlg->m_MaximizeButtonState = StateDown;
- //RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- SetCapture(pCxp->hWnd);
- /* if(!IsZoomed(pCxp->hWnd))
- {
- SelectClipRgn(hDC,NULL);
- DeleteObject(pCxp->hRgn);
- pCxp->hRgn = NULL;
- ShowWindow(pCxp->hWnd,SW_SHOWMAXIMIZED);
- return TRUE;
- }
- */
- break;
- case HTMINBUTTON:
- if(!(dwStyle & WS_MINIMIZEBOX)) return 0;//break;
- pDlg->m_NcMouseState = MouseStateDown;
- pDlg->m_SelTitleButton = MinimizeButton;
- pDlg->m_MinimizeButtonState = StateDown;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- SetCapture(pCxp->hWnd );
- break;
- case HTCLOSE:
- if(!(dwStyle & WS_SYSMENU)) return 0;//break;
- pDlg->m_NcMouseState = MouseStateDown;
- pDlg->m_SelTitleButton = ExitButton;
- pDlg->m_ExitButtonState = StateDown;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- SetCapture(pCxp->hWnd);
- break;
- default: //移动
- //屏闭标题栏,禁止原标题栏重绘
- dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
- if(!(dwStyle & WS_CAPTION))break;
- dwStyle &= ~WS_CAPTION;
- SetWindowLong(pCxp->hWnd, GWL_STYLE, dwStyle);
- result =DefWindowProc(pCxp->hWnd,
- WM_NCLBUTTONDOWN, wParam, lParam);
- dwStyle |= WS_CAPTION;
- SetWindowLong(pCxp->hWnd, GWL_STYLE, dwStyle);
- result = 0;
- break;
- }
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- return result;
- }
- LRESULT DlgOnNcLMouseUp(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
- {
- LRESULT result = 0;
- HDC hDC;
- hDC = GetWindowDC(pCxp->hWnd);
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- //return CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
- return CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- WM_NCLBUTTONUP, wParam, lParam);
- }
- pDlg->m_NcMouseState = MouseStateNormal;
- ReleaseCapture();
- //ReleaseCapture(pCxp->hWnd);
- if(wParam == HTMAXBUTTON)
- {
- if(pDlg->m_SelTitleButton == MaximizeButton)
- {
- pDlg->m_SelTitleButton = NoneButton;
- pDlg->m_MaximizeButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- if(IsZoomed(pCxp->hWnd))
- {
- SendMessage(pCxp->hWnd,WM_SYSCOMMAND, SC_RESTORE, lParam);
- }
- else
- {
- SendMessage(pCxp->hWnd,WM_SYSCOMMAND, SC_MAXIMIZE,lParam);
- }
- }
- }
- else if(wParam == HTMINBUTTON)
- {
- if(pDlg->m_SelTitleButton == MinimizeButton)
- {
- pDlg->m_SelTitleButton = NoneButton;
- pDlg->m_MinimizeButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- SendMessage(pCxp->hWnd,WM_SYSCOMMAND, SC_MINIMIZE,lParam);
- }
- }
- else if(wParam == HTCLOSE)
- {
- if(pDlg->m_SelTitleButton == ExitButton)
- {
- pDlg->m_SelTitleButton = NoneButton;
- pDlg->m_ExitButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- SendMessage(pCxp->hWnd,WM_CLOSE,0,0);
- }
- }
- else
- {
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- //result = CDialog::WindowProc(WM_NCLBUTTONUP,wParam,lParam);
- result = CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- WM_NCLBUTTONUP, wParam, lParam);
- }
- ReleaseDC(pCxp->hWnd, hDC);
- return result;
- }
- LRESULT DlgOnLButtonUp(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
- {
- UINT hit;
- RECT rtWnd;
- POINT point;
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- if(pDlg->m_NcMouseState != MouseStateNormal)
- {
- GetWindowRect(pCxp->hWnd,&rtWnd);
- point.x = LOWORD(lParam);
- point.y = HIWORD(lParam);
- ClientToScreen(pCxp->hWnd,&point);
- //UINT hit = (UINT)CDialog::WindowProc(WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));
- hit = (UINT)CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- WM_NCHITTEST,wParam,
- MAKELPARAM(point.x,point.y));
- return DlgOnNcLMouseUp(pCxp, hit,MAKELPARAM(point.x,point.y));
- }
- // return CDialog::WindowProc(WM_LBUTTONUP,wParam,lParam);
- return CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- WM_LBUTTONUP,wParam,lParam);
- }
- LRESULT DlgOnMouseMove(PCLASSXP pCxp,WPARAM wParam, LPARAM lParam)
- {
- UINT hit;
- RECT rtWnd;
- POINT point;
- HDC hDC;
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- if(pDlg->m_NcMouseState != MouseStateNormal)
- {
- GetWindowRect(pCxp->hWnd,&rtWnd);
- point.x = LOWORD(lParam);
- point.y = HIWORD(lParam);
- ClientToScreen(pCxp->hWnd,&point);
- // hit = (UINT)CDialog::WindowProc(WM_NCHITTEST,wParam,MAKELPARAM(point.x,point.y));
- hit = (UINT)CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- WM_NCHITTEST,wParam,
- MAKELPARAM(point.x,point.y));
- return DlgOnNcMouseMove(pCxp,hit,MAKELPARAM(point.x,point.y));
- }
- else
- {
- if(pDlg->m_ExitButtonState != StateNormal ||
- pDlg->m_MinimizeButtonState != StateNormal ||
- pDlg->m_MaximizeButtonState != StateNormal)
- {
- hDC = GetWindowDC(pCxp->hWnd);
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- }
- }
- // return CDialog::WindowProc(WM_MOUSEMOVE,wParam,lParam);
- return DefWindowProc(pCxp->hWnd ,WM_MOUSEMOVE, wParam, lParam);
- // return CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- // WM_MOUSEMOVE,wParam,lParam);
- }
- LRESULT DlgOnNcMouseMove(PCLASSXP pCxp, WPARAM wParam,LPARAM lParam)
- {
- LRESULT result = 0;
- HDC hDC;
- DWORD dwStyle;
- hDC = GetWindowDC(pCxp->hWnd);
- PDIALOGXP pDlg = (PDIALOGXP)pCxp->pData;
- dwStyle = GetWindowLong(pCxp->hWnd, GWL_STYLE);
- switch(wParam)
- {
- case HTMAXBUTTON:
- if(!(dwStyle & WS_MAXIMIZEBOX))return 0;//break;
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- if(pDlg->m_MaximizeButtonState != StateFocus)
- {
- pDlg->m_MaximizeButtonState = StateFocus;
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- //RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- else if(pDlg->m_NcMouseState == MouseStateDown)
- {
- if(pDlg->m_SelTitleButton == MaximizeButton)
- {
- if(pDlg->m_MaximizeButtonState != StateDown)
- {
- pDlg->m_MaximizeButtonState = StateDown;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- else if(pDlg->m_SelTitleButton != NoneButton)
- {
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- break;
- case HTMINBUTTON:
- if(!(dwStyle & WS_MINIMIZEBOX)) return 0;//break;
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- if(pDlg->m_MinimizeButtonState != StateFocus)
- {
- pDlg->m_MinimizeButtonState = StateFocus;
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- else if(pDlg->m_NcMouseState == MouseStateDown)
- {
- if(pDlg->m_SelTitleButton == MinimizeButton)
- {
- if(pDlg->m_MinimizeButtonState != StateDown)
- {
- pDlg->m_MinimizeButtonState = StateDown;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- else if(pDlg->m_SelTitleButton != NoneButton)
- {
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- break;
- case HTCLOSE:
- if(!(dwStyle & WS_SYSMENU)) return 0;//break;
- if(pDlg->m_NcMouseState == MouseStateNormal)
- {
- if(pDlg->m_ExitButtonState != StateFocus)
- {
- pDlg->m_ExitButtonState = StateFocus;
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- else if(pDlg->m_NcMouseState == MouseStateDown)
- {
- if(pDlg->m_SelTitleButton == ExitButton)
- {
- if(pDlg->m_ExitButtonState != StateDown)
- {
- pDlg->m_ExitButtonState = StateDown;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- else if(pDlg->m_SelTitleButton != NoneButton)
- {
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- }
- break;
- default:
- if(pDlg->m_ExitButtonState != StateNormal ||
- pDlg->m_MinimizeButtonState != StateNormal ||
- pDlg->m_MaximizeButtonState != StateNormal)
- {
- pDlg->m_MaximizeButtonState = StateNormal;
- pDlg->m_MinimizeButtonState = StateNormal;
- pDlg->m_ExitButtonState = StateNormal;
- // RTDrawTitleBarButtons(&dc);
- DlgDrawTitleBarButtons(pCxp,hDC);
- }
- result = 0;//DefWindowProc(WM_NCMOUSEMOVE,wParam,lParam);
- break;
- }
- ReleaseDC(pCxp->hWnd, hDC);
- return result;
- }
- LRESULT DlgOnNcRButtonUp(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
- {
- HDC hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_NCRBUTTONUP, wParam, lParam);
- }
- LRESULT DlgOnNcRButtonDown(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
- {
- return 0;
- }
- LRESULT DlgOnSysCommand(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
- {
- HDC hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- return CallWindowProc(pCxp->wpPrev, pCxp->hWnd, WM_SYSCOMMAND, wParam, lParam);
- }
- LRESULT DlgOnSetCursor(PCLASSXP pCxp,WPARAM wParam,LPARAM lParam)
- {
- HDC hDC;
- LRESULT rt = CallWindowProc(pCxp->wpPrev, pCxp->hWnd,
- WM_SETCURSOR,wParam, lParam);
- /*
- UINT nHitTest = LOWORD(lParam);
- switch(nHitTest)
- {
- case HTBORDER:
- case HTLEFT:
- case HTRIGHT:
- case HTTOP:
- case HTBOTTOM:
- case HTBOTTOMLEFT:
- case HTBOTTOMRIGHT:
- case HTTOPLEFT:
- case HTTOPRIGHT:
- pCxp->dwState &= CXPS_FOCUS;
- hDC = GetWindowDC(pCxp->hWnd);
- DlgDrawTitleBar(pCxp, (WPARAM)hDC);
- ReleaseDC(pCxp->hWnd, hDC);
- break;
- return 0;
- default:
- break;
- }
- */
- return rt;
- }
- LRESULT DlgOnSize(PCLASSXP pCxp, WPARAM wParam, LPARAM lParam)
- {
- RECT Rect;
- UINT nWidth = GetSystemMetrics(SM_CXDLGFRAME);
- UINT nHeight =GetSystemMetrics(SM_CYDLGFRAME);
- GetWindowRect(pCxp->hWnd, &Rect);
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- if (wParam == SIZE_MAXHIDE)
- return FALSE;
- if (IsZoomed(pCxp->hWnd))
- {
- //SelectClipRgn(GetWindowDC(pCxp->hWnd),NULL);
- SetWindowRgn(pCxp->hWnd, NULL,TRUE); // set window region to make rounded window
- DeleteObject((HGDIOBJ)pCxp->hRgn);
- pCxp->hRgn = NULL;
- }
- else if(wParam == SIZE_RESTORED)
- {
- /* GetWindowRect(pCxp->hWnd, &Rect);
- // MoveWindow(pCxp->hWnd, Rect.top,Rect.left, Rect.right, Rect.bottom, TRUE);
- // return TRUE;
- Rect.right -= Rect.left;
- Rect.bottom -= Rect.top;
- Rect.left = Rect.top = 0;
- //nWidth += LOWORD(lParam); // width of client area
- //nHeight += HIWORD(lParam); // height of client area
- nWidth = Rect.right;
- nHeight = Rect.bottom;
- if(pCxp->hRgn)
- DeleteObject((HGDIOBJ)pCxp->hRgn);
- pCxp->hRgn = CreateRoundRectRgn(0,0,nWidth,nHeight,16,16);
- SetWindowRgn(pCxp->hWnd,pCxp->hRgn,TRUE); // set window region to make rounded window
- */
- }
- // RedrawWindow(pCxp->hWnd, NULL, NULL,
- // RDW_UPDATENOW|RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ERASENOW);
- // 重画窗口
- return TRUE;
- }
- LRESULT DlgWindowProc(PCLASSXP pCxp, UINT message, WPARAM wParam, LPARAM lParam)
- {
- long lReturn;
- switch(message)
- {
- case WM_SIZE:
- return DlgOnSize(pCxp, wParam, lParam);
- case WM_INITMENUPOPUP: //
- return DlgOnSysCommand(pCxp,wParam,lParam);
- //return 0;
- case WM_NCPAINT: //1
- return DlgOnNcPaint(pCxp, wParam);
- case WM_NCACTIVATE: //2
- return DlgOnNcActive(pCxp,wParam,lParam);
- case WM_ACTIVATE: //3
- return DlgOnActive(pCxp, wParam,lParam);
- case WM_ACTIVATEAPP: //4
- return DlgOnActiveApp(pCxp,wParam,lParam);
- case WM_NOTIFY: //5
- return DlgOnNodify(pCxp, wParam,lParam);
- case WM_SETTEXT: //6
- return DlgOnSetText(pCxp, wParam,lParam);
- case WM_SETICON: //7
- return DlgOnSetIcon(pCxp, wParam,lParam);
- case WM_NCMOUSEMOVE: //8
- return DlgOnNcMouseMove(pCxp, wParam,lParam);
- case WM_NCLBUTTONDOWN: //9
- return DlgOnNcLMouseDown(pCxp, wParam,lParam);
- case WM_NCLBUTTONUP: //10
- DlgOnNcLMouseUp(pCxp, wParam,lParam);
- case WM_LBUTTONUP: //11
- return DlgOnLButtonUp(pCxp, wParam,lParam);
- case WM_MOUSEMOVE: //12
- return DlgOnMouseMove(pCxp, wParam,lParam);
- case WM_ERASEBKGND: //13
- return DlgOnEraseBackGround(pCxp, wParam,lParam);
- case WM_NCRBUTTONUP: //14
- return DlgOnNcRButtonUp(pCxp, wParam,lParam);
- case WM_NCRBUTTONDOWN: //15
- return DlgOnNcRButtonDown(pCxp,wParam,lParam);
- case WM_SYSCOMMAND: //16
- return DlgOnSysCommand(pCxp, wParam,lParam);
- case WM_SETCURSOR: //17
- return DlgOnSetCursor(pCxp, wParam,lParam);
- default:
- break;
- }
- // 调用原来的回调函数
- lReturn = CallWindowProc(pCxp->wpPrev, pCxp->hWnd, message, wParam, lParam);
- if (message == WM_NCDESTROY) // 窗口销毁
- DeleteClassXP(pCxp->hWnd);
- return lReturn;
-
-
- // return DefWindowProc(pCxp->hWnd, message, wParam, lParam);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- }
- #endif // __cplusplus
- ////////////////////////////////////////////////////////////////////////////////////////////////////
|