我试图建立一种机制,以允许用户右键点击并拖动工具栏上,以移动窗口上WM_NCMBUTTONDOWN ...没有收到标题栏
这被证明是非常困难的:
我目前没有收到HTCAPTION活动,我已经看到一个真正有用的帖子!
Not receiving WM_NCHitTest on title bar
的建议/这里的替代方法是使用WMNCMouseMove和检查的HitTest,看它是否是标题..所以我天真地认为我可以延长这个想法使用WMNCMButtonDown(代替)到让我更靠近一步!
如果这个工作,然后我可以得到类型的点击,即左,右,中间,双或单!这可以让我以某种方式告诉Windows,我希望这被视为拖动事件。
麻烦的是,我从来没有收到WM_NCMBUTTONDOW:
void __fastcall TForm1::Dispatch(void* message)
{
switch (static_cast<TMessage*>(message)->Msg)
{
case WM_NCHITTEST:
{
TWMNCHitTest &Message = *static_cast<TWMNCHitTest*>(message);
WMNCHitTest(Message);
break;
}
case WM_NCMOUSEMOVE:
{
TWMNCMouseMove &Message = *static_cast<TWMNCMouseMove*>(message);
WMNCMouseMove(Message);
break;
}
case WM_NCMBUTTONDOWN:
{
TWMNCMButtonDown &Message = *static_cast<TWMNCMouseMove*>(message);
WMNCMButtonDown(Message);
break;
}
default:
{
TForm::Dispatch(message);
break;
}
}
}
OES任何人有任何想法?
值得注意的是,我确实收到了其他类型的消息(WM_NCHITTEST & & WM_NCMOUSEMOVE),因此机制工作正常。
请任何想法将不胜感激!
感谢,
乔
你应该重写'的WndProc('方法,而不是' Dispatch()'方法。 –
即使我将此添加到WndProc函数,它仍然不会命中我的断点,即我从来没有得到WM_NCMBUTTONDOWN。我确实收到WM_NCMOUSEMOVE和其他消息? – Yos
根据MSDN文档:“如果窗口已捕获鼠标,则不会发布此消息。”在您期待该消息时,鼠标是否被捕获? 'GetCapture()'的返回值是什么? –