这代码的确很老,网上也没别的了。。。。
LRESULT CbarDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 const int borderwidth = 7; CRect rect; GetClientRect(rect); ScreenToClient(&point); if (point.y < borderwidth) { return HTTOP; } if (point.x < borderwidth) { return HTLEFT; } if(point.y > rect.bottom - rect.top - borderwidth && point.x > rect.right - rect.left - borderwidth) return HTBOTTOMRIGHT; if (point.y > rect.bottom - rect.top - borderwidth) { return HTBOTTOM; } if (point.x > rect.right - rect.left - borderwidth) { return HTRIGHT; } return HTCAPTION; //return CDialog::OnNcHitTest(point); } void CbarDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nHitTest == HTTOP) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTBOTTOM) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTLEFT) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTRIGHT) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTTOPLEFT) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTTOPRIGHT) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTBOTTOMLEFT) SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y)); else if (nHitTest == HTBOTTOMRIGHT) SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y)); else if (nHitTest==HTCAPTION) SendMessage(WM_SYSCOMMAND, SC_MOVE | 4, MAKELPARAM(point.x, point.y)); }
另一种
LRESULT CSocketPhoneDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 static int m_TitleHeight = 5 , m_BorderLeftWidth = 5 , m_BorderRightWidth=5, m_BorderBottomHeight = 5; CWnd *pWnd = CWnd::FromHandle(m_hWnd); CRect wr; pWnd->GetWindowRect(wr); point.x -= wr.left; point.y -= wr.top; CRect rc; int cx = GetSystemMetrics(SM_CXSMICON); int cy = GetSystemMetrics(SM_CYSMICON); rc = CRect( 0, 0, m_BorderLeftWidth, m_TitleHeight ); if ( PtInRect( rc, point )) //!IsZoomed(m_hWnd) ) return HTTOPLEFT; rc = CRect( wr.Width() - m_BorderLeftWidth, 0, wr.Width(), m_TitleHeight ); if ( PtInRect( rc, point ) ) //!IsZoomed(m_hWnd) ) return HTTOPRIGHT; rc = CRect( 0, wr.Height() - m_BorderBottomHeight, m_BorderLeftWidth, wr.Height() ); if ( PtInRect( rc, point ) ) //!IsZoomed(m_hWnd) ) return HTBOTTOMLEFT; rc = CRect( wr.Width()-m_BorderRightWidth, wr.Height() - m_BorderBottomHeight, wr.Width(), wr.Height() ); if ( PtInRect( rc, point )) //!IsZoomed(m_hWnd) ) return HTBOTTOMRIGHT; rc = CRect( 0, m_TitleHeight, m_BorderLeftWidth, wr.Height() - m_BorderBottomHeight ); if ( PtInRect( rc, point )) //!IsZoomed(m_hWnd) ) return HTLEFT; rc = CRect( wr.Width()-m_BorderRightWidth, m_TitleHeight, wr.Width(), wr.Height() - m_BorderBottomHeight ); if ( PtInRect( rc, point ) ) //!IsZoomed(m_hWnd) ) return HTRIGHT; rc = CRect( m_BorderLeftWidth, wr.Height() - m_BorderBottomHeight, wr.Width()-m_BorderRightWidth, wr.Height() ); if ( PtInRect( rc, point ) ) //!IsZoomed(m_hWnd) ) return HTBOTTOM; rc = CRect( m_BorderLeftWidth, 0, wr.Width()-m_BorderRightWidth, m_BorderBottomHeight ); if ( PtInRect( rc, point )) //!IsZoomed(m_hWnd) ) return HTTOP; return HTCLIENT; return CDialogEx::OnNcHitTest(point); }