Posts tagged MFC

Better Late Than Never

This post originally appeared on Joycode on Sept 17 2004.

在文件选择对话框和浏览器中都可以显示文件夹视图,但是有时需要对显示的方式进行控制,例如在文件选择对话框初始化时设置显示方式为详细资料视图或者缩略图视图,有的时候需要用程序来选择一些项目,例如在文件选择对话框中添加全选按钮,或者打开文件所在文件夹并且选中指定文件。

Read more ...


Flash Player: Loading from memory

user cucao wants to know how to play a flash file from application resource. The user wants to use a dongle to protect unauthorized viewing of the flash file so can’t just put the swf file in plain sight.

Adobe’s Flash Player, being an ActiveX with supports for many OLE containers such as Internet Explorer and Microsoft Word, implements many standard OLE interfaces (for details open the ActiveX in oleview). One of them is IPersistStreamInit, a standard interface for ActiveX controls who want to distinguish new page load vs refresh, but can be used for the user to load the swf file from memory.

Read more ...


Add the correct interface first in Adding an MFC Class from an ActiveX Control wizard.

In good old times aka VC6, if you want to use an ActiveX in MFC, the Components and Controls Gallery would generate all the properties and methods of an ActiveX and pull dependent types and create wrapper classes for them as well. And it was good. It magically knows the main class of the Windows Media Player ActiveX is CWMPPlayer4 and that GetCurrentMedia method returns CWMPMedia.

Welcome to the modern Visual C++. Now comes a new wizard that gives you options to choose interfaces to import from. At the same time you got to decide if you really need that many types from an ActiveX. If you went the unfortunate path of Adding a Member Variable wizard in the dialog editor and somehow got a COCX1 class back, you don’t have the luxury to choose, and you end up with an CWnd wrapper class that does not really wrap up the properties and methods of the ActiveX. It is still good for early binding (like querying IWMPPlayer4 from the result of CWnd::GetControlUnknown) but if you plan to use late binding and MFC’s OLE support (hello COleException!),  you probably want to delete the COCX1 files and start over with the Adding a Class from an ActiveX Control wizard.

Read more ...


What’s new in MFC/ATL 11 Beta

Note this post is on Visual Studio 11 Beta, you can download it from http://www.microsoft.com/visualstudio/11/en-us/downloads Since Sinofsky posted about no desktop apps on Windows on ARM (WOA), it looks like MFC and ATL are going to support metro-style apps, although most ATL classes are not going to be compatible with metro style apps.

DAO support for ARM is missing, just like the lack of DAO support for 64 bit apps. Jet was deprecated a while ago, no surprise here.

Read more ...


Visual Studio 2010: Class Wizard重返Visual C++… Control Shift X.

image

在消失4个版本之后,类向导终于重返Visual C++。新的功能:搜索现在可以部分匹配而不是从字符串开始匹配。

测试版还是存在一些问题,向导不是总能找到现存的函数,以致删除函数功能不是总有效。在打开很多文档的时候尝试打开Class Wizard会出现“value does not fall in expected range” 错误。再就是性能问题,打开的文档越多,类向导启动所需的时间就越长。

Read more ...


Make the webbrowser control styled the same way as the hosting application

User wtx_sonery wants to know whether it is possible to style the webbrowser control with the rest of the application.

The answer is yes, you can implement IDocHostUIHandler’s GetHostInfo method and return DOCHOSTUIFLAG_THEME in the host flags.

Read more ...


Links

Today’s link spam:

New warning message in MFC9:Warning: Creating dialog from within a COleControlModule application is not a supported scenario. Comments: when people takes the time to add a warning, there must be a reason.

Read more ...


Visual C++ 10 和 MFC 10的新特性

Boris Jabes 和Damien Watkins将会在PDC上演示Visual C++10中的新功能。IDE的新功能包括基于SQL Compact的智能提示支持自定义插件的新的项目和编译系统、面向大型应用的优化和改善的调试体验。MFC库增加了对Windows 7 中新增的多点触摸检测功能高DPI支持,以及Windows Vista中集成的功能,例如高彩图标Windows 搜索重启管理器。Visual C++程序员们才习惯不用MFC来直接调API。

MFC是很老了,不容易学,也不优雅,但是很稳定,也有很多第三方扩展和示例支持。其他的用户界面库还有很多,但是单单用户界面并不能完成一个程序。在调用操作系统的底层功能的时候,有一个面向对象的接口还是很方便的。

Read more ...


