草庐IT

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

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

windows - 如何使用 SetWindowLong 和 GetWindowLong 简化修改窗口样式的代码?

我正在为WindowsAPI编写一些包装函数和类。我开始遇到的一个常见事件是修改Windows样式。以下是一些示例代码,我根据参数ALIGNMENT枚举调整文本框的文本对齐方式。经过多次测试,我似乎必须删除2种替代对齐方式,否则会发生冲突。然后SetWindowPos(..SWP_FRAMECHANGED)也不起作用,所以我将其替换为InvalidateRect()和UpdateWindow()以强制在样式更新后重新绘制TextBox。如果有更简单的方法,我希望得到一些反馈。我觉得我忽略了一些东西。谢谢!:)enumALIGNMENT{Left,Right,Center};voidTe

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 - 在窗口中的某些区域绘制矩形导致屏幕闪烁

在我的绘画功能中,我通过在屏幕上绘制黑色矩形来清除屏幕,然后绘制一组水平线和垂直线来显示一些图形。在我的应用程序中,x轴很长。所以我使用水平滚动来允许用户查看x轴上的数据。以下是如上所述绘制背景和线条的部分程序。caseWM_PAINT:HRGNhrgnUpdate=CreateRectRgn(0,0,0,0);PAINTSTRUCTps;if(GetUpdateRgn(m_hWnd,hrgnUpdate,FALSE)!=NULLREGION){if(BeginPaint(m_hWnd,&ps)){HBRUSHhBr;hBr=CreateSolidBrush(RGB(0,0,0));R

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

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

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