【发布时间】:2011-01-11 18:37:37
【问题描述】:
通常我使用 Visual Studio,但我切换到了 mingw,我喜欢让我的应用程序可以轻松地从 unicode 和多字节更改,在我的 mingw 项目中我有我的定义并包含如下:
#define WIN32_LEAN_AND_MEAN
#define WINVER 0x0700
#define _UNICODE
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#define WND_MAIN_CLASS _T("MainWindowFrame")
然后我注册并创建我的窗口,例如
WNDCLASSEX wc;
...
wc.lpszClassName = WND_MAIN_CLASS;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0, WND_MAIN_CLASS, _T("Main Window"),
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInst, NULL);
但是当我去编译时,我得到错误,它无法将 WNDCLASSEX lpszClassName 上的 wchar_t 转换为 CHAR* 以及类名和窗口标题上的 CreateWindowEx。
如果我右键单击并转到 createwindowex 和 WNDCLASSEX 的声明,它会从 winuser.h 中找到这些:
typedef WNDCLASSEXW WNDCLASSEX,*LPWNDCLASSEX,*PWNDCLASSEX;
#define CreateWindowEx CreateWindowExW
如果我注释掉定义 _UNICODE,它会编译并正常工作
【问题讨论】:
-
那个WINVER是怎么回事?我不知道有 Windows 版本 7。
-
大声笑,我认为这意味着 Windows 7,哦,好吧.. 至少现在应该包含所有内容,它是如此之高...... Windows 7 的 WINVER 是什么?我认为 vista 是 0x0600 和 xp 0x0500
-
@user394242: 2000 是 5.0, XP=5.1, 2003=5.2, Vista=6.0 和 7=6.1(2008 与 VistaSP1: 6.0.6001 相同,而 VistaRTM 的内部版本号是 6000,这是服务包第一次更改操作系统版本 AFAIK)
-
如果你想在 MinGW 中使用 Unicode,你需要一个包装器或
-municode选项。详情请见:stackoverflow.com/questions/3571250/wwinmain-unicode-and-mingw/…。
标签: winapi unicode mingw codeblocks