2015-08-10 5 views
0

У меня есть пользовательский интерфейс, который может работать в полноэкранном режиме. При переходе на весь экран, я звоню ниже последовательности:является блокировкой SetWindowRgn?

ShowWindow(hwnd, SW_HIDE); 
SetWindowRgn(hwnd, NULL, TRUE); 
SetWindowPos(hwnd, 0, left, top, right, bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER)) ; 
ShowWindow(hwnd, SW_SHOW); 

У меня ошибка, окно первого, отображаемого в верхнем левом углу с предыдущим размером и только затем переходит в полный размер экрана , Я подозреваю, что это может быть связано с тем, что вызов SetWindowRgn() является асинхронным. и фактически выполняется после ShowWindow(). Я знаю из документации, что все остальные вызовы блокируются, но нет комментариев о SetWindowRgn(), блокируется ли это или нет. Как я могу быть уверен в этом? Благодарю.

+0

Возможно, вы наблюдаете за задержкой в ​​оформлении вашего окна? Когда вы изменяете его размер, окна перемещают существующие биты в новое место и аннулируют вновь добавленную область. Вы можете попытаться добавить флаг SWP_NOCOPYBITS в ваш вызов SetWindowPos(). Или вы можете изменить размер окна в положение вне экрана, обновить его и вернуться обратно. –

ответ

1

Is SetWindowRgn блокирование?

Да. Эта функция, как и все вызываемые в коде в вопросе, является синхронной.