草庐IT

c++ - 删除 HWND 对象

我有一种情况,当我收到一条消息时,我必须从hWnd中删除一个窗口。我虽然这一定是可能的,因为CreateWindowEx通过返回HWND创建了一个对象,但我必须能够删除一个对象。注意:hWnd位于其他进程中。 最佳答案 正确的方式是发送WM_CLOSE向相关窗口发送消息或直接调用DestroyWindow这将发送WM_DESTROY消息到窗口。线程不能使用DestroyWindow来销毁由不同线程创建的窗口。WM_CLOSE和WM_DESTROY的区别:发送WM_CLOSE后,目标应用程序可以在销毁窗口之前提示用户确认,方法是处理W

C++ 在运行时更改 HWND 窗口过程

我在一个创建hwnd及其相应的WndProcLRESULTCALLBACK的IDE中工作。我需要将WndProc更改为自定义的。我读过SetWindowLong可以完成这项工作,但我找不到任何工作示例。例如:HWNDhwnd;//我的窗口SetWindowLong(hwnd,GWL_WNDPROC,myNewWndProc);SetWindowLong的第三个参数是一个Long,正如函数的名称一样。如何从我的WndProc函数引用一个Long?我的WndProc:LRESULTCALLBACKWndProcedure(HWNDhwnd,UINTuMsg,WPARAMwParam,LPA

c++ - 从 hWnd 获取(资源)ID

在ResourceHacker中,当您打开一个可执行文件(windows)时,您可以看到与对话框关联的标识符。有谁知道他们来自哪里?我的意思是,如何在我的C++程序中执行相同的操作以从HWND获取ID?顺便说一句,GetWindowLong(hwnd,GWL_ID)返回0。谢谢 最佳答案 GetWindowLong(hwnd,GWL_ID)返回对话框中控件的标识符,但它不能用于对话框本身,因为对话框根本没有标识符。与对话框关联的标识符实际上用于引用资源blob本身,而不是窗口。它们用于创建对话框(参见CreateDialog()。一

c++ - 如何在给定 ActiveX 控件的 HWND 的情况下获得 COM 接口(interface)?

我正在尝试编写一些C(C++也很好)实用程序来监视ActiveX控件。给定一个窗口的一些HWND句柄我想打印该HWND的ActiveX控件公开了哪些属性和哪些方法可选地,控件实现了哪些接口(interface)出于测试目的,我将随机ActiveX控件(如MicrosoftSlider控件)嵌入到ActiveXControlTestContainer中。这样我就知道控件的HWND确实是一个ActiveX控件的窗口。此外,我知道控件公开了哪些属性/方法,因此我可以测试我的工具。我目前对(1)的解决方案是使用AccessibleObjectFromWindowHWND上的函数以获取IDisp

c++ - 枚举 HWND 属性 C++

我正在尝试从HWND获取属性。我使用了来自UsingWindowProperties的信息,但下面的示例对我不起作用。我在编译代码时遇到错误。argumentoftype"BOOL(__stdcall*)(HWNDhwndSubclass,LPCSTRlpszString,HANDLEhData)"isincompatiblewithparameteroftype"PROPENUMPROCEXW"这是我的回调函数BOOLCALLBACKPropEnumProcEx(HWNDhwndSubclass,LPCSTRlpszString,HANDLEhData){returnTRUE;}这就

c++ - 创建 HWND 的最简单方法

我需要一个MSVC++中的虚拟窗口,它永远不可见,甚至在应用程序的主窗口之前创建。渲染引擎需要它。因此,如果可能的话,我宁愿不必注册类(class)。为了测试,最好让它可见以证明它在那里-我可以使用静态或按钮或其他东西吗?我一直在尝试使用CreateWindow(),但是当我获得返回值时,没有任何可见的东西出现。 最佳答案 我提交自己的测试代码以供批评:HWNDdummyHWND=::CreateWindowA("STATIC","dummy",WS_VISIBLE,0,0,100,100,NULL,NULL,NULL,NULL);

从hwnd永久cwnd

我们遇到了临时手柄的问题。正如我在这里阅读的那样:从cwnd::fromhandle获得的CWND的寿命是什么?CWnd::FromHandle()将创建一个临时手柄。我们的计划是存储手柄以备后用,但这不起作用。我们也尝试了CWnd::FromHandlePermanent()但这在某种程度上返回了无效的指针。并且mpWnd->Attach(mhWnd);丢下了违规例外。如果可能的话,我们想存储CWnd而不是HWnd并打电话FromHandle()每次CWnd是必须的。有人知道解决方案吗?看答案你只得到一个永久的CWnd如果您是对象子类现有窗口,或者您创建一个CWnd与其中之一CWnd::Cr

c++ - 通过进程ID获取hwnd C++

如果我知道进程ID,我如何获取应用程序的HWND?任何人都可以张贴sample吗?我正在使用MSVC++2010。我找到了Process::MainWindowHandle,但我不知道如何使用它。 最佳答案 HWNDg_HWND=NULL;BOOLCALLBACKEnumWindowsProcMy(HWNDhwnd,LPARAMlParam){DWORDlpdwProcessId;GetWindowThreadProcessId(hwnd,&lpdwProcessId);if(lpdwProcessId==lParam){g_HWN

c++ - 来自 CreateWindow/CreateDialog 的 HWND 是否可以从另一个线程获取消息?

使用Win32API,是否可以在一个线程中创建一个窗口或对话框,然后从另一个线程为它收集事件?HWND是否绑定(bind)到线程?尝试下面这个人为的例子,我从来没有看到GetMessage()触发。HWNDg_hWnd;DWORDWINAPImyThreadProc(LPVOIDlpParam){while(GetMessage(&msg,hWnd,0,0)>0){...}}intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd){hWnd=CreateDialog(hI

c++ - 不打开窗口的 OpenGL 上下文 - 当使用由 GetDesktopWindow 制作的 HWND 时,wglMakeCurrent 因 HDC 和 HGLRC 而失败

这有点重复thisquestion.我正在尝试制作一个无窗口控制台应用程序来检查支持的OpenGL版本。为此,我需要设置渲染上下文——但不创建窗口。我正在尝试使用我不会写入的桌面句柄。我忘记在前面的示例中设置像素格式-这可能是创建渲染上下文失败的原因-但是即使设置了像素格式,我也无法激活它。wglMakeCurrent(hDC,hRC)只返回0。这是完整的源代码转储:#include#include#includeHDChDC=NULL;HGLRChRC=NULL;HWNDhWnd=NULL;HINSTANCEhInstance;intres=0;intpf=0;PIXELFORMAT