我有一个控制台应用程序,我可以从中创建一个窗口。
我可以很好地在窗口中渲染内容。但是窗口没有响应/用户无法控制。
只要将鼠标悬停在窗口上,就会得到沙漏光标并且无法移动窗口。
可能导致这种情况的原因是什么?
编辑:
WNDCLASSEX wndClass; // Window class
ZeroMemory(&wndClass, sizeof(wndClass)); // Clear the window class structure
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC;
wndClass.lpfnWndProc = DefWindowProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = nullptr;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wndClass.lpszMenuName = NULL;//MAKEINTRESOURCE(IDR_MAINMENU);
wndClass.lpszClassName = _classname.c_str();
wndClass.hIconSm = 0;
if (RegisterClassEx(&wndClass) == 0)// Attemp to register the window class
throw std::exception("WINDOW ERROR: Failed to register the window class!");
DWORD dwStyle = 0; // Window styles
DWORD dwExStyle = 0; // Extended window styles
dwStyle = WS_OVERLAPPEDWINDOW | // Creates an overlapping window
WS_CLIPCHILDREN | // Doesn"t draw within child windows
WS_CLIPSIBLINGS; // Doesn"t draw within sibling windows
//adjust window size
RECT rMain;
rMain.left = 0;
rMain.right = width;
rMain.top = 0;
rMain.bottom = height;
AdjustWindowRect(&rMain, dwStyle, 0);
// Attempt to create the actual window
_hwnd = CreateWindowEx( dwExStyle,
className,
windowTitle,
dwStyle,
0, 0,
rMain.right - rMain.left,
rMain.bottom - rMain.top,
nullptr,
0,
nullptr,
0);
ShowWindow(_hwnd, SW_SHOW);
SetForegroundWindow(_hwnd);
SetFocus(_hwnd);
答案 0 :(得分:8)
由于已在评论中提及,我将制作此社区维基
您需要获取窗口的消息并相应地发送它们。
/*
* HWND hWnd: this is the handle to your window (that is returned from CreateWindow[Ex]
*/
MSG msg;
while (GetMessage(&msg, hWnd, NULL, NULL) > 0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
如果你不这样做,你的wndProc
函数将永远不会收到任何消息,并且Windows发现它没有响应(因此沙漏)。
答案 1 :(得分:0)
消息循环的一部分被“暂时”评论过,我错过了。