【发布时间】:2015-08-03 23:04:32
【问题描述】:
所以我一直在开发一个使用 Win32 api 创建窗口的库,允许该库的用户(基本上)打开一个窗口,如下所示:
int main(int argc, char* argv[]) {
Game game(800, 600, "Hello World");
game.start();
}
现在,我目前的代码可以正常工作,但前提是我在 Visual Studio 之外运行 exe(将库链接为 dll)。如果我尝试使用调试器在 Visual Studio 内部运行它,程序会运行,但不会打开图形窗口。任何控制台输出都是正确的,这意味着程序运行正常,只是没有显示图形窗口。
我尝试过更改子系统,并且我尝试过自己实现 WinMain,就像 SFML 所做的那样here,但都没有奏效,因为我对 Win32 API 真的没有远程经验(这更像是一个教育项目而不是任何东西严重)我完全没有想法,我在任何地方都找不到类似的东西,这似乎很奇怪。
任何人都可以提供任何帮助,或指出我可能错过的明显事情吗?
窗口创建代码为:
WNDCLASSEX wndClass;
wndClass.cbSize = sizeof(WNDCLASSEX);
wndClass.style = 0;
wndClass.lpfnWndProc = &Window::staticProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(nullptr, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndClass.lpszMenuName = nullptr;
wndClass.lpszClassName = wndClassName;
wndClass.hIconSm = LoadIcon(nullptr, IDI_APPLICATION);
RegisterClassEx(&wndClass);
int chars = MultiByteToWideChar(CP_UTF8, 0, title.c_str(), -1, nullptr, 0);
wchar_t* wTitle = new wchar_t[chars];
MultiByteToWideChar(CP_UTF8, 0, title.c_str(), -1, wTitle, chars);
hWnd = CreateWindowEx(
0, wndClassName, wTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, w, h,
nullptr, nullptr, hInstance, this);
STARTUPINFO info;
GetStartupInfo(&info);
ShowWindow(hWnd, info.wShowWindow);
【问题讨论】:
-
如果代码相关,请将其发布在您的问题中。链接到无法访问的场外内容或不再存在问题的内容的问题几乎没有价值。
-
@DanKorn:你链接的问题不相关。
-
在 Visual Studio 内部和外部运行代码时得到的一个区别是当前目录通常不同。
-
请不要发布假代码。请显示 mcve。
标签: c++ windows visual-studio winapi visual-studio-2015