MFC Feature Pack发布

Visual C++项目组今天发布了Visual C++ 2008 Feature Pack。这个Feature Pack包含了一些以前需要付费给BCG Soft才可以使用的控件,例如BCG著名的窗口布局和风格自定义功能,不过也有一些有用的控件,例如文件夹列表文件夹树属性窗格等等。

这个Feature Pack也包含从Dinkumware获得授权的一些对STL的扩展,实现了TR1草案。这包含新的随机算法、集合类和正则表达式支持。关于TR1的更多信息,可以参考Dinkumware的网站

Read more ...


MFC更新Beta版

一个面向Visual C++ 2008的MFC更新测试版已经发布,同时也提供了文档的下载。这个版本包含新的界面的特性,例如Office Ribbon、2003和XP风格,Visual Studio风格和MDI标签。另外,这个版本也包含部分TR1的实现,例如正则表达式、更加丰富的集合和智能指针。 另外,在下载页面居然说这个版本还不支持Visual Studio 2008 Service Pack 1的Beta版,正式版才出来几天SP1的测试版就出来了?

Read more ...


AutoComplete with DataSource

Download Sample code: jiangsheng/Samples

.Net 2.0 introduced autocompletion in TextBox and ComboBox. It is obvious that autocomplete is not very useful when the number of options is small. However, when the number of option becomes too many, pre-filling of all options to an AutoCompleteStringCollection becomes impractical, especially when the data is coming from a remote computer. An alternative is to replace the AutoCompleteCustomSource in a TextChanged event, however, users are getting random AccessViolationException when trying to replace it. In this article I will demonstrate another alternative, using a BindingSource as the data source of options, bypassing the .Net Framework and call the underline Windows API directly.

Read more ...


Visual C++ 2008 Beta2 里面的Class Designer

image

Visual Studio 2008 Beta2中的Class Designer终于支持C++了,上面是一个MFC程序的类图,可以看到已经支持扩展MFC的宏了,可惜只能看不能重构代码。尽管Class Designer这功能相当不错,但是设计师们可能还是更习惯IBM 的Rational Rose Developer for Visual Studio和UML。我用Class Designer的C#支持的时候也就是加加注释而已,重构我更习惯用DevExpress提供的工具Refactor来做,类则用XSD.exe生成,因为Class Designer生成的属性只会扔NotImplementedException异常。

Visual C++项目组在做下一个版本的市场调查,有兴趣的可以去提提要求。

Read more ...


Handle NewWindow3 and ShowModalDialog in CHtmlView

CHTMLView does not support NewWindow3 as of MFC 9.0. It is relatively easy to add this support, given the event sink code in atlmfcsrcviewhtml.cpp

Add the following into the declaration of the derived CHtmlView class (named CHtmlViewTestView in this example)

Read more ...


Jiangsheng’s CSDN Digest (200604)

