8. How do I let the user drag a window which has no titlebar?
There are several ways. One quick-n-dirty method is handle
the WM_NCHITTEST message and return HTCAPTION for the places where you want the user to be
able to drag (i.e., pretend your window has a caption when it doesn't).
For someone who wants to get nitty-gritty and cut the code
themselves (and doesn't care about the inefficiencies involved), the code below
demonstrates dragging using the right mouse button :
void CTestbed2Dlg::OnRButtonDown(UINT nFlags, CPoint
point)
{
ClientToScreen (&point);
m_LastPoint = point;
m_bMoving = TRUE;
}
// ------------------------------------------------------------------------
void CTestbed2Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
RECT cr;
ClientToScreen (&point);
if (m_bMoving)
{
if ((point.x != m_LastPoint.x) ||
(point.y != m_LastPoint.y) )
{
GetWindowRect (&cr);
int iX = cr.left - (m_LastPoint.x -
point.x);
int iY = cr.top - (m_LastPoint.y -
point.y);
int iWidth = cr.right - cr.left;
int iHeight = cr.bottom - cr.top;
MoveWindow (iX, iY, iWidth, iHeight);
}
m_LastPoint = point;
}
else
CDialog::OnMouseMove(nFlags, point);
}
// ------------------------------------------------------------------------
void CTestbed2Dlg::OnRButtonUp(UINT nFlags, CPoint point)
{
if (m_bMoving)
m_bMoving = FALSE;
else
CDialog::OnMButtonUp(nFlags, point);
}