|
|
Home » U++ Library support » U++ Widgets - General questions or Mixed problems » DockCtrl (A dockable window widget for U++)
Re: DockCtrl (A dockable window widget for U++) [message #11868 is a reply to message #11867] |
Fri, 28 September 2007 21:40   |
Oblivion
Messages: 1202 Registered: August 2007
|
Senior Contributor |
|
|
luzr wrote on Fri, 28 September 2007 21:59 |
Well, what is your need for WM_NCLBUTTONUP and what is the bug?
|
Ok, let me explain. Dockwindows are basically derived from "DockableCtrl" class, which is actually a derivative of TopWindow. So it is possible to use it at the same time as a ctrl, and as a window. In their "docked state" they act as a ctrl and in their "float state" they are detached (dragged/teared) from their panes and activated as tool windows. When a dockwindow is teared off/dragged in solid window dragging(with the Dockablectrl::Float()/FloatEx method), it has to receive mouse messages immediately, because it is from then on in a "dragging state". This can be done easily by sending a fake WM_NCLBUTTONDOWN message with HTCAPTION parameter; by this command, system is faked to believe that mouse is dragging a "window" from it's titlebar. Here is the sequence.
1. Drag Dock from its "dragbar"(from the title bar of the dock)
This is done by LeftDrag(). So the left mouse is, from now on, "down"
2. Remove() dock from its pane.
3. Open it as a child toolwindow under the cursor position.
4. Immediately Send a WM_NCLBUTTONDOWN message explicitly (with HTCAPTION as wparam). (because, the Lmousebutton is still down.)
5. Move window.
6. Drop (theoretically, the window should send WM_NCLBUTTONUP so we could get the drag/drop state, but it doesnt; so we use the mouse patch we already installed when we invoke the Float() command and send the WM_NCLBUTTONUP command manually).
This is the actual tear-off/drag sequence. 
(As you can see this in the executable example (0.49.7a) I've posted. This is how a solid window drag sequence can be made possible on Win32, Or maybe I don't know the way, ayn suggestions will be very useful). But unfortunately windows from XP on does not send the proper WM_NCLBUTTONUP message to the window's message pump when the left button is released on the NC area! So it couldn't "drop" at first time when mouse button is released. It is clearly stated in the MSDN that it does, but in fact it doesn't. It is a well known bug/behaviour.
So as you see, in this case the standard U++ leftup or leftdown won't work because those messages only handle AFAIK the client area. Is there something I don't know about it?
Here is the problem and the hook solution is explained:
http://www.codeguru.com/cpp/misc/misc/windowsmessaging/artic le.php/c3885/
I use a modified version of this mouse hook, So the article could give you a clear idea about the problem, solution and (hopefully) a better solution suggestion from you 
Here is the modified code
//======================================================
// Original code by Robert Wiejak, (c) 2001.
//
//
#ifdef PLATFORM_WIN32
LRESULT DockCtrl::Win32MessagePatch(int code, WPARAM wParam, LPARAM lParam)
{
if(code == 0)
{
PMOUSEHOOKSTRUCT mousehookstruct = (PMOUSEHOOKSTRUCT) lParam;
DockableCtrl* dock = ::__dctrlptr->ptr->FindDockWindow(mousehookstruct->hwnd);
{
switch(wParam)
{
case WM_NCLBUTTONDOWN:
if(dock && mousehookstruct->wHitTestCode == HTCAPTION) dock->Dragging(TRUE);
break;
case WM_NCLBUTTONUP:
if(dock) dock->Dragging(FALSE);
break;
case WM_LBUTTONUP:
{
DockableCtrl *target = NULL;
if(dock && dock->IsDragged()) target = dock;
else
target = ::__dctrlptr->ptr->FindDraggedWindow();
if(target)
{
::PostMessage(target->GetHWND(), WM_NCLBUTTONUP, HTCAPTION, MAKELONG(mousehookstruct->pt.x, mousehookstruct->pt.y));
target->Dragging(FALSE);
}
}
break;
default:
break;
}
}
}
//===============================================
Regards.
Github page: https://github.com/ismail-yilmaz
upp-components: https://github.com/ismail-yilmaz/upp-components
Bobcat the terminal emulator: https://github.com/ismail-yilmaz/Bobcat
[Updated on: Fri, 28 September 2007 22:24] Report message to a moderator
|
|
|
 |
|
DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 15 September 2007 16:48
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Sat, 15 September 2007 16:58
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mezise on Sat, 15 September 2007 17:39
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 15 September 2007 18:25
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Sat, 15 September 2007 18:48
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 18 September 2007 14:01
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Tue, 18 September 2007 14:31
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Tue, 18 September 2007 20:35
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Tue, 18 September 2007 20:40
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 18 September 2007 21:05
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 19 September 2007 13:04
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 19 September 2007 14:27
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 26 September 2007 14:57
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 26 September 2007 21:49
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 26 September 2007 22:20
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Fri, 28 September 2007 12:58
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 15:18
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Fri, 28 September 2007 16:00
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 September 2007 16:49
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 18:38
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 September 2007 18:57
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 20:59
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 September 2007 21:40
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 22:09
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 September 2007 22:13
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Sat, 29 September 2007 00:15
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 29 September 2007 00:43
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Sat, 29 September 2007 01:13
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 29 September 2007 01:29
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Sat, 29 September 2007 08:42
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 29 September 2007 11:11
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 18:24
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 15:16
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 September 2007 16:59
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Fri, 28 September 2007 18:27
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 29 September 2007 00:09
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 07 October 2007 02:52
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Sun, 07 October 2007 09:43
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 07 October 2007 11:22
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mirek on Sun, 07 October 2007 10:26
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Sun, 07 October 2007 11:04
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 07 October 2007 11:16
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 07 October 2007 18:58
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 13 October 2007 14:13
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Sat, 13 October 2007 17:10
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Sat, 13 October 2007 17:19
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 13 October 2007 18:07
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 27 October 2007 12:01
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 07 November 2007 20:18
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 11 November 2007 00:16
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Mon, 12 November 2007 15:40
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Mon, 12 November 2007 23:12
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Tue, 13 November 2007 16:14
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 13 November 2007 21:51
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 14 November 2007 09:10
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Wed, 14 November 2007 11:46
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 14 November 2007 13:15
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Wed, 14 November 2007 16:47
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 14 November 2007 17:08
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Wed, 14 November 2007 17:54
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 15 January 2008 02:03
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Tue, 15 January 2008 08:59
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Tue, 15 January 2008 14:34
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Tue, 15 January 2008 20:58
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: forlano on Tue, 15 January 2008 09:40
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 17 February 2008 05:00
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Mon, 18 February 2008 03:22
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 20 February 2008 01:48
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Wed, 20 February 2008 13:23
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 20 February 2008 13:42
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 20 February 2008 14:37
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 20 February 2008 14:56
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Wed, 20 February 2008 15:06
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 20 February 2008 15:08
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 20 February 2008 16:25
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 20 February 2008 19:00
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 21 February 2008 02:19
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 21 February 2008 10:35
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Thu, 21 February 2008 12:15
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Thu, 21 February 2008 13:23
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 21 February 2008 14:18
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Thu, 21 February 2008 13:38
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Thu, 21 February 2008 15:04
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Thu, 21 February 2008 15:43
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Thu, 21 February 2008 18:06
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Thu, 21 February 2008 19:27
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Thu, 21 February 2008 21:04
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Fri, 22 February 2008 14:33
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 22 February 2008 14:57
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Fri, 22 February 2008 15:20
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Fri, 22 February 2008 15:26
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 22 February 2008 15:31
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Fri, 22 February 2008 15:48
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 22 February 2008 16:14
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Wed, 27 February 2008 10:13
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Wed, 27 February 2008 10:37
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 27 February 2008 12:57
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 22 February 2008 16:23
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Fri, 22 February 2008 16:27
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 21 February 2008 20:27
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: unodgs on Thu, 21 February 2008 20:54
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 21 February 2008 21:31
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 21 February 2008 14:27
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 23 February 2008 03:14
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Sat, 23 February 2008 13:38
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 23 February 2008 14:22
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Sat, 23 February 2008 22:35
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 24 February 2008 00:22
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 24 February 2008 01:18
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Sun, 24 February 2008 15:34
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Sun, 24 February 2008 16:11
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sun, 24 February 2008 17:44
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Mon, 25 February 2008 10:35
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Mon, 25 February 2008 19:32
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Sc0rch on Tue, 26 February 2008 01:05
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 26 February 2008 02:14
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Sc0rch on Tue, 26 February 2008 06:58
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 26 February 2008 10:41
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 27 February 2008 00:41
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Sc0rch on Wed, 27 February 2008 22:37
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Wed, 27 February 2008 23:20
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Sc0rch on Thu, 28 February 2008 14:48
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Thu, 28 February 2008 15:00
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Sc0rch on Fri, 29 February 2008 02:22
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 29 February 2008 07:21
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Fri, 29 February 2008 17:18
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 21 March 2008 23:24
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Sc0rch on Sat, 22 March 2008 04:41
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Sat, 22 March 2008 12:59
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: mrjt on Tue, 25 March 2008 14:07
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Tue, 25 March 2008 14:54
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 March 2008 03:15
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Fri, 28 March 2008 14:52
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 March 2008 15:39
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: masu on Fri, 28 March 2008 15:55
|
 |
|
Re: DockCtrl (A dockable window widget for U++)
By: Oblivion on Fri, 28 March 2008 16:14
|
Goto Forum:
Current Time: Sun Apr 27 02:54:51 CEST 2025
Total time taken to generate the page: 0.01038 seconds
|
|
|