I have been summarizing my CSDN posts since 2004. The last article of this kind is “Jiangsheng’s CSDN Digest(April 3, 2006)” (https://web.archive.org/web/20060701050541/http://blog.csdn.net/jiangsheng/archive/2006/04/03/648980.aspx), including following discussions:

web autocomplete using AJAX

Read more ...


FAQ:如何在……中获得……的指针(MFC)

问:请问如何在一个全局函数中,获得视图类,文档类得指针啊? 问:如何在一个对话框中,获得视图类,文档类得指针啊?

答:虽然你可以使用AfxGetMainWnd或者AfxGetApp之类的函数来访问全局变量,但是不建议这么做。你应该尽量少使用全局函数和变量以增加代码的可移植性。你可以在对象中声明变量来保存和传递需要使用的对象和指针,调用函数或者创建对象时传递指针。

Read more ...


创建和自动化Internet Explorer和资源管理器窗口

下载示例工程 - 34 Kb jiangsheng/Samples

我在很久之前就开始用程序自动化Shell窗口——主要对象是IE窗口。有时浏览器控件或者MFC类CHTMLView可以满足我的需要,但是很多时候我需要从头嵌入浏览器控件并且尽可能模拟IE的行为,例如实现IDocHostUIHandler来启用自动完成功能。一个很自然的替代方案是直接操作IE窗口。

Read more ...


西雅图MVP峰会见闻

个人觉得这次MVP峰会最大的进步就是技术相关的Session数量大大增加,按照MVP专长来分类;而不像上次那样按主题分类。我只需要在VC产品组的日程里面选择就可以了,而不是像上回那样不得不去听移动开发。当然这回也有MVP不去参加VC的Session,跑去听IE和移动开发。内容方面也比上次活泼很多,Don Box还是那么幽默,比尔·盖茨也有搞笑的演出,不过他看起来比去年七月份在北京的时候老多了。

一些可能有人会感兴趣的技术信息

Read more ...


集成桌面搜索,模拟器

This is a revised version of an earlier blog at http://blog.joycode.com/jiangsheng/archive/2005/07/19/59725.aspx, published July 19, 2005. The source code is available at jiangsheng/Samples

微软的桌面搜索API推出也有一段时间了,但是网上可以找到的相关技术资料还不多。官方的资料在https://web.archive.org/web/20051030062212/http://addins.msn.com/devguide.aspx可以看到,而且网页上有SDK和一个C#的示例供下载。

Read more ...


MFC,欢乐与痛苦

MFC提供了许多十分有用的类和对象,在很多时候在Office插件、BHO、常规DLL这样的工程中加入MFC支持是一个不错的选择。但是,MFC中的很多功能,例如资源查找,消息预处理等等都依赖于在进程或者线程创建时被初始化的MFC内部数据;而对于需要添加MFC支持的工程,这些数据并不会被自动地初始化。

这时候使用一些MFC的功能,例如使用CString从字符串表加载一个字符串,或者使用CDialog::DoModal()创建一个模态对话框,都会有断言错误,用ATL向导创建的支持MFC的程序也没有多少改善,在CWinApp的DLL版本中没有初始化线程数据,所以调用AfxGetThread会返回空指针。解决这个问题的一个办法是使用AfxBeginThread来启动一个MFC线程,这样MFC会初始化线程相关的数据。

Read more ...


Visual Studio 2005中MFC的变化

关于新功能的说明 http://msdn2.microsoft.com/library/y8bt6w34(en-us,vs.80).aspx

一些源代码的变化:

Read more ...


Visual C++ 2005的版本区别

经常看见有些人问Visual C++ 2005里面为什么没有了MFC。实际上,MFC只是在目前免费下载测试版的Express版本里面没有,在其它的版本里面都有——但是一般都是要付钱的。具体的各个版本的比较可以参见参考部分的链接。不过对于用VC来学习.Net开发的程序员来说,Express版就足够了。

小道消息:

Read more ...


程序员之懒

程序员在我看来是比较会偷懒的一个群体。为了在开发软件的时候减少人工操作,他们会使用各种各样的软件和语言特性,例如IDE和预处理宏。李建忠在他的BLOG(http://blog.joycode.com/lijianzhong/archive/2005/05/08/50440.aspx)中提到,为了简化声明属性的工作,他的同事自己写了一些小工具来生成需要的代码。在C++托管扩展中,这个工作稍微简单一些,用预处理宏就可以了。

当然,如果使用C++/CLI的话,这个工作更加简单:

Read more ...


Visual C++ 2005 Beta 2中的变动

stdcli::language名称空间被取消,代之以cli名称空间。

MFC对.Net控件的事件支持宏VENT_DELEGATE_ENTRY的参数类型变化:例如

Read more ...


VC的自动化向导的BUG

BUG: ClassWizard Omits Methods with BYTE or BYTE* As Parameters (http://support.microsoft.com/kb/q241862/)

BUG: VTS_UI1 and VTS_PUI1 are Defined Incorrectly in AfxDisp.h (http://support.microsoft.com/kb/242588/)

Read more ...


示例:在MFC程序中集成.Net中的控件

从.Net Framework 1.1开始,.Net控件可以以ActiveX的方式被集成到非托管宿主中——但是官方的支持只对于使用托管C++的MFC程序。Chris Sells在2003年3月份的MSDN杂志中描述了这样一个示例(https://web.archive.org/web/20030304083154/http://msdn.microsoft.com/msdnmag/issues/03/03/WindowsForms/default.aspx)。这个示例使用的代码稍微繁琐,而且没有描述如何处理控件的事件。MFC 8.0增加了一系列这方面的支持来把这个集成过程简单化(参考http://msdn2.microsoft.com/en-us/library/ahdd1h97.aspx)。这使得在MFC程序中使用.Net中的一些比较好用的类,例如System::Windows::Forms::PropertyGrid比以前容易多了。

举例来说,要在MFC的基于对话框的程序中使用System::Windows::Forms::PropertyGrid控件,首先创建一个基于对话框的程序,添加必要的引用:

Read more ...


Win32 & .Net Q&A

问《VC++技术内幕》第四版p217,关于线程和MFC书上说,不允许在线程之间共享MFC对象(此原则不适用于直接从CObject派生的对象或者是简单的类),那么我想在一个线程中打开一个txt文件并向里面写数据可否这样做:

其中CString g_strSavepath;是一个全局变量。

Read more ...


何时一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?

问:我看到CListView的成员函数GetListCtrl直接把CListView本身的指针转换为CListCtrl指针。我想知道在什么情况下可以安全地把一个类的指针转化为另一个类的指针?

答:只要你访问的数据的内存表示是完全相同的,那么这种转化就是安全的。

Read more ...


IStream接口和CString之间的转换

问:如何传递CString中包含的字符串到具有IStream类型参数的函数?

问:如何根据获得的IStream接口指针获得字符串?

Read more ...


限制应用程序的实例数目

某些应用程序处理紧缺资源,例如可擦写光驱、串口或者大量内存,通常不希望这种应用程序的多个实例同时运行。

实际上你没有办法限制用户只能启动一次。你可以做到的是在应用程序启动之后查找是否用户启动了另一个实例。如果没有找到现存的实例,应用程序以正常方式启动。否则,通常的处理是退出。

Read more ...


Good Bye MFC?

原文地址在https://web.archive.org/web/20041204071945/https://channel9.msdn.com/ShowPost.aspx?PostID=31152

起源是VC开发组的一个人的言论“MFC仅仅用于支持旧的代码,新的代码不应该用MFC编写,而是应该用C#或者Managed C++”

Read more ...


偶的CSDN收藏夹(大部分都是古董……)

无界面的HTML分析器·分析网页中的表格/ http://community.csdn.net/Expert/topicview.asp?id=351580

如何载入非标准大小的图标并显示/ http://community.csdn.net/Expert/topicview.asp?id=638695

Read more ...


动态屏蔽Control+Alt+Delete(Update)

我曾经编写过一篇关于动态屏蔽Control+Alt+Delete的文章。数月之后我把文章的英文修订版发在了CodeProject(https://web.archive.org/web/20081015201511/http://www.codeproject.com/system/preventclose.asp)。但是当时我并未发现代码在调试环境下崩溃的原因。在很长时间之后,我看到Antonio Feijao在他最近发表的一篇文章之中用C重写了这个代码,并且添加了一些注释说明了编译器设置可能出现的问题。我认为这篇文章对我的文章的读者也是很有用的,所以准备在我的文章中添加他的文章的链接。

文章介绍:

Read more ...


如何: 通过HTML文档对象模型访问文档中的ActiveX控件的属性

111222的CSDN文档中心文章 用 MSHTML 的一点经验(https://web.archive.org/web/20051126180205/http://dev.csdn.net/develop/article/10/10456.shtm) 说明了如何访问在HTML文档对象模型中的网页的元素、内容。但是,有时候开发者实际上需要访问的是网页中ActiveX控件的属性、方法和事件。例如,你在网页载入之后需要修改/获取MediaPlayer的媒体源,以及控制MediaPlayer的播放。

为获得ActiveX控件的接口,我们需要访问文档对象模型。获得文档接口的方法多种多样,比如CHtmlView::GetHtmlDocument,IWebBrowser2::get_Document,IHTMLWindow2::get_document等等,参见111222的文档。这里我直接用一个函数GetDHtmlDocument表示获得这个接口的函数。你可以自己实现这个函数。

Read more ...


VC/MFC Q&A 200407

问:自编浏览器进入一个网页后,点一个链接后系统自动调用用IE打开网页而不是用自身浏览器打开网页。如何让窗口用我自己的浏览器打开?

答:参考控制新的窗口。默认情况下,浏览器收到创建新窗口请求时,会在IE中打开新的窗口。你可以处理NewWindow2事件来在自己指定的窗口中打开请求的页面。

Read more ...


在应用程序中集成浏览器控件(Update)(Subjet to change without notice)

浏览器控件是一个提供浏览器绝大部分功能的ActiveX控件,随Microsoft? Internet Explorer 4.0(IE)或者更高版本发行。实际上,IE可以认为是一个集成浏览器控件的程序。

怎么给用户提供丰富的内容一直是程序员们努力的目标。尽管各种各样的界面库可能使你眼花缭乱,但是这些也是美工和程序员的恶梦——要自定义界面上的每个元素的外观并不是一件容易的事情,而且有时候需要比较复杂的技术,例如自定义程序中出现的滚动条的颜色。

Read more ...


对话框数据交换 (Update)

通常,简单的对话框不使用结构来存储成员数据。但是大量的简单类型的成员交换会使得代码繁琐。这时候可以使用结构来封装简单类型的数据,声明一个赋值操作符和修改DDX调用来简化数据交换代码。

例如在文档或者视图的命令处理函数中

Read more ...


对话框数据交换

Read more ...


限制应用程序的实例数目

这里使用了窗口标题进行查找匹配。可以使用内核同步对象来进行准确的匹配和防止同时启动。

Read more ...


基于非模态对话框的MFC工程

Read more ...


VC编程经验总结第一版完成

该活动由bluebohe发起,CSDN网友积极参与,sgnaw (李逍遥)整理。发布之后反响强烈,但是很多人并未全部看完帖子就留下自己的邮件索取文件……其实下载地址就在第三个回复里面。

文件可以从这里下载 https://web.archive.org/web/20040405025034/http://bluebohe.go.nease.net/vc2004.chm

Read more ...


在浏览器中粘贴时替换剪贴板数据

在某些时候,可能需要覆盖剪贴板的数据,例如过滤聊天时在输入窗口粘贴非文字格式的信息。对于浏览器控件的编辑模式,浏览器提供了IDocHostUIHandler接口来支持粘贴时提供一个替代的数据源来覆盖剪贴板的数据。下面的代码描述了如何过滤除了CF_TEXT之外的剪贴板格式

Read more ...


结合ADO、ADOX和MFC的文档/视图/框架架构创建和打开Access数据库

本文描述了如何在MFC的文档/视图/框架架构中使用ADO和ADOX来创建和打开数据库。

在阅读本文之前,建议先对COM,数据库和MFC的文档/视图/框架有一个基本的了解。推荐阅读下列文章

Read more ...


Ask Mr JS

[url=http://community.csdn.net/expert/Topicview2.asp?id=2732377]xml 支持 模糊 查询吗?[/url]

可以用XPath来进行节点的选择

Read more ...


CDHtmlDialog&NewWindow2

Class ID Default Interface Default Event Interface —————– —————– ———————– CLSID_WebBrowser IWebBrowser2 DWebBrowserEvents2 CLSID_WebBrowser_V1 IWebBrowser DWebBrowserEvets

CDHtmlDialog捕获了DWebBrowserEvets事件,并将其转发到虚函数,而没有捕获DWebBrowserEvents2;所以在按Ctrl+N触发DWebBrowserEvents2事件的时候,执行默认操作——打开新的IE窗口。这可能不是你预料之中的行为。

Read more ...


让msxml4导出的文本xml缩进和换行

[url=http://expert.csdn.net/expert/Topicview2.asp?id=2637982]讨论链接[/url] 问起过好多次的问题了,手头正好在做XML的生成,就写了一下 其实,缩进和换行就是文本,在需要的位置创建文本节点就可以了。另外一个方法就是用SAX来写

可以这么写出来

Read more ...


Serialziing IPicture by Memory Stream

尽管很久没有用Serialize了,但是接手的工程的数据接口就是CArchive,……所以不得不写了一个IPicture数据到CArchive的接口

一个下午增加了一个功能……

Read more ...


Ask Mr JS

Q

我想在控件上绘图,现在已能取得该控件的长与宽,但取不了它在对话杠中的位置(X,Y),请问该如何取?谢谢。

Read more ...


分析MFC中的映射

MFC中大量使用了BEGIN_XXX_MAP这样的宏,以及映射进行查找优化,例如消息映射,OLE命令映射,以及接口等等。每个映射包含一个指向基类的映射的指针。这样,当一个类需要根据一定的条件查找一个对象时,它会查找本类对象,如果没有找到,那么会查找基类,直到根基类。这类查找包含Windows消息,命令,事件和OLE命令的分发,和对象实现的接口的查询等等。

下面是函数BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)的部分代码,演示了如何根据消息的ID查找处理函数。

Read more ...


Ask Mr JS

[url=http://expert.csdn.net/expert/Topicview2.asp?id=2562836] 如何访问 WebBrowser 控件中的XML源码[/url]

总结:注意使用IHtmlDocument::get_Script(唯一的一个方法@_@bb)就可以获得脚本的顶层对象,然后就可以用GetIdsOfNames开始遍历文档结构了

Read more ...


Ask Mr JS

[url=http://community.csdn.net/expert/Topicview2.asp?id=2542812]怎样修改theApp.m_pszAppName[/url]

总结:可以参考微软知识库Q154744

Read more ...


Ask Mr JS

[url=http://community.csdn.net/expert/Topicview2.asp?id=2535830]关于DAO和多线程的问题 [/url]

总结:放弃希望吧,你们这些使用过时技术的人

Read more ...


Ask Mr JS

今天心血来潮,整理了一下上个月在CSDN得分的问题我参与的帖子太多,整理起来有难度,所以只整理结了的贴子

希望把这个习惯保留下去

Read more ...


在Windows2000中动态禁用/启用Ctrl-Alt-Delete

来自CSDN论坛VC/MFC版的讨论 在NT/2000中怎么禁用Ctrl+Alt+Delete?(不能用gina,键盘驱动)(此帖已归档,可以在http://search.csdn.net 搜索此帖)

本文的更新信息位于http://blog.joycode.com/jiangsheng/archive/2004/07/20/27909.aspx

Read more ...


问题:Internet Explorer中的控件在可见之前没有被创建

Q195188 PRB: ActiveX Control Window Is Not Created Until Visible in Internet Explorer 使用知识库里面的方法

在Windows XP中,可以在任务栏上看到控件的窗口,很是不雅观

Read more ...


浏览器程序中添加宏支持

这个教程提供在浏览器程序中添加宏支持的方法,你会看到如何给MFC的程序添加宏支持。这篇文章也讨论了如何扩展VC6中的CHtmlView的功能,如何实现MDI结构的浏览器,以及如何分析DHTML的文档结构。

单击 jiangsheng/Samples 下载本文的代码

Read more ...


写篇文章真累

最近一篇文章(浏览器集成教学–在浏览器程序中添加宏支持)长长短短,写了两个礼拜吧。

写这篇文章的主要原因是想把网页分析做得更加灵活。这篇文章的基础是我以前为一个EBS游戏写的外挂,可以自动修改网页内容(主要是表单)和定时submit表单(有的网站的submit有时间限制)。

Read more ...


使用虚列表和自画实现文件夹的缩略图显示

本示例演示了列表控件的虚列表和自画功能,也演示了一些系统外壳的函数和接口的使用方法。

单击 jiangsheng/Samples 下载本文的代码。如果在编译示例程序的时候出现问题,你需要去http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ 升级你的头文件和库文件

Read more ...


ActiveX控件访问所在网页的DHTML文档对象模型(MFC)

Read more ...


使用IPicture的OLE实现读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像

作者的话:GDI+看起来是更好的解决方案,但是IPicture的OLE实现更简单。

很久以来,我都被一个问题困扰。关于程序中显示图像的问题,我在网络上搜索了很长时间,找到了无数的解决方案,比如分析文件格式,直接读取文件的;用控件的(柯达的ImgEdit控件);以及不知道内部实现方法的库(ImageLoad)。而我找到的方法大都不容易使用,特别是那些直接按位读取图像的。很多时候我不得不为每种文件格式写一段代码。

Read more ...


摆脱在每个命令消息处理函数中的TRY和CATCH

每个命令处理都可能导致异常,抛出异常通常导致终止当前命令处理。在每个命令处理过程中编写异常处理代码是一个十分繁琐的工作,由于命令是CCmdTarget::OnCmdMsg中处理的,所以可以这个函数中处理所有命令处理过程产生的异常而不用分别编写异常处理函数。

CCccXCommandHandler是一个基于CCmdTarget的类(参考使用单独的命令处理类来处理命令消息)。此示例可推广到所有CCmdTarget的派生类。

Read more ...


在对话框中使用网页输入数据

此对话框使用了IE5附带的DHTMLEdit控件。

Read more ...


使用目录内容建立菜单

目的:根据目录内容,建立一个菜单。菜单项为目录中的文件和子目录(以弹出方式显示)。

解决方案:遍历子目录,建立一个文件路径数组。菜单项的ID是数组的索引。当用户单击某个菜单项时,从数组中读取文件路径并执行相应的操作。

Read more ...


使用单独的命令处理类来处理命令消息

适用于有很多命令处理函数的对象,以及共享命令处理函数。

应用程序的主窗口通常要处理许多命令消息。这会使文件变得很大,不容易查找。为明确起见,可以将对象对命令消息的处理抽象出来,做成一个(这里是一个,但是可以按用途分成多个)类。

Read more ...