2012-03-07 6 views
0

実際の表示面ではなく、ビットマップ(仮想表示面として機能する)に描画されるHWNDを作成する方法はありますか?表示面ではなくビットマップに描画されるようなものはありますか?

子ウィンドウ(おそらくコントロールを含む)の作成やGetDCEx経由でのDC取得など、DCで行うことができないウィンドウでできることがあるので、このようなことは役に立ちそうです。

+1

あなたが望むものを完全にクリアしていない、背景イメージのウィンドウですか? – vulkanino

+0

ディスプレイに裏打ちされたウィンドウの問題は、最小化されておらず、完全に目に見えるものでなければならないということです。私は、これらの問題を回避し、非表示の目的で使用できるコントロールの画像を使用してビットマップを生成する方法を探しています。たとえば、コントロールを画面に配置し、コントロールが画面外になるようにコントロールを再配置し、コントロールイメージをキャプチャしようとします。 –

+0

どういうことですか?たとえば、コントロールを画面に置いて、コントロールが画面外になるようにウィンドウの位置を変更し、コントロールのイメージをキャプチャしようとします。 –

答えて

-1

WM_PAINTを処理してそこに画像を描画する必要があります。

LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    HDC hDC, memDc; 
    PAINTSTRUCT Ps; 
    HBITMAP bmpBackground; 
    BITMAP bm; 

    switch (message)     
    { 
     case WM_DESTROY: 
      PostQuitMessage (0);  /* send a WM_QUIT to the message queue */ 
      break; 

     case WM_PAINT: 
      hDC = BeginPaint(hwnd, &Ps); 

      // Load the bitmap from the resource 
      bmpBackground = LoadBitmap(hInst, "your_background_image"); 
      // Create a memory device compatible with the above DC variable 
      memDc = CreateCompatibleDC(hDC); 
      // Select the new bitmap 
      SelectObject(memDc, bmpBackground); 

      GetObject(bmpBackground, sizeof(bm), &bm); 
      // Copy the bits from the memory DC into the current dc 
      BitBlt(hDC, 10, 10,bm.bmWidth, bm.bmHeight, memDc, 0, 0, SRCCOPY); 

      // Restore the old bitmap 
      DeleteDC(memDc); 
      DeleteObject(bmpBackground); 
      EndPaint(hwnd, &Ps); 
      break; 

     default:      
      return DefWindowProc (hwnd, message, wParam, lParam); 
    } 

    return 0; 
} 
+0

質問は、ビットマップに裏打ちされたウィンドウに描画することです、ウィンドウにビットマップを描画しません。 – aggieNick02

0

私の質問に簡単な答えはないようです!