我正在尝试学习一些Windows和directX编程,我正在尝试一些不同的东西。当突然我的窗户停止出现时,即使这是一个成功的构建。我想我一定搞砸了一些东西然后我解开了所有东西,直到我回到我最后设法让窗口出现的地方,但是现在当我跑(成功构建)时它仍然没有显示:(和我开始没有想法可能会出现什么问题,这很奇怪。自从上次我开始工作以来,我做的一件事就是添加一些libs目录,但我很难看到它会如何影响以这种方式编程。你们之前有没有人遇到这个问题,如果是这样,你是如何解决它的?这是创建窗口的函数的代码(是的我知道无限循环,它不应该导致这个问题,对吗?):
PS。我也尝试在WINDCLASSEX和WINDCLASS之间进行更改,所有需要更改的函数都没有改变,ds。
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow){
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
RegisterClass(&wc);
RECT wr = {0, 0, 500, 400}; // set the size, but not the position
AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE); // adjust the size
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"My first window", // Window text
WS_OVERLAPPEDWINDOW, // Window style
CW_USEDEFAULT, CW_USEDEFAULT,//position x,y
wr.right-wr.left, wr.bottom-wr.top,//width, height
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL){
return 0;
}
InitD3D(hwnd);
// Run the message loop.
MSG msg = { };
while (true){
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else{
}
}
return 0;
}
答案 0 :(得分:1)
看起来你需要ShowWindow
来电(除非InitD3D
这样做,你还没有显示代码)
窗口是不可见的,因此您可以进行各种初始化,而无需用户查看正在进行的操作
作为替代方案,您可以创建已经可见的窗口,但通常最好保持单一约定
int main
,不需要使用微软的怪物
使用GNU工具链,只需使用Microsoft的工具,如果您使用GUI子系统,则必须通过链接器选项/entry:mainCRTStartup
告诉链接器接受标准代码。
另外,对非阻塞PeekMessage
的调用意味着你的消息循环很可能是CPU占用
而是使用阻止GetMessage
并记得在GetMessage
返回0时退出循环(表示已发布WM_QUIT
条消息)