我有一个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 c0000374
myapp.exe has triggered a breakpoint.
并且它在free.c中的第51行停止
所以我的问题是:我该如何解决这个问题?此外,我想保留我以前在我的前CView中绘制的东西,现在是CFormView。 CFormView能够像CView一样绘制吗?如果没有,我应该在我的CMainFrame中使用拆分窗格并拥有CView和CFormView吗?我可能使用了特定于Java swing的术语,我为此道歉。我是MFC和C ++的新手。
先感谢您,
科尔内留
答案 0 :(得分:1)
CFormView构造函数需要传入表单对话框模板的ID。这是您在可视化编辑器中创建的模板。您可以通过使用CFormView创建一个小测试项目来使您的声明看起来像测试项目中的MFC声明,从而了解其工作原理。
CFormView可以像CView(在OnDraw中)一样绘制,但如果对视图进行任何缩放或滚动,则可能会对控件产生不良影响。
混合控件与绘制输出的其他替代方法是(1)使用CControlBar将控件放在视图的边缘或(2)将CStatic放在CFormView上并在CStatic中进行绘画。
答案 1 :(得分:0)
结帐Resources.rc
。
您可以尝试添加以下内容:
IDD_DIALOG1 DIALOG 0, 0, 400, 400
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
END