现在的位置: 首页 > 综合 > 正文

无标题窗口拖动

2012年09月19日 ⁄ 综合 ⁄ 共 3039字 ⁄ 字号 评论关闭
这代码的确很老,网上也没别的了。。。。
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);
}

抱歉!评论已关闭.