Dragging a dialog by clicking anywhere on it

This is how you create a dialog that can be dragged by clicking anywhere on it, ie. not just the caption bar.
void CNCHitDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CDialog::OnLButtonDown(nFlags, point); 
	// fake windows into thinking your clicking on the caption, does not
	// maximize on double click
	PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
} 
or
UINT CNCHitDlg::OnNcHitTest(CPoint point) 
{
	UINT nHitTest = CDialog::OnNcHitTest( point );
	// also fake windows out, but this maximizes the window when you double
	// click on it. 
	return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}



Comments

  • it works excellent except clicked on menu area!

    Posted by showhigh on 01/06/2006 07:13am

    how to solve it?

    Reply
  • Elegant Simplicity!

    Posted by jgazin on 05/21/2004 06:41pm

    I was about to do this the brute force way using "LButtonDown", "LButtonUp" and "MouseMove" with a whole bunch of code. 
    I'm glad I checked CodeGuru first!
    Thanks!!!

    Reply
  • How to drag a dialog playing movie on it.?

    Posted by Legacy on 08/21/2003 12:00am

    Originally posted by: Nick

    Hi there.,

    How to drag a dialog playing movie on it (on a picture control) by grabbing anywhere .?


    Thanks .!

    Best Regards,
    Nick.

    Reply
  • Win32 only ? (no class, no MFC) Click here...

    Posted by Legacy on 06/11/2003 12:00am

    Originally posted by: maya75

    First thank for your tip.
    
    

    To do it with Win32 only, in your dialog CALLBACK function :

    case WM_LBUTTONDOWN:
    {
    int xPos = LOWORD(lParam); // horizontal position of cursor
    int yPos = HIWORD(lParam); // vertical position of cursor
    // Drag window by clicking anywhere on it
    PostMessage(dialog_handle, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( xPos, yPos));
    break;
    }

    Reply
  • great

    Posted by Legacy on 04/03/2003 12:00am

    Originally posted by: beinerror

    thank you very much for this!!

    Reply
  • How can I do that with CFrameWnd

    Posted by Legacy on 02/02/2002 12:00am

    Originally posted by: Gandalf

    How can I do the same thing but catching the view in application with CFrameWnd as main window. When I try to use both methods you've mentioned I can only move the view inside the frame, not the frame.

    Reply
  • DOESNT WORK AT ALL!!!

    Posted by Legacy on 12/13/2001 12:00am

    Originally posted by: Boogly POO

    I tried both methods and no luck for me. I even tried again by starting a brand new mfc dialog app with nothing in the dialog box, and it still didnt work.

    HELP!!!

    Reply
  • But it cannot work in WinCE!

    Posted by Legacy on 12/10/2001 12:00am

    Originally posted by: jiajia

    But it cannot work in WinCE.

    MFC for Windows CE does not support the following method of the CWnd class:

    OnNcHitTest

    Reply
  • Moving dialog with button

    Posted by Legacy on 12/07/2001 12:00am

    Originally posted by: Neal

    Hi,
    
    

    I have a dialog with a button placed on it, how would I move the dialog by holding the mouse down over the button and dragging.

    I have tride lots of different things but have had no success.

    Any help would so cool.

    Reply
  • Another solution for ATL

    Posted by Legacy on 11/01/2001 12:00am

    Originally posted by: Nikolay Yankov

    I use previous solution (of Jens Rahm) to drag dynamically added ActiveX controls in client area of ATL Composite Control.
    
    The code is:

    LRESULT CStoreRow::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    if(m_iLButtonDown)
    {
    ::ReleaseCapture();
    HWND hWndParent = GetParent();
    ::SendMessage(hWndParent, WM_NCLBUTTONDOWN, HTCAPTION, 0);

    }

    return 0;
    }


    Thank you Jens Rahm

    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: September 10, 2014 Modern mobile applications connect systems-of-engagement (mobile apps) with systems-of-record (traditional IT) to deliver new and innovative business value. But the lifecycle for development of mobile apps is also new and different. Emerging trends in mobile development call for faster delivery of incremental features, coupled with feedback from the users of the app "in the wild." This loop of continuous delivery and continuous feedback is how the best mobile …

  • Java developers know that testing code changes can be a huge pain, and waiting for an application to redeploy after a code fix can take an eternity. Wouldn't it be great if you could see your code changes immediately, fine-tune, debug, explore and deploy code without waiting for ages? In this white paper, find out how that's possible with a Java plugin that drastically changes the way you develop, test and run Java applications. Discover the advantages of this plugin, and the changes you can expect to see …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds