关于MDI多文档程序的一些思考

MDI程序的框架


客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口。框架窗口和各个子文档窗口都是自定义的窗口类。

MDI程序中的一些要点

  • 窗口中的菜单资源是属于框架窗口,也就是说如果要改变菜单需要面向框架窗口操作。如果需要更改菜单可以向客户窗口发送WM_MDISETMENU消息。
  SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenu, (LPARAM) hMenuWindow) ;
          
  • 当子文档窗口在活动状态与非活动状态中切换时,失去活动状态的窗口先收到WM_MDIACTIVATE消息(wParam值为其句柄),接着获得活动状态窗口会受到WM_MDIACTIVATE消息(lParam的值为句柄)

  • 子文档窗口并不需要处理WM_CLOSE,WM_DESTROY消息,这些消息是由默认的DefMDIChildProc函数处理。

  • 框架窗口的WM_CLOSE消息交给DefFrameProc()函数,其会发送WM_DESTROY消息给窗口过程然后我们可以在调用PostQuitMessage()函数。

  • 如果想关闭子文档窗口可以向客户窗口发送WM_MDIDESTROY消息

  • 当子文档窗口最大化后,如果点击子文档窗口的关闭或者最小化,此消息是属于菜单消息,(WM_COMMAND,接着会将此消息当做框架窗口不想处理的消息发送给对应的子文档窗口,然而子文档窗口也不处理该消息。)//最后此消息接着被框架窗口所处理,又因为框架窗口不能处理此消息所以会将该消息传送给DefFrameProc()函数处理。

posted @ 2020-10-08 16:58  怎么可以吃突突  阅读(240)  评论(0编辑  收藏  举报