草庐IT

c++ - 来自 HWND 引用的关闭回调或 WM_CLOSE

我正在调用HtmlHelpAwinapi方法来显示我的应用程序的.chm。此方法立即返回一个HWND,并且帮助窗口显示为一个单独的窗口。除了窗口,我还为这个hwnd设置了一个计时器。我的问题是我需要知道此窗口何时关闭以终止计时器。我的第一个方法是尝试注册WndProc回调,但我不能这样做,因为我没有创建窗口,我只有对hwnd的引用。然后我尝试使用Hook(SetWindowsHookEx),但HOOKPROC不会将HWND作为参数传递给回调。此外,我需要知道这个hwnd的线程。有什么方法可以在HWND关闭或让WndProc等待WM_CLOSE消息时注册回调?

c++ - 如何在 MFC 中获取嵌入式 Web 浏览器控件的 HWND

我正在使用嵌入式webbrowsercontrol在基于对话框的MFC窗口中,我需要知道其中的Web浏览器控件的HWND。我能够找到以下声称可以检索它的代码:HWNDhWndWebBrowser=NULL;LPUNKNOWNunknown=m_browser.GetControlUnknown();IWebBrowser2*pWB=NULL;if(SUCCEEDED(unknown->QueryInterface(IID_IWebBrowser2,(void**)&pWB))){CComPtrpServiceProvider;if(SUCCEEDED(pWB->QueryInterfa

windows - 假设 GetDC(hWnd) 作为 WM_CREATE 上的第一条指令被调用,对于窗口 hWnd,GetDC() 是否有可能返回 NULL?

假设GetDC(hWnd)作为WM_CREATE上的第一条指令被调用,对于窗口hWnd,GetDC()是否可能返回NULL?我担心GetDC()可能因资源不足而失败。当发生这种情况时,我应该检查错误吗?调用失败怎么办?Win32API函数会引发异常还是我应该引发异常? 最佳答案 GetDC()确实会失败,无论您何时何地调用它。在处理API时,您应该采取相当悲观的观点,并为任何API函数失败做好准备。正如您所建议的,失败的一个可能原因是系统资源耗尽,例如内核句柄、GDI对象等。所以你应该经常检查错误。不仅是GetDC(),对API函数

c++ - 如何以原子方式更新 HWND 的样式和位置?

我正在编写一个Win7桌面应用程序,并希望让它从窗口化无缝过渡到窗口化全屏(反之亦然),并且主要是通过调用SetWindowLongPtr来实现的。立即更新其样式,然后是MoveWindow更新它的大小和位置。问题是窗口闪烁一帧以显示其样式已更新,但未显示新的大小和位置。下一帧一切看起来都正确,但我正在努力避免这种单帧伪影。我试过颠倒调用API的顺序,但它只是改变了工件的外观。我也试过隐藏窗口,调用API,然后显示窗口,但这只会导致窗口消失一帧。我知道一种选择是创建一个具有所需属性的新窗口,然后销毁旧窗口,但我想找到一种更便宜的替代方法。那么有什么方法可以调用这些API,并让它们在视觉

c++ - 在 CreateWindow 上设置 HWND 似乎失败

我来自C#,对此非常陌生,所以请多多包涵。我有一个MainWindow类,它有一些私有(private)的HWND变量。一个用于窗口本身,一个用于每个控件。我假设我需要跟踪它们,或者它会让以后的事情变得更容易?无论如何,我有:classGUIMain{private:HINSTANCEhInstance;HWNDhWnd;//ThewindowsitselfHWNDcmdGenerate,cmdQuit;//2buttons我有一个名为initialise(HWNDhWnd)的私有(private)方法,它在WM_CREATE上调用并将所有控件添加到窗口:voidMainWindow:

c++ - 是否有任何应用程序具有 HWND?

我正在学习C++。我想知道是不是任何C++应用程序都有HWND。下面的示例应用程序,没有创建窗口。如果有,我怎样才能得到它的HWND?非常感谢!#includeintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRszCmdLine,intiCmdShow){MSGmsg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}} 最佳答案 “我正在学习C++

c++ - 如果 HWND 错误,则 MessageBox 返回 0

有没有MessageBox除了内存不够还可以返回0的情况?我有一个案例,我怀疑我传递给MessageBox的HWND无效或者它可能属于一个正在被销毁的窗口。在我的例子中,MessageBox没有显示并返回0,但我似乎有足够的可用内存。 最佳答案 IsthereacasewhereMessageBoxcanreturn0otherthannotenoughmemory?来自MSDN文档:http://msdn.microsoft.com/en-us/library/ms645505%28VS.85%29.aspxIfthefuncti

c++ - 查找单实例 Qt 应用程序的 QWidget

这个问题在这里已经有了答案:Qt:Bestpracticeforasingleinstanceappprotection(7个答案)关闭8年前。我正在尝试创建单个实例Qt应用程序,我正处于这个工作状态,但现在我想在第二个启动时关注已经启动的实例。QWidget::find(g_hWnd)应该返回小部件,但它失败并在w->show();上崩溃有什么想法吗?#pragmadata_seg("Shared")HWNDg_hWnd=NULL;#pragmadata_seg()#pragmacomment(linker,"/section:Shared,rws")intmain(intargc,

windows - 你如何比较两个 HWND 指针?

可以吗if(HWND1==HWND2)或者是否有我需要使用的函数来查看两个hwnd是否指向同一个窗口? 最佳答案 HWND只是一个长值,所以是的,您可以那样比较它们。 关于windows-你如何比较两个HWND指针?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2112833/

windows - 发送到 HWND_BROADCAST 的消息会转到其他桌面吗?

我正在尝试确定HWND_BROADCAST工作原理的一些细节。不幸的是,MSDN没有这个值的特定页面;仅在传递其他几篇文章时提到它,例如SendMessage的文章和PostMessage.我特别想知道发送到HWND_BROADCAST的消息是否被与同一窗口站中的其他桌面关联的窗口接收。文档说该消息将发送到“系统中的所有顶级窗口”,但显然这不能完全正确。例如,我确定他们不会在其他登录session(例如在终端服务器上)中转到窗口。我的猜测是,它们至少被限制在调用进程的窗口站,但我不知道它们是否也被限制在调用线程的桌面(每个线程与一个桌面相关联)。最坏的情况我可以编写一些代码来根据经验对