首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateWindow冻结

CreateWindow冻结
EN

Stack Overflow用户
提问于 2014-09-15 21:14:57
回答 2查看 1.5K关注 0票数 0

我为我正在编写的GUI系统编写了一个主窗口类。在主窗口的构造函数中,它使用CreateWindow()函数创建一个windows窗口。该窗口显示良好,如预期,但我不能抓住标题栏和移动它周围的屏幕。完全被冻住了。下面是构造函数中的代码。

代码语言:javascript
复制
//Set up window class
WNDCLASS wnd;
wnd.cbClsExtra = 0; 
wnd.cbWndExtra = 0;
wnd.hCursor = LoadCursor(0, IDC_ARROW);
wnd.hIcon = LoadIcon(0, IDI_WINLOGO);
wnd.lpszMenuName = 0;
wnd.style = 0;
wnd.hbrBackground = 0;
wnd.lpfnWndProc = WndProc;
wnd.hInstance = GetModuleHandle(NULL);
wnd.lpszClassName = L"GtMainWindow";

//Register window class
RegisterClass(&wnd);


this->m_winID = CreateWindow(
L"GtMainWindow",      /* Classname */
L"Windows App",       /* Title Text */
WS_OVERLAPPEDWINDOW,  /* default window */
CW_USEDEFAULT,        /* Windows decides the position */
CW_USEDEFAULT,        /* where the window ends up on the screen */
500,                  /* The programs width */
500,                  /* and height in pixels */
HWND_DESKTOP,         /* The window is a child-window to desktop */
NULL,                 /* No menu */
GetModuleHandle(NULL), /* Program Instance handler */
NULL                  /* No Window Creation data */
);
ShowWindow(m_winID,SW_SHOW);

下面是WinProc回调函数

代码语言:javascript
复制
//WndProc function
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_PAINT:
    {
        //GtWidget::PostPaint();
        return 0;
    }
case WM_CLOSE:
case WM_DESTROY:
    {
        PostQuitMessage(0);
        GtApplication* ptrApp = GtApplication::GetAppInstancePtr();
        ptrApp->Quit();
        return 0;
    }
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

现在,我有了一个单独的EventManager,它包含驻留在GtApplication中的所有PeekMessage处理。问题再次是为什么窗口冻结和没有响应任何标题栏操作。我不能移动它,最小化它,最大化它或者关闭它。任何帮助都将不胜感激。提前谢谢你。真诚的安东尼·丹尼尔斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-18 16:53:31

问题是事件处理循环位于与窗口不同的线程上。显然这是禁止的。一旦事件处理循环被移动到主线程,一切都可以正常工作。

票数 1
EN

Stack Overflow用户

发布于 2014-09-16 00:12:41

如果您没有在WM_PAINT处理程序中调用BeginPaint/ loop,那么就会得到一个由无限多WM_PAINT消息引起的无限循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25857011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档