WEB开发网
开发学院软件开发VC 编写可复用性更好的C++代码:Band对象和COMToys(3)... 阅读

编写可复用性更好的C++代码:Band对象和COMToys(3)

 2006-07-21 11:44:06 来源:WEB开发网   
核心提示: 接下来,Windows调用IOleWindow::GetWindow来获得窗口的HWND,编写可复用性更好的C++代码:Band对象和COMToys(3)(3),(这就是为什么你必须在SetSite中创建窗口的原因),由CBandObj返回m_hWnd,但是CBandObj对象仍然活着,直

接下来,Windows调用IOleWindow::GetWindow来获得窗口的HWND。(这就是为什么你必须在SetSite中创建窗口的原因)。由CBandObj返回m_hWnd。

接着,Windows调用IDeskBand::GetBandInfo请求关于band的信息,如大小,可变高度或者定高,以及背景颜色和标题。CBandObj用默认值填充DESKBANDINFO结构--这些值都可以在band对象的构造函数中修改--有些信息来自你的资源文件。例如,从资源串中获得标题。下一步,Windows调用IDockingWindow:: ShowDW来显示创建的窗口。CBandObj 调用CWnd:: ShowWindow完成显示。

如果用户有输入或者用右键访问上下文菜单,则Windows要分别查询相应的IInputObject和IContextMenu接口。如果你实现了这些接口,Windows将使用它们。CBandObj的缺省实现从资源文件中获取键盘加速键和菜单信息。你只要将资源添加到工程就可以了。菜单本身被存在一个数据成员m_contextMenu中,可以随时取用。CMyDeskBand没有资源菜单,取而代之的是通过读取用户属性设置文件来动态创建菜单(如图十二)。

图十二

在向容器添加菜单之前(当容器调用IContextMenu::QueryContextMenu时),CBandObj通过MFC的ON_UPDATE_COMMAND_UI命令处理器来路由菜单。如图十二,CMyDeskBand就是通过这种方式实现了搜索引擎旁边的选中检查标志。

如果用户使用菜单加速键或者选中菜单项来调用某个命令,Windows则会调用IContextMenu::InvokeCommand。CBandObj的做法与初始化这个菜单的做法一样,所以这个命令通常都会到达ON_COMMAND命令处理器。

当用户关闭Band时,Windows调用IDockingWindow::CloseDW。CBandObj则发送WM_CLOSE消息,这样窗口便消失。但是CBandObj对象仍然活着,直到Windows释放它。只要你用TRACE跟踪一下就会明白以上所述的逻辑过程了。(待续)

上一页  1 2 3 

Tags:编写 复用 更好

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