您一定以为我在哗众取宠,这么简单的问题谁都会,然而,这个问题却有着极复杂的一面?打开控制面版里的“显示属性”,翻到“效果”页,可以看到有一项是“拖动时显示窗口内容”。当这一项没有被钩上时,拖动任何窗体时都只会显示一个线框,当结束拖动时窗口才移过去。当这项被钩上后,拖动窗体的同时,窗体便即时的移动到目标位置了。如果我们用程序来控制窗体的拖动,比如加入一个“用鼠标拖动窗体的客户区即拖动窗体位置”的功能时,一般的解决方法是在WM_MOUSEMOVE事件中SetWindowPos。但这样做的话,你的窗体即使在“拖动时显示窗口内容”没有钩上的时候,也是实时拖动的。我想问的是,怎样让程序自动判断“拖动时显示窗口内容”项,并应用不同的拖动方式?

解决方案 »

  1.   

    我们可以看一下Windows Media Player 9,这就是我所说的样子。WMP9在“拖动时显示窗口内容”项没有钩上时,通过拖动客户区来拖动的话也只会显示线框,当释放鼠标时才应用位置。再看一下winamp,就没有实现这一功能。不知道WMP9是怎么实现的呢??
      

  2.   

    MSN7也是这样的,虽然WMP9和MSN7都是微软的产品,但我想它们实现这一功能使用的技术应该并不十分复杂。不知CSDN的哪位朋友了解?请指教
      

  3.   

    已经解决了:在MouseDown的时候调用:
    SendMessage( WM_NCLBUTTONDOWN, HTCAPTION, 0 );
    在MouseUp时调用:
    ReleaseCapture();