Windows环境直接运行EXE时子窗口按钮不显示,但MSYS2控制台启动正常的问题求助
Windows环境直接运行EXE时子窗口按钮不显示,但MSYS2控制台启动正常的问题求助
各位大佬好,我遇到一个挺诡异的Windows编程问题,想请教下大家:
我在代码里给子窗口hwnd_top创建自绘按钮,相关代码如下:
auto create_button=[](HWND hwnd, HWND hwnd_parent, RECT rect, BUTTON id){ if(hwnd=CreateWindow(L"button", L"", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, rect.left, rect.top, rect.right, rect.bottom, hwnd_parent, (HMENU) id, nullptr, nullptr);!hwnd) throw ERROR_BUTTON; }; create_button(button.menu, hwnd_top,{20,20,40,40}, BUTTON::MENU);
子窗口hwnd_top的创建代码是:
hwnd_top = CreateWindowExW(0,wc.lpszClassName,(LPCTSTR) NULL, WS_CHILD, GET_INTO_RECT(wnd_rect_top), hwnd, nullptr, wc.hInstance,this)
现在的问题是:通过MSYS2控制台启动生成的run.exe时,按钮显示完全正常;但直接双击EXE运行的话,子窗口上的按钮就彻底消失了。
我一开始怀疑是DLL依赖的问题,但奇怪的是程序本身能正常启动,用Dependency Walker检查也没发现异常。我的编译命令是:
g++ -g main.cpp Window.cpp -o run.exe -mwindows -municode -lMsimg32 -lGdiplus
不管是在MSYS2环境还是CMD里编译,结果都是一样的。另外我还测试了下,如果把按钮创建在主窗口上,不管怎么启动都能正常显示,只有子窗口上的按钮出现这个问题。
有没有大佬遇到过类似的情况,或者能给我点排查方向?
备注:内容来源于stack exchange,提问作者I101I
相关产品推荐
相关产品推荐

