C++ C++;x64平台上Win API窗口鼠标忙

C++ C++;x64平台上Win API窗口鼠标忙,c++,winapi,window,64-bit,busy-cursor,C++,Winapi,Window,64 Bit,Busy Cursor,我在C++窗口中创建了一个Win API。 如果我在Visual Studio(2015)中将目标平台设置为x86,则一切正常。 但是,如果我将目标平台设置为x64,除了在窗口弹出后的前4-5秒内光标处于忙碌状态外,所有操作都正常。 这并不是那么糟糕,但我只是想知道是什么原因造成的。 我在使用GLFW时也看到了这种行为,因此这似乎不是编程错误。 也许有人知道这是什么原因 #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd,


我在C++窗口中创建了一个Win API。 如果我在Visual Studio(2015)中将目标平台设置为x86,则一切正常。
但是,如果我将目标平台设置为x64,除了在窗口弹出后的前4-5秒内光标处于忙碌状态外,所有操作都正常。
这并不是那么糟糕,但我只是想知道是什么原因造成的。
我在使用GLFW时也看到了这种行为,因此这似乎不是编程错误。

也许有人知道这是什么原因

#include <windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
    {
        PostQuitMessage(0);
        return 0;
    }
    break;
    }

    return DefWindowProc(hWnd, message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd;
    WNDCLASSEX wc;

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = NULL;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "MainWindowClass";
    wc.hIconSm = NULL;

    RegisterClassEx(&wc);

    RECT wr = { 0, 0, 800, 800 };
    AdjustWindowRectEx(&wr, WS_OVERLAPPEDWINDOW, FALSE, 0);

    hWnd = CreateWindowEx(0, "MainWindowClass", "DirectX Lab", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, wr.right - wr.left, wr.bottom - wr.top, NULL, NULL, hInstance, NULL);

    ShowWindow(hWnd, nCmdShow);

    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}
#包括
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM)
{
开关(信息)
{
案例WM_销毁:
{
PostQuitMessage(0);
返回0;
}
打破
}
返回DefWindowProc(hWnd、message、wParam、lParam);
}
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、LPSTR lpCmdLine、int nCmdShow)
{
HWND-HWND;
WNDCLASSEX wc;
wc.cbSize=sizeof(WNDCLASSEX);
wc.style=CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=NULL;
wc.hCursor=LoadCursor(空,IDC_箭头);
wc.hbrBackground=(HBRUSH)彩色窗口;
wc.lpszMenuName=NULL;
wc.lpszClassName=“MainWindowClass”;
wc.hIconSm=NULL;
注册类别(&wc);
RECT wr={0,0,800,800};
AdjustWindowRectEx(&wr,WS_OVERLAPPEDWINDOW,FALSE,0);
hWnd=CreateWindowEx(0,“MainWindowClass”,“DirectX实验室”,WS_OVERLAPPEDWINDOW,
CW_usefault,CW_usefault,wr.right-wr.left,wr.bottom-wr.top,NULL,NULL,hInstance,NULL);
显示窗口(hWnd、nCmdShow);
味精;
while(GetMessage(&msg,NULL,0,0)!=0)
{
翻译信息(&msg);
发送消息(&msg);
}
返回msg.wParam;
}

可以是很多很多东西。启动时间主要取决于是否需要查找尚未驻留在文件系统缓存中的DLL。或者已经加载到另一个进程中。反恶意软件总是因为不允许您启动一个新的可执行文件而受到赞誉,该文件在扫描完文件之前不知从何处出现。调试器可能正在尝试查找无法用于x64可执行文件的PDB文件。等等。你必须自己缩小范围,阅读MarkRussinovich的博客以获得故障排除提示。但是为什么x32没有这样的问题呢?如果我构建一个发布版本,仍然会有忙碌的光标…我在VS2015 64位调试模式中看到同样的事情,但在release-64位或debug-32位中不会发生。它可能与Visual Studio调试器有关。但是我将其设置为“我也发布”,并且忙碌的光标仍然出现。是否尝试了Ctrl+F5(在没有调试器的情况下运行)?或者尝试从资源管理器运行该程序。我只能在源代码更改后的64位调试中看到这个恼人的问题。我不知道为什么会这样。