【发布时间】:2017-08-15 03:33:56
【问题描述】:
以下是 Directx 11 代码,它显示一个窗口并保持打开状态等待消息:
#include "stdafx.h"
#include <iostream>
LRESULT CALLBACK WindowProc(_In_ HWND hwnd, _In_ UINT uMsg,
_In_ WPARAM wParam, _In_ LPARAM lParam)
{
if (uMsg == WM_DESTROY) {
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
// Directx main
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmd, int nCmdShow)
{
WNDCLASSEX window;
ZeroMemory(&window, sizeof(WNDCLASSEX));
window.cbSize = sizeof(WNDCLASSEX);
window.hbrBackground = (HBRUSH) COLOR_WINDOW;
window.hInstance = hInstance;
window.lpfnWndProc = WindowProc;
window.lpszClassName = (LPCWSTR)"MainWindow"; // class name
window.style = CS_HREDRAW | CS_VREDRAW;
RegisterClassEx(&window);
HWND windowHandle = CreateWindow((LPCWSTR)"Main Window", (LPCWSTR)"DirectX Tut!", WS_OVERLAPPEDWINDOW,
100, 100, 600, 800, NULL, NULL, hInstance, 0);
if (!windowHandle)
return -1;
ShowWindow(windowHandle, nCmdShow);
MSG message;
while (GetMessage(&message, NULL, 0, 0)) // continuously loop for messages
{
DispatchMessage(&message);
}
return 0;
}
stdafx.h 是一个预编译的头文件,我在其中包含了所有 DirectX 包含的内容。即在C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\um;
我还包括位于C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64 中的C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\um; 库
我使用的是 Visual Studio 2015,Windows 8.1 64 位。我按照this 教程创建 Directx 应用程序。只需制作一个 Win32 项目,在 include 和 libs 中完成这些修改,粘贴代码并正确构建它。但是,运行不会输出任何内容。它只是说构建成功。 VS 适用于我所有其他项目。我已经在 x64 模式下尝试了所有配置。如果我不得不猜测,我会说它没有找到 dll。我找不到罪魁祸首。
【问题讨论】:
-
代码看起来不错,应该会显示主窗口,但是由于您还没有处理 WM_PAINT,所以应该可以看到空白的客户区。究竟是什么问题?
-
问题是窗口没有出现,也就是应用程序没有运行。不过它构建得非常好。
-
您应该调试并找出失败的原因。由于无效的窗口句柄,它可能返回 -1?
-
是的,这就是正在发生的事情!当我不调试时,它没有显示输出编号。
-
我发现了错误。创建窗口句柄时应该是
(LPCWSTR)"MainWindow"而不是(LPCWSTR)"Main Window"。谢谢您的帮助。我刚刚开始 DirectX 编程,我有点困惑,至于我是否忘记了其他更重要的东西。
标签: c++ visual-studio visual-studio-2015 directx directx-11