使い方は、メニューの時とたいして変わりません。
ちょっと話は変わりますが、BCC Developerで「ツール」「環境設定」で
リソースエディタをBCCFormに設定しておくと簡単に起動することができます。
左の図の「リソーススクリプト」ボタンを押すとBCCFormが起動します。
では、適当なダイアログボックスを作ってみてください。
BCCFormで「編集」「リソースの追加」「ダイアログ」でダイアログボックスを追加します。
リソースID名は「MYDLG」とします。
「完了」ボタンを押します。
そうすると、左の図のようなダイアログボックスのひな形が出てきます。
ダイアログボックスというよりはVBのフォームみたいな感じです。 サイズ変更ができたり、「最小化ボタン」がついていたりして ちょっと普通のダイアログボックスとは違いますね。
そこで、これを右クリックして「コントロールの編集」を選択します。
キャプションを適当なものに変えます。
境界線を「ダイアログ枠」に変更します。
「最大化」「最小化」ボタンのチェックもはずします。
フォントも適当なものに変更しました。
ダイアログボックス自体の大きさも変えて、エディットコントロールと
ボタンを追加しました。
これは、右クリックで「コントロールの追加」で行います。
ボタンのキャプションも「コントロールの編集」で行えます。
エディットコントロールのシンボルはIDC_EDIT01、ボタンはIDOKとしました。
メニューは「ファイル」→「終了」、「オプション」→「ダイアログボックス」という
感じで作ってみてください。
では、本体のプログラムを作ってみましょう。
// form02.cpp #include <windows.h> #include "Resform02.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyDlgProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); char szClassName[] = "form02"; //ウィンドウクラス HINSTANCE hInst; int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; hInst = hCurInst; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウ・クラスの登録 ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; //プロシージャ名 wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst;//インスタンス wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = "MYMENU"; //メニュー名 wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, "猫でもわかるダイアログボックス", //タイトルバーにこの名前が表示されます WS_OVERLAPPEDWINDOW, //ウィンドウの種類 CW_USEDEFAULT, //X座標 CW_USEDEFAULT, //Y座標 CW_USEDEFAULT, //幅 CW_USEDEFAULT, //高さ NULL, //親ウィンドウのハンドル、親を作るときはNULL NULL, //メニューハンドル、クラスメニューを使うときはNULL hInst, //インスタンスハンドル NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id; switch (msg) { case WM_COMMAND: switch (LOWORD(wp)) { case IDM_END: SendMessage(hWnd, WM_CLOSE, 0, 0); break; case IDM_DLG: DialogBox(hInst, "MYDLG", hWnd, (DLGPROC)MyDlgProc); break; } break; case WM_CLOSE: id = MessageBox(hWnd, "終了してもよろしいですか", "確認", MB_YESNO | MB_ICONQUESTION); if (id == IDYES) DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } LRESULT CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_COMMAND: switch (LOWORD(wp)) { case IDOK: EndDialog(hDlg, IDOK); return TRUE; } return FALSE; } return FALSE; }メニューの「オプション」「ダイアログボックス」を選択すると・・・
左の図のようなダイアログボックスが出現すれば成功です。
エディットコントロールに記入し、「終了」ボタンを押してもダイアログボックス が閉じるだけで何も起こりません。
では、リソース・スクリプト(form02.rc)はどのようにに作られているのでしょうか。
//----------------------------------------- // BCCForm Ver 2.41 // An Easy Resource Editor for BCC // Copyright (c) February 2002 by ysama //----------------------------------------- #include "Resform02.h" //---------------------------------- // ダイアログ (MYDLG) //---------------------------------- MYDLG DIALOG DISCARDABLE 0, 0, 156, 87 EXSTYLE WS_EX_DLGMODALFRAME STYLE WS_POPUP | WS_DLGFRAME | WS_CAPTION | WS_SYSMENU | DS_SETFONT CAPTION "フリーソフトで作るダイアログボックス" FONT 10, "MS 明朝" { CONTROL "終了", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 33, 66, 87, 15 CONTROL "", IDC_EDIT01, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | ES_AUTOHSCROLL | ES_LEFT, 6, 3, 144, 54 } //------------------------- // メニュー(MYMENU) //------------------------- MYMENU MENU DISCARDABLE { POPUP "ファイル(&F)" { MENUITEM "終了(&X)", IDM_END } POPUP "オプション(&O)" { MENUITEM "ダイアログボックス(&D)", IDM_DLG } }ヘッダファイル(Resform02.h)は次のようになっていました。
//----------------------------------------- // BCCForm Ver 2.41 // Header File for Resource Script File // Copyright (c) February 2002 by ysama //----------------------------------------- //--------------------- // ダイアログリソース //--------------------- // ダイアログ MYDLG #define IDC_EDIT01 101 //--------------------- // メニューリソース //--------------------- // メニュー MYMENU #define IDM_END 200 #define IDM_DLG 201 //--------------------- // イメージリソース //--------------------- //--------------------- // ストリングテーブル //--------------------- //-------------------- // アクセラレーター //-------------------- //------------------ // ヴァージョン情報 //------------------これで、BCCでメニューやダイアログボックスのリソース・スクリプトを含むプログラムを作るのが かなり簡単になりましたね。
Update 29/Dec/2003 By Y.Kumei