Why am I getting error code 87 (Invalid parameter) from RegisterClassEx?
Here's the code
#include <windows.h>
const wchar_t g_szClassName[] = L"myWindowClass";
// Step开发者_运维知识库 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{/*...*/
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, L"Window Registration Failed!", L"Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Step 2: Creating the Window...
return Msg.wParam;
}
This code is straight from Forgers Win32 Tutorial (with L""
and wchar_t where needed). Yet I can't make it work on WinXP SP3 x86 and VC2008Express SP1.
You didn't set style member, for instance (taken from wizard created code):
wc.style = CS_HREDRAW | CS_VREDRAW;
After the declaration of WNDCLASSEX wc;
the memory will just contain random values.
You can do this
WNDCLASSEX wc = { 0 };
or you can do that
ZeroMemory(&wc, sizeof(WNDCLASSEX));
to ensure that every field is set to at least zero.
精彩评论