Необходим ли вызов DispatchMessage в программах win32?

программы Win32 обычно имеют цикл сообщений, который циклически вызывает GetMessage или PeekMessage, а затем называет DispatchMessage чтобы отправить сообщение в окно, перейдите к соответствующему окну.

но есть ли необходимость делать это? Могу ли я вместо этого просто посмотреть в MSG объект непосредственно в цикле сообщений и выполнять необходимые там действия без вызова DispatchMessage? Я говоря о случаях, когда у меня есть одно окно без других элементов управления окнами, например, если окно используется только как окно отображения direct3d, поэтому сообщения всегда будут направлены на единственное окно.

в основном мне просто любопытно, но также это может привести к тому, что некоторые аспекты моего кода тоже будут чище.

1 ответов


вы называете DispatchMessage чтобы сообщение было доставлено в соответствующее окно, в его "window proc". Вы думаете, что у вас только одно окно, но действительно ли оно единственное? COM создаст вспомогательные окна, другие подсистемы также могут создать вспомогательные скрытые окна, которые будут доставлять сообщения, отправленные в общую очередь сообщений и адресованные этим окнам. Без необходимости много думать об этих деталях у вас есть API для их отправки. И вы должны это сделать, потому что эти подсистемы полагаются о наличии сообщения pump.

Spy++ Windows SDK tool может помочь вам увидеть, сколько окон у вас действительно есть.

тем не менее, если у вас действительно есть единственное окно, не имеет большого значения, вызывается ли ваш обработчик из dispatchmessage internals или непосредственно вашим насосом сообщений.