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

  • 问题

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

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

    我觉得主要原因在WM_WINDOWPOSCHANGING消息上,它调整的位置不是及时的。(已验证为错误观点)

    有一项命为垂直同步的技术,是否跟问题相关?

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

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

    case WM_NCCALCSIZE:return 0;

    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;//标题栏
    }

    2020年1月6日 3:33

全部回复

  • 看起来,我找到了一篇答案。

    先放在这里,希望有用,以及给后来者提供帮助,(在中文版 stack overflow(stackoom)搜索下面关键词):

    如何在调整窗口大小时平滑丑陋的抖动/闪烁/跳跃,特别是拖动左/上边框(Win 7-10; bg,bitblt和DWM)?

    2020年1月6日 4:06