none
RegisterClassEx 注册失败,找不到原因。代码应该没问题的说。求大神赐教。代码如下 RRS feed

  • 问题

  • #include <Windows.h>

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    PAINTSTRUCT ps;
    HDC hDC;
    switch (message)
    {
    case WM_PAINT:
    hDC = BeginPaint(hwnd, &ps);
    EndPaint(hwnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
    }
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmd, int nShow)
    {
    WNDCLASSEX cls;
    cls.cbSize = sizeof(cls);
    cls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    cls.hCursor = LoadCursor(NULL, IDC_ARROW);
    cls.style = CS_HREDRAW | CS_VREDRAW;
    cls.lpfnWndProc = WndProc;
    cls.hInstance = hInstance;
    cls.lpszMenuName = NULL;
    cls.lpszClassName = "DX11BookWindowClass";
    if (!RegisterClassEx(&cls)) 
    return -1;
    RECT rc = { 0, 0, 640, 480 };
    AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
    HWND hwnd = CreateWindow(cls.lpszClassName, "Blank Win32 Window",
    WS_OVERLAPPEDWINDOW, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
    0, 0, hInstance, 0);
    if (!hwnd) return -1;
    ShowWindow(hwnd, nShow);
    //Demo Initialize
    MSG msg = { 0 };
    while (msg.message != WM_QUIT)
    {
    if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    //Update
    //Draw
    }
    //Demo Shutdown
    return static_cast<int>(msg.wParam);
    }
    2016年4月19日 13:59

答案

  • Hi LongLife-Astray,

    我测试你的代码了,的确是注册不过去,但是我用我的代码,在工程里面就可以注册过去,所以我觉得问题还是你的代码有问题。下面是我工程里面的代码,你可以参考一下,改写你的代码,我帮你改了一些参数,还是不行。

    WNDCLASSEX wcex;

    wcex.cbSize =

    sizeof(WNDCLASSEX);

    wcex.style = CS_HREDRAW | CS_VREDRAW;

    wcex.lpfnWndProc = WndProc;

    wcex.cbClsExtra = 0;

    wcex.cbWndExtra = 0;

    wcex.hInstance = hInstance;

    wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEMO1));

    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

    wcex.lpszMenuName = MAKEINTRESOURCE(IDC_DEMO1);

    wcex.lpszClassName = szWindowClass;

    wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    returnRegisterClassEx(&wcex);

    编辑:

    我把你的注册代码,放到我的工程里面,也是注册不了的,所以还是你代码的问题。

    2016年4月20日 3:19
    版主

全部回复

  • WNDCLASSEX cls;
    --->
    WNDCLASSEX cls = { 0 };

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2016年4月20日 2:15
    版主
  • Hi LongLife-Astray,

    我测试你的代码了,的确是注册不过去,但是我用我的代码,在工程里面就可以注册过去,所以我觉得问题还是你的代码有问题。下面是我工程里面的代码,你可以参考一下,改写你的代码,我帮你改了一些参数,还是不行。

    WNDCLASSEX wcex;

    wcex.cbSize =

    sizeof(WNDCLASSEX);

    wcex.style = CS_HREDRAW | CS_VREDRAW;

    wcex.lpfnWndProc = WndProc;

    wcex.cbClsExtra = 0;

    wcex.cbWndExtra = 0;

    wcex.hInstance = hInstance;

    wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEMO1));

    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

    wcex.lpszMenuName = MAKEINTRESOURCE(IDC_DEMO1);

    wcex.lpszClassName = szWindowClass;

    wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    returnRegisterClassEx(&wcex);

    编辑:

    我把你的注册代码,放到我的工程里面,也是注册不了的,所以还是你代码的问题。

    2016年4月20日 3:19
    版主
  • 谢谢了

    是这个WNDCLASSEX 里的传参少了。问题解决了  很感谢

    2016年4月20日 5:37
  • 谢谢了

    是这个WNDCLASSEX 里的传参少了。问题解决了  很感谢

    既然问题解决了,那就请mark这个case吧。谢谢

    2016年4月20日 5:50
    版主