C 以编程方式发送WM_大小的消息

C 以编程方式发送WM_大小的消息,c,winapi,C,Winapi,以编程方式发送WM_SIZE消息是否有问题,例如: SendMessage(hWnd, WM_SIZE, 0, 0); 我不关心wParam和lParam的值(我的WM_SIZE事件处理程序不使用它们) 我想做的是在程序的其他地方使用WM\u SIZE事件处理程序中的代码,但我不想复制它,所以我想只发送一条WM\u SIZE消息。没有错,但更好的方法是使用适当的标志,它将代替您调用WM\u SIZE。您始终可以通过编程发送或发布任何消息,它将由窗口过程处理 但是您应该知道WM_SIZE只是系统

以编程方式发送
WM_SIZE
消息是否有问题,例如:

SendMessage(hWnd, WM_SIZE, 0, 0);
我不关心
wParam
lParam
的值(我的
WM_SIZE
事件处理程序不使用它们)


我想做的是在程序的其他地方使用
WM\u SIZE
事件处理程序中的代码,但我不想复制它,所以我想只发送一条
WM\u SIZE
消息。

没有错,但更好的方法是使用适当的标志,它将代替您调用
WM\u SIZE

您始终可以通过编程发送或发布任何消息,它将由窗口过程处理

但是您应该知道WM_SIZE只是系统发送的通知消息,通知窗口其大小已修改发送该消息不会使窗口更改其大小。当调用
SetScrollPos
MoveWindow
时,通常会发送该消息


我想做的是在程序的其他地方使用WM_大小事件处理程序中的代码,但我不想复制它,所以我想只发送一条WM_大小的消息

你也许可以这样做,但在我看来,这将是一个糟糕的设计

更好的做法是将窗口的
WM_SIZE
处理程序中的代码移动到单独的函数中。然后,您可以从程序中的任何位置调用该函数,包括
WM\u SIZE
处理程序


一般来说,您应该尽量避免将所有代码都放在窗口过程中。如果您采用这种方法,您将发现您的窗口过程变成了一堵巨大的代码墙,您将很难阅读和理解它。正如您所发现的,当这样做时,重用代码变得很困难。尝试将窗口过程的所有案例移动到单独的函数中。然后窗口过程简单地打开消息并调用这些单独的函数。

我想做的是在程序的其他地方使用
WM\u SIZE
事件处理程序中的代码,但我不想复制它,所以我想只发送
WM\u SIZE
消息。@Tony:IMHO,将公共代码放在函数中,并从任何您想要的地方调用它,这样会更简洁。或者,如果希望在窗口过程的上下文中调用它,则应该使用私有消息。你应该三思而后行,为什么你需要这样做。手动发送WM_大小看起来像气味设计。当然,您可以向窗口发送/发布任何消息。但是,如果没有一个大的警告标志,即“不要”,您永远不应该建议这样做。您可能会得到一个假的
WM_SIZE
,处理程序不关心参数或当前状态。但是,如果消息处理程序调用
GetKeyState
,那么
WM_CHAR
消息呢?或者发布一条与调用
PostQuitMessage
行为截然不同的
WM_QUIT
消息怎么样?还有很多可能出错。无法重新编写
SetScrollPos
向所属wndproc发送
WM_SIZE
消息。也看到了,但他实际上并不想调整大小,所以发送WM_大小不是更有意义吗……尽管这是一个糟糕的设计。