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

  • Live Event Date: September 23, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The cloud is not just about a runtime platform for your projects – now, you can do your development in the cloud, too. Check out this upcoming eseminar to learn how the cloud improves your development experience and team collaboration. Join Dana Singleterry, Principal Product Manager for Oracle Dev Tools, as he discusses how to simplify every aspect of the development lifecycle, including requirements gathering, version management, code …

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date