Compiler Errors in atlwin.h

5.1k views Asked by At

When including atlwin.h from the Microsoft ATL libraries in Visual Studio 2013 building will result in numerous complier errors about undefined elements.

i.e.

#include <atlwin.h>
class MainWnd : public CWindowImpl<MainWnd>
{};

"CWindowImpl: base class is not defined" error.

or

HMONITOR is not defined

This does not occur when building using VS2010.

How can I fix that?

2

There are 2 answers

11
interjay On

CWindowImpl is defined in <atlwin.h>, so you need to include that. I don't know what the file atldwin.h that you're including is, but apparently it doesn't contain that class.

Edit: According to a comment below by CCondron, this is due to targeting versions of Windows no longer supported by Visual C++. To fix, add:

#define WINVER 0x0500 
#define _WIN32_WINNT 0x0500
0
CCondron On

The problem is with the targeted version of windows in the stdafx.h file

from MSDN

Visual C++ no longer supports targeting Windows 95, Windows 98, Windows ME, or Windows NT. If your WINVER or _WIN32_WINNT macros are assigned to one of these versions of Windows, you must modify the macros. When you upgrade a project that was created by using an earlier version of Visual C++, you may see compilation errors related to the WINVER or _WIN32_WINNT macros if they are assigned to a version of Windows that is no longer supported.

So, changing

#ifndef WINVER  
#define WINVER 0x0400   
#endif

to

#ifndef WINVER  
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#endif

corrects the build problem