0から始めるVisualStudio2022:ソフト開発塾
ダイアログボックスで(8.スクロールバーを表示してみるのような)ウィンドウを作成し
画像(BMPファイル)を表示してみる。
VisualStudio2022を起動して
新しいプロジェクトを選んで
C++の空のプロジェクトを選んで
次に、メニューより
『プロジェクト』『リソースの追加』
「Dialog」で、「新規作成」ボタンを押す。
ダイアログを編集する画面が現れた。
OK と キャンセル を削除する
IDをIDD_DIALOG1から"DIALOGBOX"に(ダブルクォーテーションを両側につけて)
境界線をダイアログ枠からサイズ変更枠に
垂直スクロールバーおよび水平スクロールバーをTrue
ダイアログはこんな感じになります。
ついでにボックスの最大化・ボックスの最小化をTrue
10.ダイアログボックスで、作ったdialog000.cppをコピーして
名前をdialog003.cppにする。
とりあえず、ビルド!!
その前に、いつもの
WINDOWSの場合、リンクでエラーが出てないように
『プロジェクト』『プロパティ』の「リンカー」「システム」
サブシステムを「コンソール」から「Windows」に変える。
実行すると、こんな感じ。
まぁ、何もない。
で、ソースの修正
BOOL CALLBACK MyDlgProc にあるswitch の case を追加
WM_INITDIALOG に、初期処理関係を
WM_PAINT に、BMP表示処理関係を
WM_DESTROY に、後始末を
サイズ変更に対応するなら、WM_SIZE
スクロールに対応するなら、WM_VSCROLL WM_HSCROLLにと
WM_CREATE での処理を、WM_INITDIALOG に、記述すればOKの様だ。
その前に、
表示する、BMPファイルは、ペイントで適当に作成して
C:\softca\dialog\samp.bmp
に保管して
次に、ダイアログを作成した時の同じ様に
メニューより
『プロジェクト』『リソースの追加』
インポート
すると、リソースビューは
こんな感じで、IDB_BITMAP1 のプロパティは
と、ファイル名が、C:\softca\dialog\samp.bmp となっている。
で、IDを IDB_BITMAP1 から "BITMAP_FILENAME" に(ダブルクォーテーションを両側につけて)
リソースビューは
となった。
dialog003.cpp のソースは以下の通り
#include <Windows.h>
HINSTANCE g_hInst;
BOOL CALLBACK MyDlgProc(
HWND hDlg,
UINT msg,
WPARAM wPara,
LPARAM lPara
) {
static HBITMAP mm_hbitmap;
static BITMAP mm_bitmap;
static HDC mm_hdc_bitmap;
HDC hdc;
PAINTSTRUCT ps;
switch (msg) {
case WM_INITDIALOG:
mm_hbitmap = LoadBitmapA(g_hInst,"BITMAP_FILENAME");
GetObject(mm_hbitmap, sizeof(BITMAP), &mm_bitmap);
mm_hdc_bitmap = CreateCompatibleDC(NULL);
SelectObject(mm_hdc_bitmap, mm_hbitmap);
break;
case WM_PAINT:
hdc = BeginPaint(hDlg, &ps);
BitBlt(hdc, 0, 0, mm_bitmap.bmWidth, mm_bitmap.bmHeight, mm_hdc_bitmap, 0, 0, SRCCOPY);
EndPaint(hDlg, &ps);
break;
case WM_DESTROY:
DeleteDC(mm_hdc_bitmap);
DeleteObject(mm_hbitmap);
break;
}
return FALSE;
}
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow) {
g_hInst = hInstance;
DialogBoxA(hInstance, "DIALOGBOX", NULL, (DLGPROC)MyDlgProc);
return 0;
}
今回は、ここまで
Top 次