报错信息:static_cast” : 无法从“LRESULT (__thiscall CStockDataRecApp::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”我把 CStockDataRecApp 继承 CWin 报错:未定义基类。该怎么解决?初次写MFC程序,问题多多,谢了!

解决方案 »

  1.   

    这是你自己加的类?原来向导生成的那个App类哪去了?
      

  2.   

    向导生成的:// StockDataRec.h : StockDataRec 应用程序的主头文件
    //
    #pragma once#ifndef __AFXWIN_H__
    #error 在包含用于 PCH 的此文件之前包含“stdafx.h” 
    #endif#include "resource.h"       // 主符号//我的股票数据消息从什么位置开始
    #define MY_StkDataMsg WM_APP + 1
    // CStockDataRecApp:
    // 有关此类的实现,请参阅 StockDataRec.cpp
    //class CStockDataRecApp : public CWin
    {
    public:
    CStockDataRecApp();
    // 重写
    public:
    virtual BOOL InitInstance();// 实现
    afx_msg void OnAppAbout(); //股票数据消息处理方法
    afx_msg LRESULT MY_StkDataMsgAction(WPARAM wFileType,LPARAM lPara); DECLARE_MESSAGE_MAP()
    };extern CStockDataRecApp theApp;
      

  3.   

    不对,生成的代码是如下:// StockDataRec.h : StockDataRec 应用程序的主头文件
    //
    #pragma once#ifndef __AFXWIN_H__
    #error 在包含用于 PCH 的此文件之前包含“stdafx.h” 
    #endif#include "resource.h"       // 主符号//我的股票数据消息从什么位置开始
    #define MY_StkDataMsg WM_APP + 1
    // CStockDataRecApp:
    // 有关此类的实现,请参阅 StockDataRec.cpp
    //class CStockDataRecApp : public CWinApp
    {
    public:
    CStockDataRecApp();
    // 重写
    public:
    virtual BOOL InitInstance();// 实现
    afx_msg void OnAppAbout(); //股票数据消息处理方法
    afx_msg LRESULT MY_StkDataMsgAction(WPARAM wFileType,LPARAM lPara); DECLARE_MESSAGE_MAP()
    };extern CStockDataRecApp theApp;
      

  4.   

    HANDLE   hFile  = NULL;
    WIN32_FIND_DATA   fd = {0};
    _tcscpy(tsTemp, strFolder);
    _tcscat(tsTemp, _T("*.*"));
    hFile = ::FindFirstFile(tsTemp, &fd);
    if(hFile != INVALID_HANDLE_VALUE)
    {
    do
    {
    if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)  {
    if(_tcscmp(fd.cFileName, _T(".")) == 0 || _tcscmp(fd.cFileName, _T("..")) == 0)
    {
    continue;
    }
    ...
                    ...
    }
    while(::FindNextFile(hFile,&fd));
    ::FindClose(hFile);
    这段代码可以遍历strFolder目录下的所有文件 
      

  5.   

    VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过 
    a,ON_MESSAGE(message,OnMyMessage); 
    OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM); 
    如果不符合,则有错误提示: 
    error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” 
    error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” 
    b,在VS2005中,OnMyMessage返回值必须为BOOL,且含有一个 UINT 参数指出了命令ID,其形式为:afx_msg BOOL OnMyMessage(UINT);如果不符合,则有错误提示. 
    如在VS6中,OnMyMessage2的定义为afx_msg BOOL OnViewZoomBar()时亦可正常编译通过,但在VS2005下,有错误提示: 
    error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)” 
    error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”