我在WindowsFormsHost中有一个Windows窗体地图,我需要它来调整窗口大小.
我只是不确定要听哪个事件,这样做.我需要地图只在鼠标启动时调整大小,否则它会滞后,当你非常缓慢地调整窗口大小时,它会尝试绘制一百万次.
等待计时器是一个非常非常糟糕的想法,很简单,它是一个启发式的,你猜测何时完成调整大小操作.
更好的想法是从中派生一个类WindowsFormsHost
并覆盖该WndProc
方法,处理WM_SIZE
消息.这是在大小操作完成时发送到窗口的消息(而不是WM_SIZING
在进程期间发送的消息).
您还可以处理WM_SIZING
消息,而不是WndProc
在收到此消息时调用基本实现,以防止消息被处理并让映射在所有这些时间重绘.
该类WndProc
方法的文档Control
显示了如何覆盖WndProc
方法:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(VS.71).aspx
即使它是针对不同的类,它也是完全相同的主体.
此外,您将需要WM_SIZING
和WM_SIZE
常量的值,您可以在此处找到:
http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html
请注意,您不需要上面链接中的所有内容,只需要这两个值的声明:
////// The WM_SIZING message is sent to a window that /// the user is resizing. By processing this message, /// an application can monitor the size and position /// of the drag rectangle and, if needed, change its /// size or position. /// const int WM_SIZING = 0x0214; ////// The WM_SIZE message is sent to a window after its /// size has changed. /// const int WM_SIZE = 0x0005;