Articles of hwnd

创build响应式Windows winapi c ++

我正在学习使用winapi创build一个GUI,但是我遇到了一个问题。 我可以创build一个这样的窗口 #include "stdafx.h" #include <windows.h> int main() { HWND hwnd = CreateWindow(L"STATIC",NULL,WS_VISIBLE|WS_SYSMENU|WS_CAPTION,0,0,600,600,NULL,NULL,NULL,NULL); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } _gettch(); } 但是当closuresbutton被点击时,窗口不会closures,窗口也不能被拖动或移动。 我想知道如何启用窗口的这些function。

在Qt中释放和恢复embedded式窗口

在我的Qt应用程序中,我需要embedded一个本地窗口。 我首先获取它的WinId。 之后,我以下列方式创buildembedded式小部件: QWindow * window = new QWindow::fromWinId(winid); QWidget * widget = createWindowContainer(window); QVBoxLayout vl; ui->frame->setLayout(&vl); vl.addwidget(widget); widget->show(); 它的工作原理是完美的。 但是,当我想closures我的Qt应用程序并释放并将embedded式窗口恢复到原始状态时,我遇到了问题。 我目前正在执行以下步骤释放窗口: QWindow * releasedWindow = new QWindow(); window->setParent(newWin); newWin->show(); 它以某种方式工作,但不像我想要的那样。 如果我这样做,释放的窗口保留embedded时的分辨率和几何结构,这与它们本身的不同。 它也不响应调整窗口的大小。 发布的窗口也失去了它的菜单栏。 我希望它能够恢复到embedded之前的原始状态。 有没有办法做到这一点? 我在Windows 7上使用Qt 5.5。

我可以在COM方法中传递HWND吗?

是否有可能通过HWND的COM方法? 在我的对象中使用以下方法CoCreateInstance返回DISP_E_BADVARTYPE ( 0x80020008 ): STDMETHODIMP ShowDialog(HWND hWndParent); 到目前为止,通过传递一个OLE_HANDLE转换这个问题,但是感觉就像是一个混乱: STDMETHODIMP ShowDialog(OLE_HANDLE hWndParent);

如果窗口仍然存在与HWND我怎么能确定

可能重复: 使用Win32 APIvalidationHWND 如果HWND的窗口仍然存在,我该如何判断? 我有一个窗口HWND。 窗口存在于另一个进程中。 我想知道窗口是否仍然“活着”。 做这个的最好方式是什么?

这是正确的方式分配一个类的私人HWND到另一个类?

我有一个游戏类,在某些时候将有其私人HWND成员m_hWnd获得价值: m_hWnd=CreateWindowEx(NULL, "Window Class", "Game", // Replace with gameName WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, this); 稍后,将创build一个D2DResources对象,其中必须传递游戏的m_hWnd。 void Game::CreateRessources(HINSTANCE hInst) { CreateWindowClass(hInst); //m_hWnd gains its value it this function pMessageLog=CreateMessageLog(); pD2DResources=CreateD2DResources(m_hWnd); pD2DResources->Initialize(m_hWnd); pWinsock=CreateWinsock(); } 马上进入pD2DResources-> Initialize(m_hWnd)RenderTarget被创build: HRESULT D2DResources::Initialize(HWND hwnd) { HRESULT hr; hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory); // Create factory RECT rc; GetClientRect(hwnd,&rc); if(SUCCEEDED(hr)) […]

FindWindow收到的句柄是否需要释放?

我正在写的应用程序使用虚拟键盘。 为了显示,隐藏,resize或移动虚拟键盘,首先需要通过调用FindWindow函数来获取句柄,然后通过PostMessage发送一些消息。 由于我没有winapi的经验,我的问题是我需要以某种方式释放这个句柄,或者我完成后可以忘记它吗? 虚拟键盘是一个比我的应用程序更长的生命周期的过程。

SetParent导致我的WPF窗口变得不可见

我正在写一个WPF程序,这将使一个Window出现在另一个进程的特定Win32窗口的顶部。 到目前为止这一般起作用: 获取我想覆盖的窗口的hWnd (目标)。 实例化我的覆盖窗口( class Overlay : Window )并显示它( overlay.Show() )。 调用SetWinEventHook作为LocationChange和Destroy事件的目标。 在SetWinEventHook for LocationChange的callbackSetWinEventHook ,我重新定位我的Overlay实例以匹配目标窗口的矩形。 问题是我的Overlay实例出现在z轴的目标窗口后面。 我可以通过设置Topmost = true解决这个问题,但是我的窗口位于所有窗口之上,而不仅仅是目标。 我试图调用SetParent( new WindowInteropHelper( overlay ).Handle, targetWindowHandle )但是当这种情况发生我覆盖窗口消失。 调用overlay.Show()不起作用。 我也试过用SetWindowLongPtr (虽然MSDN说不要用GWL_HWNDPARENT调用这个)无济于事。 为什么SetParent使我的窗口不可见,以及为了确保我的窗口保持在另一个特定窗口之上,最好的方法是什么(如果不是这样的话)?

确定窗口是否属于桌面或Windowsapp store应用程序

屏幕上有传统的桌面应用程序和Windowsapp store应用程序。 我有他们的HWNDs。 我可以根据他们的HWND来确定他们是什么types的窗口(桌面或商店应用程序)?

处理键盘inputwinapi

突然不得不完成旧的项目,并遇到了键盘input处理的问题。 我有一个窗口项目列表。 我想通过按下键盘上名称的前几个字母来select一个项目,因为它在Windows中工作。 在互联网上search,不幸的是,没有给出结果。 我有处理消息和事件的代码。 BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_BN_CLICKED(IDHELP, OnHelp) ON_WM_SIZE() END_MESSAGE_MAP() BEGIN_EVENTSINK_MAP(CMyDialog, CDialog) ON_EVENT(CMyDialog, SOME_ID, SOME_DISP_ID, SomeFunction, SOME_PARAMS) END_EVENTSINK_MAP() 我想知道是否有可能添加这样的function。 我将不胜感激任何帮助。

父节点的HWND无效

是否有可能与有效的父母有一个有效的HWND,然后父母变得无效,没有孩子变得无效?