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:持续化 更新 状态

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