1

ピクチャ コントロールにビットマップを表示したいのですが、実際には何を試してもうまくいきません。現在、私の方法は次のようになっています。

SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1));

私もすでに使用しようとしました

STM_SETIMAGE 

メッセージですが、うまくいきません。マイ ピクチャ コントロールのプロパティ「タイプ」は「ビットマップ」に設定されており、ビットマップの ID は resource.h にあります。

皆さんが助けてくれることを願っています:)

4

1 に答える 1

3

まず、標準の Windows コントロールでメッセージを単純に組み合わせることはできません。BM_SETIMAGESTM_SETIMAGE全く異なる価値観を持っています。スタティック コントロールを使用している場合は、 を使用しますSTM_SETIMAGE。Button コントロールを使用している場合は、 を使用しますBM_SETIMAGE

次に、 のドキュメントにSTM_SETIMAGEは、LPARAMがイメージのハンドルである必要があると記載されています。リソース ID を渡しています。LoadImage最初に呼び出してハンドルを取得する必要があります。例えば:

HBITMAP hBitmap = reinterpret_cast<HBITMAP>(LoadImage(
    GetModuleHandle(NULL),
    MAKEINTRESOURCE(IDB_BITMAP1),
    IMAGE_BITMAP,
    0,
    0,
    0));

SendDlgItemMessage(
    hWnd,
    picture_CTRL,
    STM_SETIMAGE,
    IMAGE_BITMAP,
    reinterpret_cast<LPARAM>(hBitmap));

ドキュメンテーションによると、ビットマップを使い終わったら、ビットマップを削除する責任があることに注意してください。

編集: 元のバージョンのコードに 2 つの問題があったことに注意してください。どちらも質問からのコピーと貼り付けが原因です。ハンドルをLPARAM自分自身として渡すのに失敗し、BM_SETIMAGE代わりにを使用しましたSTM_SETIMAGE。また、Cody Gray が指摘したように、関数またはメッセージの MSDN ドキュメントで、 を使用できるかどうかがわかりますMAKEINTRESOURCE

于 2013-07-26T13:27:53.663 に答える