包装 Win32 的库不会在 Visual Studio 中打开窗口
Posted
技术标签:
【中文标题】包装 Win32 的库不会在 Visual Studio 中打开窗口【英文标题】:Library wrapping Win32 does not open window in Visual Studio 【发布时间】: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);
【问题讨论】:
Create window console inside main win32 window的可能重复 如果代码相关,请将其发布在您的问题中。链接到无法访问的场外内容或不再存在问题的内容的问题几乎没有价值。 @DanKorn:你链接的问题不相关。 在 Visual Studio 内部和外部运行代码时得到的一个区别是当前目录通常不同。 请不要发布假代码。请显示 mcve。 【参考方案1】:我最近没有看到但曾经是真实存在的最大问题之一是窗口位于屏幕外。这看起来就像您的描述“没有打开”,而实际上窗口是打开的。
因此,我强烈建议在您的第二个监视器上运行 Visual Studio,以便您自己的程序拥有可用的主监视器。不要尝试在没有额外屏幕的情况下调试 GUI。
【讨论】:
【参考方案2】:看起来像 vs2015 调试器中的一个错误,如STARTUPINFO.wShowWindow is 0 when running from Visual Studio接受的答案中所述
尝试在工具 | 中设置Use Native Compatibility Mode
选项选项 |调试 |一般。
【讨论】:
以上是关于包装 Win32 的库不会在 Visual Studio 中打开窗口的主要内容,如果未能解决你的问题,请参考以下文章
修改vs2012默认的库目录及包含目录的方法(续——Win7_64bits下Visual Studio2012中安装配置OpenCV)