WEB开发网
开发学院软件开发VC MFC教程(13)-MFC工具条和状态栏(1) 阅读

MFC教程(13)-MFC工具条和状态栏(1)

 2007-10-04 20:11:24 来源:WEB开发网   
核心提示:参数1和参数2定义了需要重新放置的子窗口ID的范围,一般是0到0xFFFF,MFC教程(13)-MFC工具条和状态栏(1)(10),参数3指定了一个子窗口ID,它拥有客户窗口剩下的空间,一般,一个命令ID对应了一个字符串ID,一般是AFX_IDW_PANE_FIRST,表示视的窗口ID

参数1和参数2定义了需要重新放置的子窗口ID的范围,一般是0到0xFFFF。

参数3指定了一个子窗口ID,它拥有客户窗口剩下的空间,一般是AFX_IDW_PANE_FIRST,表示视的窗口ID。

参数4指定了操作类型,缺省是CWnd::ReposDefault,表示执行窗口放置操作,参数5不会用到;若取值CWnd::ReposQuery,则表示尝试进行窗口放置(Layout) ,但最后不执行这个操作,只是把参数5初始化成客户区的尺寸大小;若取值CWnd::ReposExtra,则把参数5的值加到参数2表示的子窗口的客户区域,并执行窗口放置操作。

参数6表示传递给函数的可用窗口客户区的尺寸,如果空则使用窗口客户区尺寸。

如果执行layout操作的话,该函数的核心处理就是:

首先,调用::BeginDeferWindowPos初始化一个Windows内部的多窗口位置结构(Multiple-window - position structure)hDWP;

然后,让各个子窗口逐个调用::DeferWindowPos,更新hDWP。在调用::DeferWindowPos之前,要作一个确定子窗口大小的工作。这些工作通过给各个控制子窗口发送消息WM_SIZEPARENT来完成。

控制子窗口通过函数OnSizeParent响应WM_SIZEPARENT消息,先确定自己的尺寸,然后,如果需要进行窗口布置(WM_SIZEPARENT消息参数lParam包含了一个非空的HDWP结构(lpLayout->hDWP)),则OnSizeParent将调用AfxRepositionWindow函数计算本控制窗口的位置,结果保存到hDWP中。

在所有的控制窗口尺寸确定之后,剩下的留给窗口hWndLeftOver(如果存在的话)。确定了hWndLeftOver的大小之后,调用AfxRepositionWindow函数计算其位置,结果保存到hDWP中。

上面提到的函数AfxRepositionWindow间接调用了::DeferWindowPos。

最后,::EndDeferWindowPos,使用hDWP安排所有子窗口的位置和大小。

至于其他函数,如OnSizeparent、OnWindowPosChanging、CalcWindowRect,这里不作进一步的分析。

工具条、状态栏和边框窗口的接口

应用程序在状态栏中显示信息

MFC内部通过给边框窗口发送消息WM_SETMESSAGESTRING、WM_POPMESSAGESTRING的方式在状态栏中显示信息。这两个消息在afxpriv.h里头定义。

WM_SETMESSAGESTRING消息表示在状态栏中显示和某个ID对应的字符串信息或者指定的字符串信息,消息参数wParam指定了字符串资源ID,消息参数lParam指定了字符串指针,两个消息参数只有一个有用。一般,一个命令ID对应了一个字符串ID,对应的字符串是命令ID的说明。

上一页  5 6 7 8 9 10 

Tags:MFC 教程 MFC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接