WEB开发网
开发学院软件开发VC 持续化更新的视状态,在DLL中使用托管扩展 阅读

持续化更新的视状态,在DLL中使用托管扩展

 2006-07-20 11:43:22 来源:WEB开发网   
核心提示: 被人抓住了小辫子,真的让我好尴尬!你说的完全正确,持续化更新的视状态,在DLL中使用托管扩展(2),在我去年11月的代码中有一个bug,在那篇文章中,(现在你知道为什么“打开”对话框后,进入另一个文件夹是如此之慢了),我描述了如何实现定制的“打开&rdq

被人抓住了小辫子,真的让我好尴尬!你说的完全正确,在我去年11月的代码中有一个bug。在那篇文章中,我描述了如何实现定制的“打开”对话框(CPersistOpenDlg),使之能记住不同用户会话的视图模式。也就是说,如果用户在“打开”对话框中选择缩略图,那么下次再运行此程序时,该对话框便会以缩略图模式打开。我是通过子类化一个特殊的窗口 SHELLDLL_DefView 来现实的,“打开”对话框使用该窗口显示文件和文件夹。我用 Spy++ 发现这个神奇的命令 IDs 来设置视图模式,同时我还示范了用 LVM_GETITEMSPACING 来区分图标模式和缩略图模式——两者从 LVM_GETVIEW/GetView 返回的都是 LV_VIEW_ICON。

任何时候,只要你存储窗口状态,不管是大小/位置,还是视图模式,在窗口销毁之前的 WM_DESTROY/OnDestroy 处理例程中做这项工作是很自然的事情。那也是我在 CListViewShellWnd 中要做的事,它是为处理 SHELLDLL_DefView 而建立的一个 MFC 类:

void CListViewShellWnd::OnDestroy() {
  m_lastViewMode = GetViewMode(); // 记住当前视图模式
}

当对话框被销毁时,其对象(CPersistOpenDlg)便在构造函数中将 m_lastViewMode 写入用户配置文件。过程就是如此——它是一种做这类事情的常规方式。但是正像 John 发现的那样,“打开”对话框在用户关闭它时并没有销毁外壳视图;它每次都是在用户转到另一个文件夹时销毁的。要改变文件清单的显示,唯一的方法是去全部从头再建立一次。(现在你知道为什么“打开”对话框后,进入另一个文件夹是如此之慢了)。为了了解文件夹视图的销毁,你只要添加一个 TRACE 即可:

上一页  1 2 3 4 5 6 7  下一页

Tags:持续化 更新 状态

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