• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[Active Basic]BitBltで画像を表示)

[Active Basic]BitBltで画像を表示

このQ&Aのポイント
  • ActiveBasicでプログラムを書いています。デバイスコンテキストが使えるようになってきて、ブロック崩しゲームを作っていますが、画像の表示がうまくいきません。
  • ActiveBasicのヘルプを参考にプログラムを書いたのですが、背景が描写されていません。コードを添削していただきたいです。
  • BitBltをMainWnd_Paintの中に記述すると画像が表示されますが、理由が分かりません。ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

まず hMemDC用のビットマップが必要です dim hMemBmp as HBITMAP といったグローバル変数を用意します MainWnd_Createの hMemDC = CreateCompatibleDC(hDC)'BitBlt用DC のあとぐらいで dim bmp as Bitmap GetObject( ImgBack, Len( bmp ), bmp ) hMemBmp = CreateCompatibleBitmap( hDC, bmp.bmWidth, bmp.bmHeight) SelectObject( hMemDC, hMemBmp ) といった具合にします 次に グローバル変数に dim myRC as RECT を定義します MainWndProcの TODO:の次の行に if wMsg = WM_PAINT then   ' 更新が必要な領域の取得   GetUpdateRect( hWnd, myRC, 1 ) end if を記述します MainWnd_Paintの中身は dim x as long, y as long dim w as long, h as long dim rc as RECT ' 更新領域の変数への格納 x = myRC.left y = myRC.top w = myRC.right - x h = myRC.bottom - y if w = 0 then   ' 幅が0の場合はクライアント領域の幅にする   GetClientRect( hMainWnd, rc )   w = rc.right - x end if if h = 0 then   ' 高さが0の場合はクライアント領域の高さにする   GetClientRect( hMainWnd, rc )   h = rc.bottom - y end if BitBlt( hDC, x, y, w, h, hMemDC, x, y, SRCCOPY ) といった具合にします 特定の範囲の再描画には hMemDCに対して描画をしておいて dim rc as RECT rc.left = 左上のX座標 rc.right = 右下のX座標 rc.top = 左上のY座標 rc.bottom = 右下のY座標 InvalidateRect( hMainWnd, rc, 1 ) または InvalidateRect( hMainWnd, rc, 0 ) といった具合にします クライアント領域全体を再描画するならば InvalidateRect( hMainWnd, ByVal 0 , 1 ) といった具合にします