如何抛出(throw)由 CUserException 派生的异常? 当我试图捕获(catch)一个派生类异常时,我得到以下错误"error C2039:'classCMyExce ption': is not a member of 'CMyException' 'classCMyException': undeclared ident ifier 'IsKindOf': cannot convert parameter 1 from 'int*' to 'const struct CRunt imeClass*" 你必需通过使用 DECLARE_DYNAMIC()和 IMPLEMENT_DYNAMIC()宏来使你的 CMyException 类可以动态地创建。CATCH 宏希望能够得到关于被抛出类的运行时刻信息。 异常类一定要从 CUserException 中派生出来吗? 不,CUserException 中的"User"仅仅指用户产生的异常。而把它当作你所能派生的唯一异 常是种常见的误解。 如何从 HDC 建立一个 CDC 类? 有时 Windows API 将会给你一个 DC 句柄,你可以通过它建立一个 CDC 类。例如:下拉式列 表、组合框和按钮。通过 hDC 你将接收到绘制消息。下面是将 HDC 转换成你更熟悉的 CDC 的程序段。你也可以将该技巧用在其他任何 MFC 类和 Windows 句柄的转换中。 void MyODList::DrawItem(LPDRAWITEMSTRUCT lpDrawItem) { CDC myDC; myDC.Attach(lpDrawItem->hDC); //在此插入其他需要的代码。 //如果你不将句柄分离,它将被删除,从而导致问题。 myDC.Detach(); }
另一个方法是调用 CDC 类的 FromHandle 方法: CDC * pDC = CDC:FromHandle(lpDrawItem->hDC); 目前还不清楚哪种方法更优越―使用 FromHandle()的错误也许会更少些,因为它不要求你 分离(detach)句柄。 如何从磁盘上读取 256 色位图文件? 当前,MFC 并不支持直接读取和显示 DIB 文件和 BMP 文件。然而,有很多样例应用程序能够 说明如何完成该项任务。第一个例子是 MFC 样例程序 DIBLOOK。样例 MULTDOCS 用 DIBLOOK 提供的相同
源代码来读取并显示 DIB 文件和 BMP 文件。其他两个 VC++中附带的例子是 SDK 软件包中的 DIBVIEW 程序和 SHOWDIB 程序。
如何改变一个视图的大小? 通常,你可以调用函数 MoveWindow()来改变窗口的大小。在用 MFC 库开发的应用程序中, 视图是被框架窗口所围绕的一个子窗口。为了改变一个视图的大小,你可以通过调用函数 GetParentFrame()来得到框架窗口的指针,然后调用函数 MoveWindow()来改变父窗口的大 小。当父框架窗口改变大小时,视图也会自动地改变大小来适应父窗口。 如何改变一个 CFormView 的大小? 要想详细了解的话,你可以看有关 Visual C++基础知识的文章 Q98598 《Using CFormVi ew in SDI and MDI Applications》。基本上,在从 CFormView 类派生出来的类中,你必须 覆盖函数 OnInitialUpdate()。 其他有关建立 CFormView 的细节
问题, 可以从该文章中获得。
在类 ClikethisView 中声明如下函数: virtual void OnInitialUpdate(); 在 ClikethisView 的代码中,函数如下: void ClikethisView::OnInitialUpdate() { //
使窗口与主对话框同样大小 CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit( /*FALSE*/ ); }
如何使用一个文档模板的新视图? 在用 AppWizard 创建的应用程序中, 你有两种选择: 改变当前视图的派生关系或者建立一个 新视图并且在你的 MDI 程序中同时利用新视图和原先的视图。
为了创建一个新视图,你可以用 ClassWizard 由 CView 派生一个新的类。当新类创建以后, 利用新视图或修改由 AppWizard 提供的视图,两者的步骤是相同的。
修改视类的头文件,从而将所有对 CView 类的引用改名为你所想要的名称。本例中的类由 C ScrollView 派生而来。通常,这个步骤包括对类的改变,视类将由如下方式派生而来: class CMyView : public CScrollView
修改视类的实现文件,从而将所有对 CView 的引用改名为你所想要的名称。这包括将 IMPLE MENT_DYNCREATE 那一行的语句改为: IMPLEMENT_DYNCREATE(CMyVi