我正在开发一个基本上捕获应用程序并在openGL中绘制它的应用程序。
我首先获得有效的HWND,并希望检索与其相关的所有其他窗口。我通过使用主HWND pid获取所有这些。我把所有这些都放在一个列表中(标准的std :: list)
HWND tmpWindowHandle = GetTopWindow(NULL);
while(tmpWindowHandle!=NULL){
DWORD pid;
DWORD currentWindowPid;
GetWindowThreadProcessId(tmpWindowHandle,&pid);
GetWindowThreadProcessId(this->hwnd,¤tWindowPid);
if(pid==currentWindowPid && tmpWindowHandle != this->hwnd){
MyWindow* child = new MyWindow("child",tmpWindowHandle,NULL);
//child->findAllChilds(); <= Recursivity for later
childList.push_front(child);
}
tmpWindowHandle = GetNextWindow(tmpWindowHandle,GW_HWNDNEXT);
}
在此之后,我在childList中获取所有与主HWND具有相同PID的窗口(按z-oder排序)
我的应用程序的第二步是获取指定HWND的位图并在表面上绘制它。我根据zorder绘制它们。
drawWindow(HWND hwnd,float zorder)是一个函数,它获取hwnd句柄的BITMAP,并在zorder处绘制它。
drawWindow(parent, -15);
for(int i = 0; i < currentWindow->childList.size()%10;i++){
MyWindow* child = currentWindow->childList.back();
currentWindow->childList.pop_back();
float deltaZOrder = (float)(currentWindow->childList.size()-i)/currentWindow->childList.size();
drawWindow(child,zOrder+deltaZOrder);
currentWindow->childList.push_front(child);
}
更实际的是,当我将主HWND设置为绘画窗口的HWND时,我得到的是。
不幸的是,当涉及到绘画&#34;姐妹&#34; (不使用“孩子”这个词,因为它意味着winapi术语中的其他内容),我的孩子们会遇到奇怪的黑色交叉:
您是否知道可能导致此类行为的原因是什么?我的感觉是,有些窗户也具有相同的PID,黑色并与其他窗口叠加,可见&#34;视窗。
我的绘图函数测试窗口是否可见(if(IsWindowVisible(currentWindow->hwnd)){
)所以我不知道为什么它们是可见的,因为它们没有出现在常规的mspaint.exe上