昨日は書き忘れましたが、GDI+を使うプログラムにはGDIPLUS.DLLが必要です。ただしVBランタイムなどと違い、単にEXEと同じフォルダ(またはパスの通っている場所)に置いておけば良いです。EXEファイルと一緒に配布することも可能なはずです。

GDIPLUS.DLLはこちらからダウンロードすることができます。Platform SDK Redistributable: GDI+

さて今日からは実際にGDI+を使うとどんな感じになるのかを書いてみようと思います。まだ出来上がっていないのでコンパイル・実行することはできませんし、私も試していません。雰囲気を感じ取っていただければと思います。

今回はWin32プログラミング講座 ~ Step9. ビットマップビューワを作る ~よりPaintイベントの部分をGDI+で書き直しました。rc_Window/rc_Clientの部分はAdjustWindowRectなどを使った方がより簡単になると思いますが、比較のためそのままにしてあります。

Sub MainWnd_Paint(hdc As HDC)
    Dim graphics As Graphics(hdc)

    If FileName = "" Then Exit Sub

    'ビットマップをロード
    Dim image As Image(FileName)

    Dim rc_Window As RECT, rc_Client As RECT
    GetWindowRect(hMainWnd, rc_Window)
    GetClientRect(hMainWnd, rc_Client)
    dx = (rc_Window.right - rc_Window.left) - (rc_Client.right - rc_Client.left)
    dy = (rc_Window.bottom - rc_Window.top) - (rc_Client.bottom - rc_Client.top)

    'ウィンドウサイズをビットマップのサイズにあわせる
    MoveWindow(hMainWnd, rc_Window.left, rc_Window.top, image.Width + dx, image.Height + dy, TRUE)

    'ビットマップを描画
    graphics.DrawImage(image, 0, 0)
End Sub

デバイスコンテキストに代ってGDI+ではGraphics型のオブジェクトに描いていくことになります。DrawImage以外にも線を書いたり文字を書いたりするためのメソッドがあるわけです。また、HDCだけでなくビットマップに描画するなどといったこともできるはずです。

Imageクラスは、画像を扱うクラスですが、Windowsビットマップ以外にもPNG/JPEG/GIFなど主要な画像形式に対応しています。勿論読み込むだけでなく書き込むこともできます。仮に描画の遅さが使い物にならないとしても、(描画とは関係のない)形式の変換にだけGDI+を使うといったことも考えられます。


次回はWin32プログラミング講座 ~ Step32. アナログ時計を作る ~のGDI+版を予定しています。RPGのマップ移動機能は、私が実際にコンパイルして実行してみたいので、GDI+の移植が終わった後に行いたいと思っております。

スポンサード リンク

この記事のカテゴリ

  • ⇒ GDI+ (2) 画像を読み込んで表示する