1

いくつかのソフトウェア ウィンドウをキャプチャして、ソフトウェアに出力しようとしています。目標は、2 つの異なるソフトウェアが重なっていても、並べて表示できるようにすることです。

void MyWindowFinder::drawTo(HWND hWnd){
    MyWindow* currentWindow = anchorWindow;

    HDC hdcRendering;
    HDC hdcMemRendering;
    PAINTSTRUCT ps;

    hdcRendering = BeginPaint(hWnd, &ps);
    hdcMemRendering = CreateCompatibleDC(hdcRendering);

    int widthToRender = 0;
    for(int i = 0; i < this->anchorWindow->winID ; i++){
        HDC hdcCapture;
        HDC hdcMemCapture;
        HBITMAP hBitmap;
        HGDIOBJ oldCaptureBitmap;
        HGDIOBJ oldRenderingBitmap;

        RECT clientRect;
        GetClientRect(currentWindow->hwnd,&clientRect);
        int width = clientRect.right-clientRect.left;
        int height = clientRect.bottom-clientRect.top ;

        if (!(hdcCapture = GetDC (currentWindow->hwnd))){
            return;
        }

        hdcMemCapture = CreateCompatibleDC(hdcCapture);
        hBitmap = CreateCompatibleBitmap(hdcCapture,clientRect.right-clientRect.left,clientRect.bottom-clientRect.top);

        oldCaptureBitmap = SelectObject(hdcMemCapture, hBitmap);
        BitBlt(hdcMemCapture, 0, 0, width, height, hdcCapture, 0,0, SRCCOPY|CAPTUREBLT);

        oldRenderingBitmap = SelectObject(hdcMemRendering, hBitmap);
        BitBlt(hdcRendering, widthToRender, 0, width, height, hdcMemCapture, 0, 0, SRCCOPY);
        widthToRender+= width;
        SelectObject(hdcMemRendering, oldRenderingBitmap);
        SelectObject(hdcMemCapture, oldCaptureBitmap);


        DeleteDC(hdcMemCapture);
        DeleteDC(hdcCapture);

        DeleteObject(hBitmap);
        currentWindow = currentWindow->previousWindow;
    }
    DeleteDC(hdcMemRendering);
    DeleteDC(hdcRendering);
    EndPaint(hWnd, &ps);
}

これはかなりうまく機能し、ソフトウェアで2つの重なり合うウィンドウを並べて印刷できます。

左右に重なったウィンドウ しかし、私はトリッキーな問題に直面しています。子供向けソフトウェアのいずれかの要素をクリックすると、ソフトウェアに描画されません。

理由と、この問題をどのように解決できるか分かりますか?

4

0 に答える 0