0

私はアプリ画面にhtmlをレンダリングするC++ブラウザアプリに取り組んでいます。アプリ画面のコンテンツ全体を印刷したい(インターネットエクスプローラーのように)。アプリウィンドウにハンドルを渡すだけで、print / pdfを実行する、適切で最も簡単な方法は何ですか。

私はこの質問をグーグルで検索しましたが、手動の描画しか見つかりませんでした。現在のウィンドウのハンドラーを渡し、テキストと画像の印刷を処理するlib/techniqueはありますか。

4

1 に答える 1

0

PrintWindowWindowsは、ウィンドウの画像を取得するための機能を提供します。これが私のソースからの例です。結果のスクリーンショットをクリップボードに配置します(一部のWindowsバージョンではこの機能がサポートされていない可能性があることを考慮に入れていますが、質問には重要ではないようです)。

void PrintCapturedWindow(HWND hwnd)
{
  HDC hdc = GetDC(hwnd);
  if (hdc)
  {
    HDC hdcMem = CreateCompatibleDC(hdc);
    if (hdcMem)
    {
      RECT rc;
      GetClientRect(hwnd, &rc);

      HBITMAP hbitmap = CreateCompatibleBitmap(hdc, rc.right-rc.left, rc.bottom-rc.top);
      ReleaseDC(hwnd, hdc); hdc = 0;
      if (hbitmap)
      {
          typedef BOOL WINAPI (* pPrintWindow)(HWND hwnd, HDC hdcBlt, UINT nFlags);
          pPrintWindow ppw;

          HMODULE user_hand = GetModuleHandle("user32.dll");
          ppw = (pPrintWindow)GetProcAddress(user_hand, "PrintWindow");
          if(ppw)
          {
            SelectObject(hdcMem, hbitmap);
            (*ppw)(hwnd, hdcMem, 0);
          }

          ::OpenClipboard(NULL);
          ::EmptyClipboard();
          ::SetClipboardData(CF_BITMAP, hbitmap);
          ::CloseClipboard();

          DeleteObject(hbitmap);
      }
      DeleteObject(hdcMem);
    }
    if(hdc != 0) ReleaseDC(hwnd, hdc);
  }
}
于 2012-11-07T21:12:13.660 に答える