一般的用MFC编写一个窗口是会有这么一段代码:
BOOL CMyApp::InitInstance()
{
m_pMainWnd=new CMainFrm;
((CMainFrm*)m_pMainWnd)->Create(NULL,"The MFC Application");
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}我想问的是第二句话为什么要将m_pMainWnd前面加一个(CMainFrm*)不加的话就会说
error C2660: 'Create' : function does not take 2 parameters这是为什么????
BOOL CMyApp::InitInstance()
{
m_pMainWnd=new CMainFrm;
((CMainFrm*)m_pMainWnd)->Create(NULL,"The MFC Application");
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}我想问的是第二句话为什么要将m_pMainWnd前面加一个(CMainFrm*)不加的话就会说
error C2660: 'Create' : function does not take 2 parameters这是为什么????
解决方案 »
- 我的工程是mfc的对话框程序,上面有多个文本编辑框,我怎么给每一个文本编辑框都加上wm_char消息响应函数,判断每一个输入的字符都是0-9啊!
- ftp上传RAR文件后总是少两个字节,请大家帮帮忙
- 学习VC之前,要学C/C++吗?
- asdfsad
- 高分求教,如何用API控制对话框?
- sdk编程,在对话框中加入ListCtrl就不能创建成功?
- 为什么我的dialog中见不到ActiveX控件??100分!
- 请问CRect的单位(像数)和CSize单位(0.1-millimeter)如何统一度量
- VC-Debug与Release的问题
- CloseHandle(hProcess)和TerminateProcess(hProcess)有什么区别?
- 编译动态连接库出错
- 高分求助,实现Ultra Edit 一样可以用16进制或者字符形式打开文件的程序。
CMainFrm这个类的基类是? 如果是CFrameWnd 你得注意 虽然CWnd中的Create();函数是一个虚函数 但是CFrameWnd中的Create()可不是虚函数了 可以看看msdn
所以得强制转换
当然实现了指针的赋值,但m_pMainWnd的值仍然是CWnd*类型,而不是CMainFrm*类型(虽然它实际指向的是一个CMainFrm类型的对象)。因此,若你想调用CMainFrm类的非虚函数,则必须进行强制转换。
虽然你把它指向了一个new出来的CMainFrm对象 但是它本身是CWnd *类型的 只可以指向派生类CMainFrm的虚函数 我不知道你的CMainFrm基类是什么 如果是CFrameWnd的话 那么必须对指针进行强制的类型转换 因为CFrameWnd中的Create();并不是一个虚函数 基类的指针无法找到这个函数