学习《Windwos程序设计》时,在17-1节PICKFONT程序中遇到的关于SendMessage的有关问题

学习《Windwos程序设计》时,在17-1节PICKFONT程序中遇到的关于SendMessage的问题
初学Windwos程序设计,遇到问题,希望热心的朋友们能帮我解决一下,谢谢
问题是这样的:
这个程序有一个主窗口过程和一个非模态对话框,我看到这里产生了困惑,以下是主窗口过程中的部分代码,问题是在红色那一句:
  case WM_COMMAND:
   
  switch (LOWORD (wParam))
   
  {
   
  case IDM_DEVICE_SCREEN:
   
  case IDM_DEVICE_PRINTER:
   
  CheckMenuItem (GetMenu (hwnd), dp.iDevice, MF_UNCHECKED) ;
   
  dp.iDevice = LOWORD (wParam) ;
   
  CheckMenuItem (GetMenu (hwnd), dp.iDevice, MF_CHECKED) ;
   
  SendMessage (hwnd, WM_COMMAND, IDOK, 0) ;  
  return 0 ;
   
  }
   
  break ;
为什么程序可以通过SendMessage 发送消息给非模态对话框上的IDOK按钮控件呢?这里窗口句柄不是主窗口的句柄吗?为什么非模态对话框可以收到这个消息呢?希望有朋友给予解答,谢谢

------解决方案--------------------
如果指定的窗口是由正在调用的线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。 

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);   
参数:   
hWnd:其窗口程序将接收消息的窗口的句柄。
如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。   
Msg:指定被发送的消息。   
wParam:指定附加的消息特定信息。   
IParam:指定附加的消息特定信息。   
返回值:返回值指定消息处理的结果,依赖于所发送的消息。