【发布时间】:2012-07-06 04:11:44
【问题描述】:
我正在尝试使用SetParent 函数将我的进程中的一个窗口嵌入到外部进程的窗口中,并且遇到了一些问题,希望有人能帮助我解决。首先,这是我目前将窗口嵌入应用程序的概述:
WND myWindow; //Handle to my application window
HWND externalWindow; //Handle to external application window
SetParent(myWindow,externalWindow);
//Remove WS_POPUP style and add WS_CHILD style
DWORD style = GetWindowLong(myWindow,GWL_STYLE);
style = style & ~(WS_POPUP);
style = style | WS_CHILD;
SetWindowLong(myWindow,GWL_STYLE,style);
此代码有效,我的窗口出现在其他应用程序中,但引入了以下问题:
- 当我的窗口获得输入焦点时,外部进程的主应用程序窗口失去焦点(即标题栏改变颜色)。
- 当我的窗口有焦点时,主应用程序的键盘快捷键命令不起作用。
有人知道这些问题的解决方法吗?我希望我的窗口被视为主应用程序的另一个子窗口。
谢谢。
【问题讨论】:
-
我不确定这是正确的方法。很可能在一段时间后修复一个缺陷后,您会发现另一个问题......
-
这并不容易。你有外部窗口的代码吗?尝试选择 MDI Child!让父级提供一个窗口作为子窗口的父窗口/框架会更容易。如果你有代码,有办法做到这一点。我相信你将不得不扩展资源链。你有机会让你的孩子处理一个 DLL 吗?
-
@Mark Hall:你是对的,它甚至看起来是一个精确的副本。
标签: c++ windows external window-management