ERROR_INVALID_WINDOW_HANDLE from CreateWindowEx()
ERROR_INVALID_WINDOW_HANDLE from CreateWindowEx()
当我的程序中 CreateWindowEx(( 失败时,我收到错误ERROR_INVALID_WINDOW_HANDLE。我正在使用本机 Win32 API 的C++。
我不知道为什么,我尝试在 CreateWindowEx 中玩弄一些参数,但它每次仍然产生完全相同的错误。
我还尝试向随机函数和数据类型添加W
,希望 UNICODE 版本以某种方式工作......当然,什么都没有改变。
这是调用 CreateWindowEx(( 的函数:
int InitMainWindow( HWND *hwnd, WNDCLASSEXW *wnd, WNDPROC wndproc )
{
memset( wnd, NULL, sizeof( WNDCLASSEXW ) );
wnd->cbSize = sizeof( WNDCLASSEXW );
wnd->lpszClassName = L"MainWClass";
wnd->lpfnWndProc = wndproc;
wnd->hInstance = GetModuleHandle( NULL );
if( NULL == RegisterClassExW(wnd) )
{
printf( "InitMainWindow::RegisterClassexW() error: %drn", GetLastError() );
return GetLastError();
}
*hwnd = CreateWindowExW
(
WS_EX_ACCEPTFILES | WS_EX_APPWINDOW, //extended styles
wnd->lpszClassName, //class name
L"MainWindow", //window name
WS_OVERLAPPEDWINDOW | WS_VISIBLE, //style tags
CW_USEDEFAULT, //horizontal position
CW_USEDEFAULT, //vertical position
900, //width
600, //height
GetDesktopWindow(), //parent window
NULL, //class menu
GetModuleHandle(NULL), //some HINSTANCE pointer
NULL //Create Window Data?
);
if( NULL == *hwnd )
{
printf( "InitMainWindow::CreateWindowEx() error: %drn", GetLastError() );
return GetLastError();
}
return 0;
}
这是主要方法:
static HWND mainhwnd;
void main()
{
DWORD time;
time = GetTickCount();
MSG msg;
WNDCLASSEXW wnd = { 0 };
NOTIFYICONDATA nid;
InitMainWindow( &mainhwnd, &wnd, MainWndProc );
InitNotifyIcon( &mainhwnd, &nid );
ShowWindow( mainhwnd, true );
UpdateWindow( mainhwnd );
time = ( GetTickCount() - time );
std::cout << "Time: " << time << "rn" << std::endl;
for( ; ; ) //message loop
{
while( GetMessage( &msg, NULL, 0, 0 ) )
{
if( WM_CLOSE == msg.message ) //reassign close button to minimize to tray
{
printf("closern");
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
/*if( !IsDialogMessage( hwndListDialog, &msg ) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}*/
}
Sleep( 5 );
}
}
这是我的Windows过程:
LRESULT CALLBACK MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch(uMsg)
{
case WM_CREATE:
printf("Main Window Create.......SUCCESS");
break;
default:
break;
}
return DefWindowProc( mainhwnd, uMsg, wParam, lParam );
}
我认为问题出在你对DefWindowProc的调用上。
尝试更改行:
return DefWindowProc( mainhwnd, uMsg, wParam, lParam );
对此:
return DefWindowProc( hwnd, uMsg, wParam, lParam );
我刚刚在这里编译了您的代码,并且它工作正常。
我会
说你的MainWndProc
被调用了,问题是你mainhwnd
作为DefWindowProc参数传递,而它仍然没有初始化。你应该做:
return DefWindowProc( hwnd, uMsg, wParam, lParam );
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值
- Calling Python Script from Visual Studio C++ Solution
- ERROR_INVALID_WINDOW_HANDLE from CreateWindowEx()