通过鼠标可以调整窗口的边框,鼠标动窗口随着改变大小,如何让鼠标按下窗口不调整大小,当鼠标拖曳完毕,松开鼠标,窗口在触发onSize消息,调整到该大小。
因为,我在窗口中有一个mFlexGrid控件,当调整窗口大小时mFlexGrid控件发生闪烁很严重。所以请大家帮忙

解决方案 »

  1.   

    说个想法:
    在鼠标按下时设置一个标志位,在onsize中判断,如果标志位=true,就直接跳出
    松开鼠标时标志位=false,然后执行onsize,似乎还要加个标志位才行
    你试试不知道行不
      

  2.   

    上楼的老兄,我试了这个方法行不通,当进入onSize()
    方法时,不管是不是继续往下执行,窗口的大小都改变了
      

  3.   

    上楼的这位老兄,这个方法我试过了,行不通,当进入onSize方法时,不管是否继续往下执行,窗口的大小都改变了
      

  4.   

    可以试着注释掉基类的OnPaint();试了以后再说
      

  5.   

    如果注释掉基类的OnPaint(),大小也就没法改变了。
      

  6.   

    先把改变大小屏蔽,然后自己写个改变大小的函数,比如MouseMove到窗体边框,
    然后再取移动后的坐标,然后算出位移。
    再自己改变窗体大小。
      

  7.   

    也说个想法:
    重载PreCreateWindow()函数,截获WM_SIZE消息进行处理:根据鼠标按下标志位决定是否调用OnSize函数,你试试
      

  8.   

    BOOL CXXXX::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_LBUTTONDOWN)
    {
                  m_Flag=false;
    }
    if(pMsg->message==WM_LBUTTONUP)
    {
                 m_Flag=true;
    }
    if(pMsg->message==WM_SIZE)
    {
         if(!m_Flag)
        {
                      return; 
                  }
    }
    return CXXXX::PreTranslateMessage(pMsg);
    }
    我这里是一个对话框的例子
      

  9.   

    重载PreTranslateMessage()
    BOOL CXXXX::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_LBUTTONDOWN)
    {
                  m_Flag=false;
    }
    if(pMsg->message==WM_LBUTTONUP)
    {
                 m_Flag=true;
    }
    if(pMsg->message==WM_SIZE)
    {
         if(!m_Flag)
        {
                      return false; 
                  }
    }
    return CXXXX::PreTranslateMessage(pMsg);
    }
    我这里是一个对话框的例子
      

  10.   

    不好意思,应该是
    if(pMsg->message==WM_SIZE)
    {
         if(!m_Flag)
        {
                      return true; 
                  }
    }
      

  11.   

    截获onsize,判断鼠标的状态,如果是鼠标按下,不执行任何操作,记录下位置,在鼠标松开消息中,根据记录的位置重设窗口
      

  12.   

    在WM_SIZING消息(OnSizing)里面再控制一把。
      

  13.   

    WM_SIZING(OnSizing())里再控制一把.