我想用我自己的方式来模拟Aero功能。为了将Form粘贴到屏幕的一侧,我使用了来自这个question的解决方案。问题是在我打电话之后:
ShowWindow(Handle, SW_MAXIMIZE);Form立即最大化,调用后MoveWindow将其大小更改为所需的大小。Form的这种跳跃是可见的,也是令人讨厌的。为了防止这种情况,我试图禁用WndProc中的消息处理(WndProc)。这是有用的,但不是完全的。是否有用于调整SuspendLayout()/ResumeLayout()大小的模拟Form?
发布于 2017-11-20 11:51:39
在WndProc中禁用消息处理可以帮助我减少闪烁(除WM_NCPAINT之外):
bool ignoreMessages = false;
public void DockWindow()
{
ignoreMessages = true;
ShowWindow(handle, SW_MAXIMIZE);
ignoreMessages = false;
MoveWindow(handle, 0, 0, Screen.PrimaryScreen.WorkingArea.Width / 2, Screen.PrimaryScreen.WorkingArea.Height, true);
}
protected override void WndProc(ref Message message)
{
if (ignoreMessages &&
message.Msg != WM_NCPAINT)
return;
base.WndProc(ref message);
}https://stackoverflow.com/questions/47352771
复制相似问题