CreateWindow函数返回NULL

xiaoxiao2021-02-28  94

在学习Windows开发期间,遇到的问题。

写了一个GUI项目,运行之后,没有反应。调试后发现,CreateWindow函数返回NULL。大概的代码如下:

#include "main.h" #include<algorithm> #include<iostream> char szFilePath[MAX_PATH] = { 0 }; char szResult[4096]; CQueue<QueueElement> queue; TCHAR* szMutex = _T("__mutex__l32__"); int WINAPI _tWinMain(HINSTANCE hThis, HINSTANCE hPrev, LPTSTR szCommandLine, int iCmdShow) { UNREFERENCED_PARAMETER(hPrev); UNREFERENCED_PARAMETER(szCommandLine); TCHAR* szWindowClass = _T("__concurrent_operation__"); WNDCLASSEX wndEx; wndEx.cbSize = sizeof(WNDCLASSEX); wndEx.style = CS_HREDRAW | CS_VREDRAW; wndEx.lpfnWndProc = WindowProcedure; wndEx.cbClsExtra = 0; wndEx.cbWndExtra = 0; wndEx.hInstance = hThis; wndEx.hIcon = LoadIcon(wndEx.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); wndEx.hIconSm = LoadIcon(wndEx.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); wndEx.hCursor = LoadCursor(nullptr, IDC_ARROW); wndEx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndEx.lpszMenuName = NULL; wndEx.lpszClassName = _T("__concurrent_operation__"); if (!RegisterClassEx(&wndEx)) { return 1; } InitCommonControls(); HWND hWnd = CreateWindow(szWindowClass, _T("Concurrent operation"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, 50, 50, 305, 250, NULL, NULL, wndEx.hInstance, NULL); if (!hWnd) { return 1; } ShowWindow(hWnd, SW_SHOW); HANDLE hMutex = CreateMutex(NULL, FALSE, szMutex); MSG msg; while (GetMessage(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } CloseHandle(hMutex); UnregisterClass(wndEx.lpszClassName, wndEx.hInstance); return (int)msg.wParam; }

经过查找网络,终于发现 问题在于 

wndEx.lpszClassName = _T("__concurrent_operation__");

 和 

CreateWindow(szWindowClass, _T("Concurrent operation"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, 50, 50, 305, 250, NULL, NULL, wndEx.hInstance, NULL);

中的第一个参数不一致。虽然都是同一个字符串,但这样也不行。 

后来改为 wndEx.lpszClassName = szWindowClass; 顺利通过

转载请注明原文地址: https://www.6miu.com/read-57013.html

最新回复(0)