捕获的HWND的位图上的黑线

时间:2014-03-27 21:08:09

标签: winapi opengl bitmap hwnd

我正在开发一个基本上捕获应用程序并在openGL中绘制它的应用程序。

我首先获得有效的HWND,并希望检索与其相关的所有其他窗口。我通过使用主HWND pid获取所有这些。我把所有这些都放在一个列表中(标准的std :: list)

HWND tmpWindowHandle = GetTopWindow(NULL);
while(tmpWindowHandle!=NULL){
    DWORD pid;
    DWORD currentWindowPid;
    GetWindowThreadProcessId(tmpWindowHandle,&pid);
    GetWindowThreadProcessId(this->hwnd,&currentWindowPid);
    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时,我得到的是。

Paint drawn in openGL

不幸的是,当涉及到绘画&#34;姐妹&#34; (不使用“孩子”这个词,因为它意味着winapi术语中的其他内容),我的孩子们会遇到奇怪的黑色交叉:

enter image description here

您是否知道可能导致此类行为的原因是什么?我的感觉是,有些窗户也具有相同的PID,黑色并与其他窗口叠加,可见&#34;视窗。 我的绘图函数测试窗口是否可见(if(IsWindowVisible(currentWindow->hwnd)){)所以我不知道为什么它们是可见的,因为它们没有出现在常规的mspaint.exe上

0 个答案:

没有答案