123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649 |
- // DialogExt.cpp: implementation of the CDialogExt class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "DialogExt.h"
- #include "resource.h"
- #include "library.h"
- #include "ylgl.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- #include ".\scrollbar\coolscroll.h"
- void InitTest(void);
- LRESULT HandleCustomDraw(UINT, NMCSBCUSTOMDRAW *);
- HDC hdcCoolSkin;
- HBITMAP hCoolSkinBmp;
- BOOL fCustomDraw = FALSE;
- BOOL fButtons = FALSE;
- BOOL fThumbAlways = FALSE;
- BOOL fLeftScroll = FALSE;
- BOOL fEnableCSB = TRUE;
-
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- HWND CDialogExt::m_hWnd=NULL;
- WNDPROC CDialogExt::m_cWndProc = NULL;
- CBitmap CDialogExt::m_bmptop;
- CBitmap CDialogExt::m_bmpclose;
- CBitmap CDialogExt::m_bmpmax;
- CBitmap CDialogExt::m_bmpmin;
- CBitmap CDialogExt::m_bmprestore;
- int CDialogExt::m_height=0;
- int CDialogExt::m_width=0;
- int CDialogExt::m_buttonstate=0;
- CFont CDialogExt::m_CaptionFont;
- void RedrawNC(HWND hwnd)
- {
- SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|
- SWP_FRAMECHANGED|SWP_DRAWFRAME);
- }
- void InitTest(void)
- {
- if(hCoolSkinBmp)return;
- hdcCoolSkin = CreateCompatibleDC(0);
- CBitmap bmp;
- AfxSetResourceHandle(GetModuleHandle(NULL));
- bmp.LoadBitmap (IDB_SCROLL);
-
- hCoolSkinBmp = (HBITMAP)bmp.m_hObject ;
- SelectObject(hdcCoolSkin, hCoolSkinBmp);
- }
- BOOL CALLBACK EnumChildProcDlg(HWND hwnd,LPARAM lParam)
- {
- char sClassName[201] = "\0";
- if(hwnd)
- {
- GetClassName( hwnd, sClassName, 200 );
- if( strcmp( sClassName, "Edit" ) == 0 ||strcmp( sClassName, "ListBox" ) == 0||strcmp( sClassName, "ComboBox" ) == 0)
- {
- InitTest();
- InitializeCoolSB(hwnd);
- fCustomDraw=1;
- CoolSB_SetSize(hwnd, SB_BOTH, SYSTEM_METRIC, SYSTEM_METRIC);
- CoolSB_SetMinThumbSize(hwnd, SB_BOTH, (UINT)-1);
- }
- return TRUE;
- }
- else
- {
- return FALSE;
- }
- }
- void CDialogExt::Init()
- {
- // AfxSetResourceHandle(GetModuleHandle(NULL));
- m_bmptop.LoadBitmap(IDB_TITLE);
- m_bmpclose.LoadBitmap(IDB_CLOSE);
- m_bmpmax.LoadBitmap(IDB_MAX);
- m_bmpmin.LoadBitmap(IDB_MIN);
- m_bmprestore.LoadBitmap(IDB_RESTORE);
- BITMAP bm;
- memset( &bm, 0, sizeof(bm) );
- m_bmptop.GetBitmap(&bm);
- m_height=bm.bmHeight;
- m_width=bm.bmWidth ;
- m_CaptionFont.CreatePointFont( GetSystemMetrics(SM_CYSMCAPTION), "System" );
- g_frameedgebrush=CreateSolidBrush(RGB(85, 119, 217));
- g_frameedgepen=::CreatePen (PS_SOLID, 1, RGB(85, 119, 217));
- if(g_crDialogbkColor==0)
- g_crDialogbkColor=RGB(204,204,204);
- }
- CRect CDialogExt::GetMaximizeRect()
- {
- CRect r;
- SystemParametersInfo(SPI_GETWORKAREA, 0, r, 0);
- return r;
- }
- LRESULT CDialogExt::DefWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
- {
- m_hWnd=hWnd;
- CWnd *pWnd = NULL;
- CPoint point;
- pWnd = CWnd::FromHandle( hWnd );
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( hWnd, (void*&)m_wndstate) )
- {
- m_cWndProc=m_wndstate->oldWndProc ;
- DWORD style=GetWindowLong(hWnd, GWL_STYLE);
- if(((style & WS_CHILD) == WS_CHILD||(style & WS_CAPTION) != WS_CAPTION)&&(message!=WM_INITDIALOG&&message!=WM_NOTIFY))
- {
- return CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- }
- }
- switch( message )
- {
- case WM_NOTIFY:
- {
- NMHDR *hdr = (NMHDR *)lParam;
- if(hdr->code == NM_COOLSB_CUSTOMDRAW)
- {
- return HandleCustomDraw(wParam, (NMCSBCUSTOMDRAW *)lParam);
- }
- break;
- }
- case WM_INITDIALOG:
- {
- int ret=CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProcDlg,0);
- return ret;
- }
- case WM_SETTEXT:
- {
- CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- OnNcPaint( pWnd );
- return 0;
- }
- case WM_NCCALCSIZE:
- OnNcCalcSize( (BOOL)wParam, (NCCALCSIZE_PARAMS *)lParam );
- return 0;
- case WM_NCPAINT:
- {
- OnNcPaint( pWnd );
- return 0;
- }
- case WM_SIZE:
- {
- if(::IsZoomed (m_hWnd))
- Maximize();
- CRect wr;
- pWnd->GetWindowRect (&wr);
- CRgn rgn;
- rgn.CreateRoundRectRgn(0 , 0, wr.Width()+1, wr.Height()+10,8,6);
- pWnd->SetWindowRgn ((HRGN)rgn, TRUE);
- break;
- }
- case WM_ACTIVATE:
- case WM_NCACTIVATE:
- {
- OnNcPaint( pWnd );
- return 1;
- }
- case WM_DESTROY:
- {
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
- {
- delete m_wndstate;
- g_ctrlMap.RemoveKey( m_hWnd );
- }
- break;
- }
- case WM_NCLBUTTONDOWN:
- if(!OnNcLButtonDown(wParam, CPoint(LOWORD(lParam), HIWORD(lParam))))
- return 0;
- else
- break;
- case WM_NCLBUTTONUP:
- OnNcLButtonUp(wParam, CPoint(LOWORD(lParam), HIWORD(lParam)));
- return 0;
- case WM_NCLBUTTONDBLCLK:
- OnNcLButtonDblClk(wParam, CPoint(LOWORD(lParam), HIWORD(lParam)));
- return 0;
- case WM_NCMOUSEMOVE:
- OnNcMouseMove( wParam,CPoint(LOWORD(lParam), HIWORD(lParam)));
- return 0;
- case WM_CTLCOLORSTATIC:
- {
- HDC hdc=(HDC)wParam;
- HWND hwnd=(HWND)lParam;
- ::SetBkMode (hdc, TRANSPARENT);
-
- char szTemp[MAX_PATH];
- GetClassName(hwnd, szTemp, sizeof(szTemp));
- if (lstrcmpi(szTemp, "Edit") == 0)
- {
- CRect rc,rc2;
- ::GetWindowRect (hwnd, rc);
- CPoint pt1,pt2;
- pt1=rc.TopLeft ();
- pt2=rc.BottomRight ();
- ::ScreenToClient (::GetParent (hwnd), &pt1);
- ::ScreenToClient (::GetParent (hwnd), &pt2);
- rc.left =pt1.x;
- rc.top =pt1.y;
- rc.right =pt2.x;
- rc.bottom =pt2.y;
- rc2=rc;
- rc.DeflateRect (2, 2, 2, 2);
- ::SetBkColor(hdc, RGB(128, 162, 223) );
- if(g_pMainWnd2->m_pBk)
- {
- HDC hdc2=::GetDC (::GetParent (hwnd));
-
- Graphics graph(hdc2);
- Rect destinationRect(rc.left,rc.top,rc.Width (), rc.Height ());
- rc=g_pMainWnd2->m_rcarray.ElementAt (16);
- rc2.left +=rc.left ;
- rc2.right +=rc.left ;
- rc2.top +=rc.top ;
- rc2.bottom +=rc.top ;
- rc=rc2;
- rc.left /=g_fscalex;
- rc.right /=g_fscalex;
- rc.top /=g_fscaley;
- rc.bottom /=g_fscaley;
- graph.DrawImage(g_pMainWnd2->m_pBk, destinationRect, rc.left , rc.top ,rc.Width (), rc.Height (),UnitPixel);
- ::ReleaseDC (::GetParent (hwnd), hdc2);
- }
- }
- return (INT_PTR)::GetStockObject(NULL_BRUSH);
- }
- case WM_ERASEBKGND:
- #ifdef NEW_SKIN
- if(g_pMainWnd2->m_pBk)
- {
- CRect rc;
- pWnd->GetClientRect (rc);
- HDC hdc=(HDC)wParam;
-
- // ::FillRect (hdc, rc, (HBRUSH)::GetStockObject (WHITE_BRUSH));
- Graphics graph(hdc);
- Rect destinationRect(0,0,rc.Width (), rc.Height ());
- rc=g_pMainWnd2->m_rcarray.ElementAt (16);
- rc.left /=g_fscalex;
- rc.right /=g_fscalex;
- rc.top /=g_fscaley;
- rc.bottom /=g_fscaley;
- graph.SetSmoothingMode(SmoothingModeHighQuality);
- graph.DrawImage(g_pMainWnd2->m_pBk, destinationRect, rc.left , rc.top ,rc.Width (), rc.Height (),UnitPixel);
- return 1;
- }
- #else
- return CDialog::OnEraseBkgnd(pDC);
- #endif
- default:
- break;
- }
- return CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
- }
-
- void CDialogExt::OnNcPaint(CWnd* pWnd )
- {
- CDC * pDC = pWnd->GetWindowDC();
- CRect wr;
- pWnd->GetWindowRect( wr );
- CDC memdc;
- memdc.CreateCompatibleDC(pDC);
- CBitmap *pOldBmp=memdc.SelectObject(&m_bmptop);
- CBrush brush;
- CBrush brush2;
- bool m_bActive;
- if(m_hWnd==GetForegroundWindow ())
- m_bActive=true;
- else
- m_bActive=false;
- if(m_bActive)
- {
- brush.CreateSolidBrush (RGB(0,33,169));
- brush2.CreateSolidBrush (RGB(8,85,221));
- pDC->StretchBlt(0, 0, wr.Width (), m_height, &memdc, 0, 0, m_width, m_height, SRCCOPY);
- }
- else
- {
- brush.CreateSolidBrush (RGB(122,150,223));
- brush2.CreateSolidBrush (RGB(122,150,223));
- pDC->FillRect (CRect(0,0,wr.Width (), m_height), &brush2);
- }
- memdc.SelectObject(pOldBmp);
- pDC->FillRect (CRect(0,0,3,wr.Height ()), &brush2);
- pDC->FillRect (CRect(wr.Width()-3,0,wr.Width(),wr.Height ()), &brush);
- pDC->FillRect (CRect(0,wr.Height ()-3,wr.Width(),wr.Height ()), &brush);
- ////////////////////////////////////////////
- if ( m_buttonstate == 3 )
- DrawButton( pDC, 0, 2 );
- else if ( m_buttonstate == 6)
- DrawButton( pDC, 0, 1 );
- else
- DrawButton( pDC, 0, 0 );
-
- if ( m_buttonstate == 1 )
- DrawButton( pDC, 2, 2 );
- else if ( m_buttonstate == 4)
- DrawButton( pDC, 2, 1 );
- else
- DrawButton( pDC, 2, 0 );
- if ( m_buttonstate == 2 )
- DrawButton( pDC, 1, 2 );
- else if ( m_buttonstate == 5)
- DrawButton( pDC, 1, 1 );
- else
- DrawButton( pDC, 1, 0 );
- ////////////////////////////////////////////
- wr.left=5;
- if ( pWnd->GetStyle () & WS_SYSMENU )
- {
- HICON hIcon=(HICON)::SendMessage(m_hWnd, WM_QUERYDRAGICON, 0, 0);
- if ( hIcon != NULL )
- {
- ::DrawIconEx(pDC->m_hDC, 5, 4, hIcon, 16, 16, 0, NULL, DI_NORMAL);
- wr.left +=19;
- }
- }
- CString m_title;
- pWnd->GetWindowText(m_title);
- if (m_bActive)
- pDC->SetTextColor( RGB(255,255,255) );
- else
- pDC->SetTextColor( RGB(192,192,192) );
- CFont *oldfont;
- oldfont = pDC->SelectObject(&m_CaptionFont);
- pDC->SetBkMode(TRANSPARENT);
- pDC->DrawText( m_title, CRect( wr.left, 0, wr.Width (), m_height ), DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_WORD_ELLIPSIS );
- pDC->SelectObject(oldfont);
- }
- BOOL CDialogExt::Draw( CDC *pDC, int x, int y, LPRECT sr , CBitmap &bmp)
- {
- CDC dc;
- dc.CreateCompatibleDC( pDC );
- CBitmap * oldbmp = dc.SelectObject( &bmp );
- int a=sr->right - sr->left;
- int b=sr->bottom - sr->top;
- if ( sr != NULL)
- pDC->BitBlt( x, y, sr->right - sr->left, sr->bottom - sr->top, &dc, sr->left, sr->top, SRCCOPY );
- dc.SelectObject( oldbmp );
- return TRUE;
- }
- void CDialogExt::Maximize()
- {
- CRect r = GetMaximizeRect();
- ::MoveWindow( m_hWnd, r.left, r.top, r.Width(), r.Height(), TRUE );
- UpdateWindow( m_hWnd );
- }
- void CDialogExt::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS *lpncsp)
- {
- if ( bCalcValidRects )
- {
- lpncsp->rgrc[0].left = lpncsp->rgrc[0].left + 3;
- lpncsp->rgrc[0].right = lpncsp->rgrc[0].right - 3;
- lpncsp->rgrc[0].top = lpncsp->rgrc[0].top + 23;
- lpncsp->rgrc[0].bottom = lpncsp->rgrc[0].bottom - 3;
- lpncsp->rgrc[1] = lpncsp->rgrc[0];
- }
- }
- BOOL CDialogExt::DrawButton( CDC * pDC, int i, int state)
- {
- bool m_maxable;
- bool m_minable;
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
- {
- m_maxable=m_wndstate->m_maxable ;
- m_minable=m_wndstate->m_minable ;
- }
- if ( i == 0 )
- {
- // if ( m_bmpCloseBtn.GetSafeHandle() )
- // {
- CRect r = GetButtonRect(0);
- Draw( pDC, r.left, r.top, CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), 21 ), m_bmpclose );
- // }
- }
- if ( i == 1 )
- {
- CRect r = GetButtonRect(1);
- if ( m_maxable )
- {
- //if ( m_winstate == 1)
- Draw( pDC, r.left, r.top, CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), 21 ), m_bmprestore );
- //else
- // m_bmpMaxBtn.Draw( pDC, r.left, r.top,
- // CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ) , m_colTrans, m_bTrans);
- }
- }
- if ( i == 2 )
- {
- if ( m_minable )
- {
- CRect r = GetButtonRect(2);
- Draw( pDC, r.left, r.top, CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), 21 ) , m_bmpmin);
- }
- }
- return TRUE;
- }
- CRect CDialogExt::GetButtonRect(int i)
- {
- CWnd *pWnd = CWnd::FromHandle(m_hWnd);
- CRect wr;
- pWnd->GetWindowRect(wr);
- CRect r=CRect(CPoint(wr.Width () -2*4-3*21-4, 1),CSize(21,21));
- if ( i == 0 )//&& m_bmpCloseBtn.GetSafeHandle() )
- {
- //close
- r.left += 21*2+2*3;
- r.right += 21*2+2*3;
- }
- if ( i == 1 )//&& m_bmpMaxBtn.GetSafeHandle())
- {
- //max
-
- r.left += 21+3;
- r.right += 21+3;
-
- }
- if ( i == 2 )//&& m_bmpMinBtn.GetSafeHandle())
- {
- //min
- r.left += 0;
- r.right += 0;
- }
- return r;
- }
- bool CDialogExt::OnNcLButtonDown(UINT nHitTest, CPoint point)
- {
- CWnd *pWnd = CWnd::FromHandle(m_hWnd);
- CRect wr;
- CDC * pDC = pWnd->GetWindowDC();
- pWnd->GetWindowRect(wr);
- point.x -= wr.left;
- point.y -= wr.top;
- bool m_maxable;
- bool m_minable;
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
- {
- m_maxable=m_wndstate->m_maxable ;
- m_minable=m_wndstate->m_minable ;
- }
- if ( PtInRect( GetButtonRect(0), point ) )
- {
- m_buttonstate=0;
- // SendMessage(m_hWnd, WM_CLOSE, 0,0);
- //return 0;
- }
- else if ( PtInRect( GetButtonRect(2), point ) && m_minable )
- {
- m_buttonstate=4;
- // SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
- }
- else if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
- {
- m_buttonstate=5;
- /* if (IsZoomed(m_hWnd))
- {
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
- }
- else
- {
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
- }*/
- }
- /* else if(PtInRect( CRect(5,4,21,20), point )&& (pWnd->GetStyle () & WS_SYSMENU))
- {
- CPoint pt=CPoint(0,0);
- ::ClientToScreen (m_hWnd, &pt);
- PopupSysMenu(pt);
- return 0;
- }*/
- else
- {
- return 1;
- }
- if ( m_buttonstate == 3 )
- DrawButton( pDC, 0, 2 );
- else if ( m_buttonstate == 6)
- DrawButton( pDC, 0, 1 );
- else
- DrawButton( pDC, 0, 0 );
-
- if ( m_buttonstate == 1 )
- DrawButton( pDC, 2, 2 );
- else if ( m_buttonstate == 4)
- DrawButton( pDC, 2, 1 );
- else
- DrawButton( pDC, 2, 0 );
- if ( m_buttonstate == 2 )
- DrawButton( pDC, 1, 2 );
- else if ( m_buttonstate == 5)
- DrawButton( pDC, 1, 1 );
- else
- DrawButton( pDC, 1, 0 );
- return 0;
- }
-
- void CDialogExt::OnNcLButtonUp(UINT nHitTest, CPoint point)
- {
- CWnd *pWnd = CWnd::FromHandle(m_hWnd);
- CRect wr;
- CDC * pDC = pWnd->GetWindowDC();
- pWnd->GetWindowRect(wr);
- point.x -= wr.left;
- point.y -= wr.top;
- bool m_maxable;
- bool m_minable;
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
- {
- m_maxable=m_wndstate->m_maxable ;
- m_minable=m_wndstate->m_minable ;
- }
- if ( PtInRect( GetButtonRect(0), point ) )
- {
- m_buttonstate=0;
- SendMessage(m_hWnd, WM_CLOSE, 0,0);
- return ;
- }
- else if ( PtInRect( GetButtonRect(2), point ) && m_minable )
- {
- m_buttonstate=4;
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
- }
- else if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
- {
- m_buttonstate=5;
- if (IsZoomed(m_hWnd))
- {
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
- }
- else
- {
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
- }
- }
- if ( m_buttonstate == 3 )
- DrawButton( pDC, 0, 2 );
- else if ( m_buttonstate == 6)
- DrawButton( pDC, 0, 1 );
- else
- DrawButton( pDC, 0, 0 );
-
- if ( m_buttonstate == 1 )
- DrawButton( pDC, 2, 2 );
- else if ( m_buttonstate == 4)
- DrawButton( pDC, 2, 0 );
- if ( m_buttonstate == 2 )
- DrawButton( pDC, 1, 2 );
- else if ( m_buttonstate == 5)
- DrawButton( pDC, 1, 0 );
- m_buttonstate=0;
- }
- void CDialogExt::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
- {
- bool m_maxable;
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
- {
- m_maxable=m_wndstate->m_maxable ;
- if(!m_maxable)return;
- }
- if (IsZoomed(m_hWnd))
- // 如果已经最大化,发送SC_RESTORE给主进程,要求恢复窗口
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
- else
- // 如果未最大化,发送SC_MAXIMIZE给主进程,要求最大化窗口
- SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
- }
- void CDialogExt::OnNcMouseMove(UINT nHitTest, CPoint point)
- {
- CWnd *pWnd = CWnd::FromHandle(m_hWnd);
- CDC * pDC = pWnd->GetWindowDC();
- CRect wr;
- pWnd->GetWindowRect(wr);
- point.x -= wr.left;
- point.y -= wr.top;
- bool m_maxable;
- bool m_minable;
- WNDSTATE *m_wndstate;
- if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
- {
- m_maxable=m_wndstate->m_maxable ;
- m_minable=m_wndstate->m_minable ;
- }
- if ( PtInRect( GetButtonRect(0), point ) )
- m_buttonstate=3;
- //return HTCLOSE;
- else if ( PtInRect( GetButtonRect(2), point ) && m_minable )
- m_buttonstate=1;
- // return HTMINBUTTON;
- else if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
- m_buttonstate=2;
- if ( m_buttonstate == 3 )
- DrawButton( pDC, 0, 2 );
- else if ( m_buttonstate == 6)
- DrawButton( pDC, 0, 1 );
- else
- DrawButton( pDC, 0, 0 );
-
- if ( m_buttonstate == 1 )
- DrawButton( pDC, 2, 2 );
- else if ( m_buttonstate == 4)
- DrawButton( pDC, 2, 1 );
- else
- DrawButton( pDC, 2, 0 );
- if ( m_buttonstate == 2 )
- DrawButton( pDC, 1, 2 );
- else if ( m_buttonstate == 5)
- DrawButton( pDC, 1, 1 );
- else
- DrawButton( pDC, 1, 0 );
- m_buttonstate=0;
- }
|