回 帖 发 新 帖 刷新版面

主题:高手来。。求助!

fatal error C1016: #if[n]def expected an identifier这个出错了。
#ifndef <windows.h>
#endif
是什么回事?

回复列表 (共3个回复)

沙发

都没有源代码,怎么看呀?

板凳


// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

// afxv_w32.h - target version/configuration control for Win32

#ifndef <windows.h>
#endif

// STRICT is the only supported option (NOSTRICT is no longer supported)
#ifndef STRICT
#define STRICT 1
#endif

// certain parts of WINDOWS.H are necessary
#undef NOKERNEL
#undef NOGDI
#undef NOUSER
#undef NODRIVERS
#undef NOLOGERROR
#undef NOPROFILER
#undef NOMEMMGR
#undef NOLFILEIO
#undef NOOPENFILE
#undef NORESOURCE
#undef NOATOM
#undef NOLANGUAGE
#undef NOLSTRING
#undef NODBCS
#undef NOKEYBOARDINFO
#undef NOGDICAPMASKS
#undef NOCOLOR
#undef NOGDIOBJ
#undef NODRAWTEXT
#undef NOTEXTMETRIC
#undef NOSCALABLEFONT
#undef NOBITMAP
#undef NORASTEROPS
#undef NOMETAFILE
#undef NOSYSMETRICS
#undef NOSYSTEMPARAMSINFO
#undef NOMSG
#undef NOWINSTYLES
#undef NOWINOFFSETS
#undef NOSHOWWINDOW
#undef NODEFERWINDOWPOS
#undef NOVIRTUALKEYCODES
#undef NOKEYSTATES
#undef NOWH
#undef NOMENUS
#undef NOSCROLL
#undef NOCLIPBOARD
#undef NOICONS
#undef NOMB
#undef NOSYSCOMMANDS
#undef NOMDI
#undef NOCTLMGR
#undef NOWINMESSAGES

#ifndef WIN32
#define WIN32
#endif

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#ifdef _UNICODE
#ifndef UNICODE
#define UNICODE         // UNICODE is used by Windows headers
#endif
#endif

#ifdef UNICODE
#ifndef _UNICODE
#define _UNICODE        // _UNICODE is used by C-runtime/MFC headers
#endif
#endif

#ifdef VC_EXTRALEAN
#define WIN32_EXTRA_LEAN
#define NOSERVICE
#define NOMCX
#define NOIME
#define NOSOUND
#define NOCOMM
#define NOKANJI
#define NORPC
#define NOPROXYSTUB
#define NOIMAGE
#define NOTAPE

#ifndef NO_ANSIUNI_ONLY
#ifdef _UNICODE
#define UNICODE_ONLY
#else
#define ANSI_ONLY
#endif
#endif //!NO_ANSIUNI_ONLY

#endif //VC_EXTRALEAN

/////////////////////////////////////////////////////////////////////////////
// Turn off warnings for /W4
// To resume any of these warning: #pragma warning(default: 4xxx)
// which should be placed after the AFX include files

#ifndef ALL_WARNINGS
#pragma warning(disable: 4201)  // winnt.h uses nameless structs
#endif

#define _WIN32_WINDOWS 0x0500
#include <windows.h>

#undef WM_MOUSELAST
#define WM_MOUSELAST 0x0209

#include <zmouse.h>

struct HKEY__;
typedef struct HKEY__ *HKEY;

#ifndef _INC_COMMCTRL
    #include <commctrl.h>

    // Note: We must avoid using TB_ADDBUTTONW and TB_INSERTBUTTONW in the Unicode
    //  build or else MFC42U.DLL will not be compatible with pre-IE4 versions of
    //  COMCTL32.DLL.
    #ifdef TB_ADDBUTTONSA
        #undef TB_ADDBUTTONS
        #define TB_ADDBUTTONS TB_ADDBUTTONSA
    #endif

    #ifdef TB_INSERTBUTTONA
        #undef TB_INSERTBUTTON
        #define TB_INSERTBUTTON TB_INSERTBUTTONA
    #endif
#endif

#ifndef EXPORT
#define EXPORT
#endif

#ifndef _INC_TCHAR
    #include <tchar.h>      // used for ANSI v.s. UNICODE abstraction
#endif
#ifdef _MBCS
#ifndef _INC_MBCTYPE
    #include <mbctype.h>
#endif
#ifndef _INC_MBSTRING
    #include <mbstring.h>
#endif
#endif

/////////////////////////////////////////////////////////////////////////////
// Now for the Windows API specific parts

// WM_CTLCOLOR for 16 bit API compatability
#define WM_CTLCOLOR     0x0019

// Win32 uses macros with parameters for this, which breaks C++ code.
#ifdef GetWindowTask
#undef GetWindowTask
AFX_INLINE HTASK GetWindowTask(HWND hWnd)
    { return (HTASK)::GetWindowThreadProcessId(hWnd, NULL); }
#endif

// Win32 uses macros with parameters for this, which breaks C++ code.
#ifdef GetNextWindow
#undef GetNextWindow
AFX_INLINE HWND GetNextWindow(HWND hWnd, UINT nDirection)
    { return ::GetWindow(hWnd, nDirection); }
