我有一个CView,我一直在上面画东西。然后我意识到我需要在CView中添加一些控件,例如文本框和组合框。因此,我试图将我的CView转换为没有默认构造函数的CFormView。但是我需要此行IMPLEMENT_DYNCREATE(CMyView, CFormView)的默认构造函数,因此我创建了像CMyView::CMyView():CFormView( ( UINT )666 ) { ... }这样的默认构造函数。那个666是因为我不知道我应该传递哪个参数。我猜测我需要传递CMyView类的ID。我找不到最初由Visual Studio项目向导自动创建的CMyView类的ID。我应该在哪里寻找?当我运行程序时,出现以下错误:First-chance exception at 0x75AEC41F in myapp.exe: Microsoft C++ exception: CInvalidArgException at memory location 0x003CF134.Critical error detected c0000374myapp.exe has triggered a breakpoint.它停在free.c的第51行
所以我的问题是:我该如何解决?另外,我想保留以前在以前的CView(现在为CFormView)中绘制的内容。 CFormView能够像CView一样绘画吗?如果没有,我是否应该在CMainFrame中使用拆分窗格并拥有CView和CFormView?我可能使用了特定于Java swing的术语,对此我深表歉意。我是MFC和C++的新手。
先感谢您,
科尼留

最佳答案

CFormView构造函数需要传递表单对话框模板的ID。这是您在可视编辑器中创建的模板。通过使用CFormView创建一个小的测试项目以使您的声明看起来像测试项目中的MFC声明,您可以看到它的工作原理。

CFormView可以像CView一样绘制(在OnDraw中),但是如果对 View 进行任何缩放或滚动,则可能会对控件产生不良影响。

将控件与绘制的输出混合在一起的其他替代方法是(1)使用CControlBar将控件放在 View 的边缘,或者(2)在CFormView上放置一个CStatic并在CStatic中进行绘制。

关于c++ - 将CView转换为CFormView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19897357/

10-13 06:31