为啥为窗口加了WS_SYSMENU样式后,无法通过发送HT消息来改变窗口的大小?在加入WS_SYSMENU样式前,是可以在边框处调整窗口大小的。

解决方案 »

  1.   


    我把MDI窗体的标题栏和边框都隐藏了,用图片自定义的标题栏和边框。
      

  2.   

    这个不是你加了WS_SYSMENU 的原因 而是你去掉了边框的原因可以参考一下下面的代码#define PT_DIS (3)
    #define PT_DIS_X (17)
    #define PT_DIS_Y (15)UINT CDlgXXXX::OnNcHitTest(CPoint point) 
    {
    CPoint pt = point;
    ScreenToClient(&pt);
    CRect rect;
    GetWindowRect(&rect);
    if (pt.y < 29 && pt.y >=PT_DIS && pt.x >PT_DIS_X)
    {
    return HTCAPTION;
    }
    else if (pt.y < PT_DIS)
    {
    if (pt.x < PT_DIS_X)
    {
    return HTTOPLEFT;
    }
    else if(pt.x > rect.Width() - PT_DIS_X)
    {
    return HTTOPRIGHT;
    }
    else
    {
    return HTTOP;
    }
    }
    else if (pt.y > rect.Height() - PT_DIS_Y)
    {
    if (pt.x < PT_DIS_X)
    {
    return HTBOTTOMLEFT;
    }
    else if(pt.x > rect.Width() - PT_DIS_X)
    {
    return HTBOTTOMRIGHT;
    }
    else
    {
    return HTBOTTOM;
    }
    }
    else if (pt.x < PT_DIS)
    {
    if (pt.y < PT_DIS_Y)
    {
    return HTTOPLEFT;
    }
    else if(pt.y > rect.Height() - PT_DIS_Y)
    {
    return HTBOTTOMLEFT;
    }
    else
    {
    return HTLEFT;
    }
    }
    else if ( pt.x > rect.Width() - PT_DIS_X)
    {
    if (pt.y < PT_DIS_Y)
    {
    return HTTOPRIGHT;
    }
    else if ( pt.y > rect.Height() -  PT_DIS_X)
    {
    return HTBOTTOMRIGHT;
    }
    else
    {
    return HTRIGHT;
    }
    } return CDialog::OnNcHitTest(point);
    }
      

  3.   

    [Quote=引用 4 楼 likang0712 的回复:]
    这个不是你加了WS_SYSMENU 的原因 而是你去掉了边框的原因调整无边框窗体大小的代码我加过,在加入WS_SYSMENU前就是通过它调整大小