2009-10-07 1 views
6

私はVisual Studio 2008を使用しています。リソースビューにPNGファイルを読み込み、IDB_BANG_PNGを割り当てました。Win32 APIでPNGをピクチャコントロールに設定する

ピクチャコントロールはIDC_STATIC15と呼ばれます。

ピクチャコントロールにPNGを読み込む際に問題が発生しました。

LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 

// Way of loading a bmp with a mask perhaps? Or a PNG file programatically? 

static HBRUSH hBrushStatic; 
HBITMAP hBmp = LoadBitmap(hDlg,MAKEINTRESOURCE(IDB_BANG_PNG)); 

switch(message) 
{ 
case WM_INITDIALOG:  
    CheckDlgButton(hDlg, IDC_CHECK, FALSE); 
    EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); 
    // Bitmap version is IDB_BANG, PNG is at IDB_BANG_PNG 
    // IDC_STATIC15 is the picture frame 
    HWND item = GetDlgItem(hDlg,IDC_STATIC15); 
    SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp); 
    return TRUE; 

// .... snip 

私は、Win32/GUI開発に関して、素早いプロジェクトを行い、彼女に立ち往生したとき、どんな助けにも感謝しています。

+0

ビットマップファイルが必要です。 PNG画像をBMP画像に変換したいとします。 – anno

+0

PNGをサポートすることができますが、プログラマチックに行う必要があります。画像を追加するとき、hte画像フィルタを使用すると、* .pngはリストされた項目の1つです。 –

+0

問題は、私は透明な背景を維持するのが好きなので、なぜPNGを使いたいのですか?ただし、BMPを使用してマスクを作成したり、ICOファイルに32x32よりも大きなサイズのアイコンを使用させたりすることはできません。 –

答えて

0

個人的には、私はCPictureExクラスを使用します。私はそれがpngをサポートしていないと思うが、bmp、jpegとアニメーションgif。

また、特別レンダリングのためにCairoグラフィックを使用します。カイロはpng形式をサポートしています。
もちろん、カイロは少し使いにくいです。

+0

私が取り組んでいるこのプロジェクトはC言語ではなくC言語で書かれています。クラス、CImage、MFCなどは不可能であり、コンパイルされません。 実行時にダイアログのピクチャコントロールにbmpをペイントする方法を教えてください。 –

4

これはGDI+を使用して動作し、bitmap class

Bitmap oBmp(L"D:\\test.png"); 
HBITMAP hBmp; 
oBmp.GetHBITMAP(0, &hBmp); 
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp); 

一部caveats.Your制御はSS_BITMAPスタイルを必要とします。 gdiplus.hとそのライブラリを含めることを忘れないでください。あなたは(GdiplusStartup)を初期化し、GDI +をシャットダウンする必要があります。 すべてのシステムリソースを解放することができます。

0

DevIL/OpenILライブラリを確認しましたか?これはOpenGLスタイルの関数命名法に従っており、良い意味で書かれています。

私は過去に正常に使用しました。それはまた非常に移植性があります。

は、ここでそれをチェックアウト:http://openil.sourceforge.net/features.php

2

を私はLoadBitmapか(例えば​​など)、他のプレーンGDI関数はPNGをロードするとは思いません。

イメージ編集ツールを使用してリソースを32ビットBMPに保存した後、​​とLR_CREATEDIBSECTIONを使用できます。

また、PNGファイルをDIBSECTIONにロードするライブラリを使用することもできます。 GDI +はBMPに加えてPNGとJPGを読み込みます。

また、OLEオートメーションライブラリには、さまざまなイメージタイプでインスタンス化してから基礎となるDIBSECTIONを取得できるIPictureインターフェイスがあります。特にCOMに精通していない場合は、使用するのが面倒です。開始点については、OleLoadPictureを参照してください。