因为我弄了两个窗口,拖拽的时候两个窗口一起动,另一个窗口是在OnMoving的时候调用movewindow来实现的。
按ESC键会导致窗口退回原位置,那另一个窗口就不知道这个动作,就停在最后移动的位置上了。

解决方案 »

  1.   

    处理按ESC事件应该就可以了吗?
      

  2.   

    处理按ESC事件  将另一个窗口移动到你想要的位置
      

  3.   

    呃,都说了我拿不到ESC消息。在PreTranslateMsg和WindowProc中都拿不到Keydown消息。
      

  4.   

    那是系统控制的吧,这事情根本不发生在exe的客户区。
      

  5.   

    WM_Keydown是拿不到系统按键的信息的
    这个msdn上有
      

  6.   

    那么各位,有什么好办法处理这个情况吗?用键盘hook也不靠谱,比如说在拖动的时候按windows键,也会有一样的效果。或者说拖动窗口的时候,系统弹出一个对话框导致失去了焦点,也是这样的情况。
      

  7.   

    我能想象的得到的就是hook 键盘钩子
      

  8.   

    没用的,首先windows下可能有多种组合键可以让拖拽提前终止,比如说ESC,Win,Alt+Tab,Alt+ESC。另外如果在移动过程中windows弹出一个错误对话框或者什么的,也会终止拖拽,防不胜防。
      

  9.   

    把移动写在Move里面 就可以实现了 
      

  10.   

    这两个窗口不是父子关系的。是两个独立的窗口。
    我现在是在OnMoving的时候使用MoveWindow去移动另一个窗口。
      

  11.   

    一样  别在OnMoving里面处理  在OnMove里面处理就行了 
      

  12.   

    还有你为什么截获不到ESC消息 是不是你的处理错了BOOL PreTranslateMessage(MSG* pMsg)
    {
        if (pMsg-> message == WM_KEYDOWN) 
        {//截获ESC消息
            int nVirtKey = (int)pMsg-> wParam; 
            if (nVirtKey == VK_ESCAPE)
            {//你的处理
            }
        }    return CDialog::PreTranslateMessage(pMsg);
    }
      

  13.   


    解决就好  我觉得ESC也能截获  
    但相比还是OnMove比较好