1

カスタム終了ボタンを作成しようとしていますが、Photoshop でボタン用のカスタム グラフィックを既に作成しています。このコードで定義されているボタンがあります。

button = CreateWindow(L"BUTTON", L"", WS_VISIBLE | WS_CHILDWINDOW, 400, 4, 480, 24, hWnd, button_id, hInstance, NULL);

close.bmpまたはclose.pngまたは(どちらか簡単な方) をボタンに配置したいclose.icoのですが、MFC なしでこれを行う方法が見つかりません。助けてください!!!

ありがとう

4

4 に答える 4

3

2 つの主な可能性があります。

  1. 通常のボタンにビットマップのみを配置する場合は、WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_BITMAPスタイルの組み合わせでボタンを作成し、を使用してビットマップをロードLoadBitmapし、ハンドルをメッセージでボタンに送信して、ロードしたビットマップをボタンに配置しBM_SETIMAGEます。

  2. ボタン全体の外観を変更する場合は、WS_CHILD|WS_VISIBLE|BS_OWNERDRAWスタイルの組み合わせで作成し、WM_DRAWITEMメッセージを処理します。lParamこのメッセージの を にキャストし、LPDRAWITEMSTRUCTそのhDCメンバーを使用してボタンを描画します。あなたの場合、 を使用してビットマップをプリロードし、または( sourceLoadBitmap )を使用して DC に描画します。または、 and ( source )を使用できます。の他のメンバーを使用して、現在のアクションまたは状態に応じて、ビットマップ、つまりボタンの外観を選択できます。BitBltTransparentBltLoadIconDrawIconExDRAWITEMSTRUCT

于 2012-11-19T21:53:40.293 に答える
3

BS_BITMAPまたはBS_ICONボタン スタイルを使用します。ボタンを作成BM_SETIMAGEしたら、ビットマップまたはアイコンへのハンドルを含むメッセージをボタンに送信します。ビットマップまたはアイコンへのハンドルを取得するには、 を使用しますLoadImage

画像にアルファ チャネル (透明度) がある場合は、32 ビット/ピクセルのビットマップとして保存されていることを確認してください。アイコンを使用することはできますが、エッジはおそらく滑らかではありません。

于 2012-11-19T21:14:21.840 に答える
1

BM_SETIMAGEメッセージを送信し、読み込まれた画像ハンドルを lParam に渡します。

button1 = CreateWindowW(L"BUTTON", L"&Button", WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_BITMAP, 20, 50, 80, 25, hwnd, (HMENU) 600, NULL, NULL);

hImg = LoadImageW(NULL, L"test123.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_LOADFROMFILE);
SendMessageW(button1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hImg);

PS: CreateWindow() のときにBS_BITMAPフラグを使用する必要があります

于 2014-01-16T17:02:12.887 に答える
1

これはトリッキーです...

あなたの最良のオプションは、所有者描画ボタンを使用することです。これは、スタイル ビットBS_OWNERDRAWです。

次に、ボタンの所有者WM_DRAWITEM(親ウィンドウ) は、ボタンが再描画されるたびにメッセージを受け取ります。

欠点は、アイコンだけでなく、フレーム、背景、必要に応じてラベル、フォーカス四角形など、ボタンを完全にペイントする必要があることです...関連するものを確認し、DRAWITEMSTRUCT描画する正確なスタイルを決定する必要があります.

DrawFrameControl()作業を容易にするために、標準のボタン フレームを含むいくつかのスタイルのフレームを描画する Windows 機能が役立ちます。

于 2012-11-19T20:52:07.107 に答える