我正在运行的代码:
#include <Windows.h>
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
const auto pClassName = "direct3D";
//register window class
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof(wc);
wc.style = CS_OWNDC;
wc.lpfnWndProc = DefWindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = nullptr;
wc.hCursor = nullptr;
wc.hbrBackground = nullptr;
wc.lpszMenuName = pClassName;
wc.hIconSm = nullptr;
RegisterClassEx(&wc);
//create instance of window
HWND hwnd = CreateWindowEx(
0,
pClassName,
"Direct3D",
WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
0, 0, 640, 480,
nullptr, nullptr, hInstance, nullptr
);
ShowWindow(hwnd, SW_SHOW);
//message pump
MSG msg;
int test = GetMessage(&msg, nullptr, 0, 0);
while (GetMessage(&msg, nullptr, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
预期输出: 我可以拖动,最小化或关闭的简单窗口。
错误: 没有错误被打印。 但是逐步执行可以显示hwnd:的值。我猜这与此有关。我浏览了有关该错误的MSDN文档,但没有帮助。我正在关注YouTube上Directx3d的教程。
答案 0 :(得分:8)
您没有给Window类命名,即成员lpszClassName
。相反,您设置的lpszMenuName
肯定不是您想要的。
PS:您说:“没有打印错误” 。实际上,Win32不会打印错误,您有责任始终检查Win32函数调用的返回值(错误时{RegisterClassEx()
返回0
)。然后,如果失败,请致电GetLastError()
以获取原因。您可以获取可用原因列表here。而且,如果需要,您现在可以在调试窗口stderr,您的日志文件中打印错误消息(请参见FormatMessage())。
您可能已经注意到,Internet上的教程通常会忽略错误处理,因为它很无聊,并且给他们想教的东西增加了噪音。但是在现实世界中,正确的错误检查始终是最好的主意。