菜单窗口。 当你右键弹出菜单窗口时,父窗口不响应鼠标移动,子窗口响应鼠标移动消息。
具体实现是怎么弄的?
请大侠赐教、。

解决方案 »

  1.   

    http://blog.csdn.net/w8u/archive/2010/07/27/5769702.aspx
      

  2.   

    情况是这样的:
    自己用SDK写一个类似菜单窗口的“窗口”.
    响应右键单击:创建菜单窗口
    WM_RBUTTONDOWN:
       menu_window = new CxMenuWindow;
       menu_window->create_window(............);
       menu_window->show_window();
    class CxMenuWnd
    {
       LRSULET  window_proc(....)
       {
          switch(message)
          {
            case WM_ACTIVE:
            {
                if (LOWORD(wParam) == WA_INACTIVE)//当窗口变为不活动 销毁窗口
        {
                   send_message(WM_DESTORY, 0,0);
                }
            }
            break;
          }
       }
    }
    我在主窗口的按钮上。响应了鼠标移动消息。
    当鼠标移动到主窗口的button按钮上。就弹出一个提示窗口。// 但是情况糟糕的是。理想情况是:
      当菜单窗口创建成功时, 鼠标移动的到主窗口上按钮上时(不创建窗口),
    如果主窗口不接收鼠标移动消息。按钮它就不会创建窗口了。
    糟糕的是:
     
       当我菜单窗口创建成功了。
       当我鼠标移动到主窗口上的时候,主窗口的button按钮响应了鼠标移动消息,
       创建了提示窗口,而菜单窗口就销毁了。(因为不是活动窗口了)。
    怎样才能实现。。当创建菜单窗口成功时,鼠标移动到主窗口的button按钮上时,
    button按钮不创建窗口。
      

  3.   

    先让你的子窗口直接获得鼠标的控制权,进行操作,完事后再放了鼠标的控制权.
    如你的子窗口类为Cmywnd.Cmywnd mywnd;
    mywnd->SetCapture();  //窗口持续获得鼠标消息
    ......//这里进行你要的操作.如MOVE()等
    mywnd->RelesseCapture();  //释放鼠标控件权.
      

  4.   

    WM_ACTIVATE:
    创建窗口变为活动状态时,SetCapture;当左键按下时:
    在WM_LBUTTONDOWN:
     POINT point;
     point.x = LOWORD(lParam);
     ...............
     RECT window_rect;
     GetWindowRect(...);
     if(!PtInRect(&window_rect,point)) //单击不在此窗口。发送销毁消息
     {
        send_message(WM_DESTORY,0,0);
     }
     WM_RBUTTONDOWN:  //右键消息给父窗口创建菜单
     {
          get_parent_window()->send_message(WM_RBUTTONDOWN, wParam, lParam);
     }
     break;  基本的菜单窗口模型出来了。哈哈。。谢谢各位。