vc 创建窗口 问题!急急!在线等!无法生成窗口!

#define WIN32_LEAN_AND_MEAN#include<windows.h>#include<windowsx.h>#include<tchar.h>LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, LPARAM lParam, WPARAM wParam);const TCHAR *g_pWindowsClassName = _T("MyWindowClass");const TCHAR *g_pWindowsTitle = _T("My first Window Program");int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX wndClass; wndClass.cbSize = sizeof(WNDCLASSEX); wndClass.cbSize = CS_VREDRAW|CS_HREDRAW|CS_DBLCLKS; wndClass.lpfnWndProc = WNDPROC(WindowProc); wndClass.cbWndExtra = 0; wndClass.cbClsExtra = 0; wndClass.hInstance = hInstance; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = g_pWindowsClassName; wndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wndClass)) { MessageBox(NULL,_T("注册窗口类失败!"), _T("错误信息"),MB_OK); return 0; } HWND handleWindow; if(!(handleWindow = CreateWindowEx( NULL, g_pWindowsClassName, g_pWindowsTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL))) { MessageBox(NULL,_T("注册窗口失败!"), _T("错误信息"),MB_OK); return 0; } ShowWindow(handleWindow, nCmdShow); UpdateWindow(handleWindow); MSG msg; ZeroMemory(&msg, sizeof(msg)); while(msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { } } return static_cast<int>(msg.wParam);}LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, LPARAM lParam, WPARAM wParam){ PAINTSTRUCT paintStruct; HDC hdc; switch(msg) { case WM_CREATE: { }break; case WM_PAINT: { hdc = BeginPaint(hWnd, &paintStruct); EndPaint(hWnd, &paintStruct); }break; case WM_DESTROY: { PostQuitMessage(0); }break; default: { return DefWindowProc(hWnd, msg, lParam, wParam); } } return 0;}1>------ 已启动生成: 项目: TestClass, 配置: Debug Win32 ------1>正在编译...1>WinClass.cpp1>d:尀c++尀testclass尀testclass尀winclass.cpp(219) : error C2664: “MessageBoxW”: 不能将参数 2 从“const char [15]”转换为“LPCWSTR”1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换1>生成日志保存在“file:⼀⼀d:尀C++尀TestClass尀TestClass尀Debug尀BuildLog.htm”1>TestClass - 1 个错误,0 个警告========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
2026年09月26日 07:39
有2个网友回答
网友(1):

//我的可以~~
#define WIN32_LEAN_AND_MEAN
#include
#include
#include
// 窗口函数的函数原形
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

const TCHAR *g_pWindowsClassName = _T("MyWindowClass");
const TCHAR *g_pWindowsTitle = _T("My first Window Program");

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;

// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小
wndclass.style = CS_VREDRAW|CS_HREDRAW|CS_DBLCLKS;
// 指定如果大小改变就重画
wndclass.lpfnWndProc = WNDPROC(WindowProc);// 窗口函数指针
wndclass.cbClsExtra = 0;// 没有额外的类内存
wndclass.cbWndExtra = 0;// 没有额外的窗口内存
wndclass.hInstance = hInstance;// 实例句柄
wndclass.hIcon = ::LoadIcon(NULL,
IDI_APPLICATION);// 使用预定义图标
wndclass.hCursor = ::LoadCursor(NULL,
IDC_ARROW);// 使用预定义的光标
wndclass.hbrBackground = (HBRUSH)::GetStockObject(BLACK_BRUSH);// 使用白色背景画刷
wndclass.lpszMenuName = NULL;// 不指定菜单
wndclass.lpszClassName = g_pWindowsClassName ;// 窗口类的名称
wndclass.hIconSm = NULL;// 没有类的小图标

// 注册这个窗口类
::RegisterClassEx(&wndclass);

// 创建主窗口
HWND handleWindow = ::CreateWindowEx(
0, // dwExStyle,扩展样式
g_pWindowsClassName,// lpClassName,类名
g_pWindowsTitle, // lpWindowName,标题
WS_OVERLAPPEDWINDOW,// dwStyle,窗口风格
CW_USEDEFAULT, // X,初始 X 坐标
CW_USEDEFAULT, // Y,初始 Y 坐标
CW_USEDEFAULT, // nWidth,宽度
CW_USEDEFAULT, // nHeight,高度
NULL, // hWndParent,父窗口句柄
NULL, // hMenu,菜单句柄
hInstance, // hlnstance,程序实例句柄
NULL) ; // lpParam,用户数据

if(handleWindow == NULL)
{
::MessageBox(NULL, "创建窗口出错!", "error", MB_OK);
return -1;
}

// 显示窗口,刷新窗口客户区
::ShowWindow(handleWindow, nCmdShow);
::UpdateWindow(handleWindow);

// 从消息堆中取出消息
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{

}
}
return static_cast(msg.wParam);

}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
/**/
PAINTSTRUCT paintStruct;
HDC hdc;
switch (message)
{
case WM_PAINT: // 窗口客户区需要重画
{
// 使无效的客户区变的有效,并取得设备环境句柄
hdc = ::BeginPaint (hwnd, &paintStruct) ;
::EndPaint(hwnd, &paintStruct);
return 0;
}
case WM_DESTROY: // 正在销毁窗口
// 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0结束消息循环
::PostQuitMessage(0) ;
return 0 ;
}

// 将我们不处理的消息交给系统做默认处理
return ::DefWindowProc(hwnd, message, wParam, lParam);
}

网友(2):

我晕,你看仔细点
wndClass.cbSize = CS_VREDRAW|CS_HREDRAW|CS_DBLCLKS;
错了,是样式
wndClass.style