none
处理WM_NCCALCSIZE和WM_NCHITTEST后可以拖动调整窗口大小,但是会有闪烁,怎么解决? RRS feed

  • 问题

  • 这种闪烁情况主要体现在,拖动左侧改变窗口大小,窗口右侧相对于显示器是不固定、飘忽的。

    而系统处理的非客户区就没有这一现象,稳定无比。

    我觉得主要原因在WM_WINDOWPOSCHANGING消息上,它调整的位置不是及时的。

    我该怎么处理,才能在拖动调整大小时不再闪烁。

    系统处理的稳定流畅使我羡慕不已!帮帮我,微软的工程师,或者各位程序员。

    case WM_NCHITTEST:
    {
    GetCursorPos(&pt); ScreenToClient(hWnd, &pt);//鼠标位置
    GetClientRect(hWnd, &rc);//客户区矩形
    if (!IsZoomed(hWnd))//最大化时不用调整大小
    {
    int x = 8;//边框宽度
    if (pt.x < rc.left + x)
    {
    if (pt.y < rc.top + x)return HTTOPLEFT;//左上角
    if (pt.y >= rc.bottom - x)return HTBOTTOMLEFT;//左下角
    return HTLEFT;//左边
    }
    if (pt.x >= rc.right - x)//注意坐标从0开始,所以使用>=
    {
    if (pt.y < rc.top + x)return HTTOPRIGHT;//右上角
    if (pt.y >= rc.bottom - x)return HTBOTTOMRIGHT;//右下角
    return HTRIGHT;//右边
    }
    if (pt.y < rc.top + x)return HTTOP;//上边
    if (pt.y >= rc.bottom - x)return HTBOTTOM;//下边
    }
    return HTCAPTION;//标题栏
    }
    case WM_NCCALCSIZE:return 0;

    2020年1月2日 13:15

全部回复

  • 在Windows 10 通用应用(UWP)和Web App中没有此类功能,如果你开发的是UWP,请提供上下文来说明问题。如果你开发的不是UWP应用,请到对应的版块提问。在UWP版块询问非UWP问题很可能得不到有效帮助。
    2020年1月2日 16:59