2012-03-06 7 views
0

ビットマップのHDC = hdc、hdcの論理座標を持つ矩形R、CreateWindowでSBS_HORZで作成されたスクロールコントロールのHWND = hwndがあります。スクロールコントロールは別のウィンドウの子です。ビットマップの表示が不明確な表示

スクロールコントロール用のHDCを取得し、BitBltを使用してコントロールを四角形にコピーしました。スクロールコントロール全体が親に表示されている場合はすべて正常に動作しますが、スクロールバーが隠れている場合は、バーの上に何かが表示されます。コントロールが画面外にある場合、私は何も取得しません。

これは、スクロールバーを隠す方法が不思議に思っている場合に備えて、アプリの画面イメージを定期的に保存するためのすべての作業の一部です。私はスクロールバーの親を前面に持っていきたくありません。

これらの条件でスクロールバーの実際のイメージを取得できますか?

代わりに、何らかの理由で私がコピーできるコンテンツが誰にも表示されなかったスクロールバーを作成できますか?私は必要なすべてのパラメータを知っています。

答えて

0

コントロールが不明瞭であったり画面から外れていても、次のように動作するようです。コントロールからDCおよび互換ビットマップを作成します。コントロールをDC /ビットマップで印刷するよう要求するWM_PRINTメッセージをコントロールに送信します。次にBitBltを使用してビットマップをコピーします。

かなり醜い!より良い方法がありますか?

このような何か...

  HDC     hdcScroll; 
      WINDOWPLACEMENT  WP; 
      HDC     memdc; 
      HBITMAP    membit; 

      hdcScroll = GetDC (hwndScroll); 
      GetWindowPlacement (hwndScroll, &WP); 
      int Height = WP.rcNormalPosition.bottom - WP.rcNormalPosition.top; 
      int Width = WP.rcNormalPosition.right - WP.rcNormalPosition.left; 
      memdc = CreateCompatibleDC(hdcScroll);       // destination DC 
      membit = CreateCompatibleBitmap(hdcScroll, Width, Height);  // destination bitmap 
      HBITMAP hOldBitmap =(HBITMAP) SelectObject(memdc, membit); // add bitmap to DC 
      SendMessage (hwndScroll,WM_PRINT,(WPARAM) memdc, PRF_CLIENT); 

      BitBlt 
       (hdc,        // destination HDC 
       rt_scroll.left,     // dest upper left corner X 
       rt_scroll.top,      // dest upper left corner Y 
       rt_scroll.right-rt_scroll.left+1, // width of dest rectangle 
       rt_scroll.bottom-rt_scroll.top+1, // height of dest rectangle 

       memdc,        // source HDC 
       0,         // source upper left corner X 
       0,         // source upper left cornet Y 

       SRCCOPY 
       ); 

      SelectObject(memdc, hOldBitMap); 
      DeleteObject (membit); 
      DeleteDC (memdc); 
      ReleaseDC (hwndScroll, hdcScroll); 
関連する問題