fatal error c1189: #error : windows.h already included. mfc apps must not #include

场景:VC编译异常: fatal error C1189:WINDOWS.H already included. MFC apps must not

VC编译错误: fatal error C1189:WINDOWS.H already included. MFC apps must not #include <windows.h>。多谢!!
e:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
Error executing cl.exe.

想用CFileFind类,因此#include <afx.h>就编译不过了,网上说要把#include <windows.h>删掉,那我的vc工程里有很多文件都包含了这句,都要注释掉吗?有没有其它方法啊。
另外为什么不包含#include <afx.h>可以编译过呢?
请哪位大侠指点一下!!多谢多谢!!

------解决方案--------------------
编译器提示你了
MFC apps must not #include <windows.h> 
两者不能同时
------解决方案--------------------
替换一下吧。在stdafx.h里面包含#include <afxwin.h>,然后把所有其它文件的#include <windows.h>注释掉
------解决方案--------------------
没办法,无论哪种方式来改,都得改所有的文件。
------解决方案--------------------
探讨
多谢!我的工程很多文件都包含了 #include <windows.h>,要去掉的话改动很大,有其它办法没?

------解决方案--------------------
你是在win32下吧?

那个类MS用不了,用这个函数吧:GetOpenFileName
#include "OpenFile.h"
------解决方案--------------------
就是说你不能同时包含afxwin.h 和windows.h
------解决方案--------------------
错了,是这个函数: FindFirstFile
用法你去帮助里找吧
给个例子:
HANDLE hFile = FindFirstFile(SearchFile, &data);
if (INVALID_HANDLE_VALUE != hFile) 
{
do 
{
lstrcpy(SearchFile,strPath);
lstrcat(SearchFile,_T("\\"));
lstrcat(SearchFile,data.cFileName);

lpFileNames->AddStr(SearchFile);
nLoadedFiles++;
} while (FindNextFile(hFile, &data)); 
FindClose(hFile);
}
------解决方案--------------------
可以用API, FindFirstFile/FindNextFile来查找文件...
------解决方案--------------------
把这个cpp文件中的windows.h改成afx.h,其它不变。
另外,你可以用FindFirstFile、FindNextFile、FindClose这几个API,既然不是MFC项目,最好不要用MFC。
------解决方案--------------------
这个很简单,你首先要在适当的地方
#undef windows.h的特殊标志,然后再#include windows.h就可以了。

------解决方案--------------------
C/C++ code
#ifdef _WINDOWS_
#undef _WINDOWS_
#include "afxcmn.h"
#endif

------解决方案--------------------
有次序要求的,将这个多换几个地方就可以了。

------解决方案--------------------
不好意思,好久没上了

要删除文件的话用这个函数:
//如果temp文件存在,删除
if(PathFileExists(L"replay\\temp.trep"))
DeleteFile(L"replay\\temp.trep");
在头文件里加上这个:
#include "shlwapi.h"
#pragma comment(lib,"shlwapi.lib")
两个函数就都能用了!
------解决方案--------------------
首先呢,要删除目录(包含文件、子文件夹)可以用SHFileOperation函数完成,不用自己写函数。

然后呢,可以在API函数调用失败的时候用GetLastError函数查看错误原因。

还有呢,用来保存文件夹、文件名的字符串缓冲区应该不小于MAX_PATH大小(看看WIN32_FIND_DATA中cFileName的声明),你的200个字符可能嫌小。

另外呢,你的递归考虑了文件和文件夹的区别,还需要考虑“.”、“..”这两个特殊文件夹。

多说一句,纯粹的字符串复制可以用strcpy函数,所以while循环中不需要用sprintf格式化,这中间的效率有差别,当然你的用法又很偷巧,其实这里根本不用再复制一份字符串,直接用FindFileData.cFileName作下面的调用参数就可以了。
------解决方案--------------------
错误183:当文件已存在时,无法创建该文件。

和你的函数对不上啊。你调试跟踪一下在什么情况下(哪个文件名)出现调用错误。