Qt自定义QWidget调用winId()问题

weixin_38068392 2019-09-19 05:10:23
自己创建了一个继承于QWidget的MyWidget类,在MyWidget的构造函数中给hWnd中赋值如下hWnd = (HWND)this->winId();在使用DirectDraw在上面绘图时,出现如下错误:window.open('http://www.qtcn.org/bbs/attachment/Mon_1201/17_126280_388b4f47c27b75f.jpg?36');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >单步调试时,hWnd的值为: 而如果在MyWidget中创建一个showWidget,再调用showWidget->winId()showWidget = new QWidget(this);hWnd = (HWND)showWidget->winId();单步调试时,hWnd的值为:而这时候,通过DirectDraw在hWnd上绘图是正常的。 进一步跟踪调试:在m_pWnd->GetClientRect(&rc);这句出了问题再看GetClientRect函数的定义_AFXWIN_INLINE void CWnd::GetClientRect(LPRECT lpRect) const      { ASSERT(::IsWindow(m_hWnd)); ::GetClientRect(m_hWnd, lpRect); }显然是IsWindow(m_hWnd)函数出了问题。那I是IsWindow(m_hWnd)什么时候会失败呢?msdn上说http://msdn.microsoft.com/en-us/library/windows/desktop/ms633528(v=vs.85).aspxIf the window handle does not identify an existing window, the return value is zero.进一步测试:在winId()后,立马调用IsWindow(hWnd),以确定当前widget是否有效hWnd = this->winId();int res;res = IsWindow(hWnd);而这个时候res的值为1,也就是说刚调用winId()后,hWnd的值是有效的。为什么在之后调用m_pWnd->GetClientRect(&rc);就不行了呢?不知道有没有哪位大虾也遇到了类似的问题?是不是继承的QWidget需要做些额外的设置?
...全文
834 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