#endif

// Avoid Win95 mapping CToolBar::DrawState to DrawState[A/W]
#ifdef DrawState
#undef DrawState
AFX_INLINE BOOL WINAPI DrawState(HDC hdc, HBRUSH hbr, DRAWSTATEPROC lpOutputFunc,
    LPARAM lData, WPARAM wData, int x, int y, int cx, int cy, UINT fuFlags)
#ifdef UNICODE
    { return ::DrawStateW(hdc, hbr, lpOutputFunc, lData, wData, x, y, cx, cy,
        fuFlags); }
#else
    { return ::DrawStateA(hdc, hbr, lpOutputFunc, lData, wData, x, y, cx, cy,
        fuFlags); }
#endif
#endif

// Avoid Win95 mapping CStatusBar::DrawStatusText to DrawStatusText[A/W]
#ifdef DrawStatusText
#undef DrawStatusText
AFX_INLINE void WINAPI DrawStatusText(HDC hDC, LPRECT lprc, LPCTSTR szText,
    UINT uFlags)
#ifdef UNICODE
    { ::DrawStatusTextW(hDC, lprc, szText, uFlags); }
#else
    { ::DrawStatusTextA(hDC, lprc, szText, uFlags); }
#endif
#endif

// FreeResource is not required on Win32 platforms
#undef FreeResource
AFX_INLINE BOOL WINAPI FreeResource(HGLOBAL) { return TRUE; }
// UnlockResource is not required on Win32 platforms
#undef UnlockResource
AFX_INLINE int WINAPI UnlockResource(HGLOBAL) { return 0; }



编译的时候出现afxv_w32.h(13) : fatal error C1016: #if[n]def expected an identifier

3 楼

CPP的源代码是:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "chap_3.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
    ON_COMMAND(ID_COLOR_RED, OnColorRed)
    ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
    ON_COMMAND(ID_COLOR_BLACK, OnColorBlack)
    ON_COMMAND(ID_LINE_SINGLE, OnLineSingle)
    ON_COMMAND(ID_LINE_DOUBLE, OnLineDouble)
    ON_COMMAND(ID_LINE_TRIPLE, OnLineTriple)
    ON_COMMAND(ID_TOOLS_LINE, OnToolsLine)
    ON_COMMAND(ID_TOOLS_RECTANGLE, OnToolsRectangle)
    ON_COMMAND(ID_TOOLS_CIRCLE, OnToolsCircle)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
    // TODO: add member initialization code here
    m_CurrentColor=RGB(0,0,0);
    m_CurrentThickness=1;
}

CMainFrame::~CMainFrame()
{
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
    CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
    CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::OnColorRed() 
{
    // TODO: Add your command handler code here
    m_CurrentColor=RGB(255,0,0);
}

void CMainFrame::OnColorBlue() 
{
    // TODO: Add your command handler code here
    m_CurrentColor=RGB(0,0,255);
}

void CMainFrame::OnColorBlack() 
{
    // TODO: Add your command handler code here
    m_CurrentColor=RGB(0,0,0);
}

void CMainFrame::OnLineSingle() 
{
    // TODO: Add your command handler code here
    m_CurrentThickness=1;
}

void CMainFrame::OnLineDouble() 
{
    // TODO: Add your command handler code here
    m_CurrentThickness=2;
}

void CMainFrame::OnLineTriple() 
{
    // TODO: Add your command handler code here
    m_CurrentThickness=3;
}

void CMainFrame::OnToolsLine() 
{
    // TODO: Add your command handler code here
    CPen newPen;
    CPen *oldPen;

    newPen.CreatePen(PS_SOLID,m_CurrentThickness,m_CurrentColor);
    
    CClientDC dc(this);

    CRect rect;
    GetClientRect(&rect);
    dc.FillRect(&rect,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));

    oldPen=dc.SelectObject(&newPen);
    dc.MoveTo(50,30);
    dc.LineTo(300,200);
    dc.SelectObjct(&oldPen);

}

void CMainFrame::OnToolsRectangle() 
{
    // TODO: Add your command handler code here
    CPen newPen;
    CPen *oldPen;

    newPen.CreatePen(PS_SOLID,m_CurrentThickness,m_CurrentColor);
    
    CClientDC dc(this);

    CRect rect;
    GetClientRect(&rect);
    dc.FillRect(&rect,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));

    oldPen=dc.SelectObject(&newPen);
    dc.Rectangle(50,30,300,200);
    dc.SelectObjct(&oldPen);
}

void CMainFrame::OnToolsCircle() 
{
    // TODO: Add your command handler code here
    CPen newPen;
    CPen *oldPen;

    newPen.CreatePen(PS_SOLID,m_CurrentThickness,m_CurrentColor);
    
    CClientDC dc(this);

    CRect rect;
    GetClientRect(&rect);
    dc.FillRect(&rect,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));

    oldPen=dc.SelectObject(&newPen);
    dc.Ellipse(50,30,300,200);
    dc.SelectObject(&oldPen);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册