这种闪烁情况主要体现在,拖动左侧改变窗口大小,窗口右侧相对于显示器是不固定、飘忽的。
而系统处理的非客户区就没有这一现象,稳定无比。
我觉得主要原因在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;