【事例演習1】 CGプログラム基礎 解 説 “Windowsプログラムにおける ダイアログボックスの作成方法” メインフレームウインドウやダイアログボックスは, 必ずリソースIDとイベントメッセージを切り分けるハンドラ関数名をもつ DialogAddNodeProc(…) IDD_DIALOG2 IDD_DIALOG3 DialogmModifyLinkProc(…) IDC_OK IDC_CANCEL IDC_ADD_OK IDC_ADD_CANCEL IDC_NODE_X IDC_NODE2 IDC_NODE1 IDC_TIME IDC_NODE_Z DialogBox生 成 IDR_MENU MainWndProc(…) DialogBo x 生成 WM_COMMAND + IDC_OK WM_RBUTTONDOWN: ダイアログボックス3の 生成手順 IDM_ADDNODE WM_COMMAND + IDC_ADDOK IDM_ADDNODE: ダイアログボックス2の 生成手順 ※右ボタンを押したらリンクの 修正ダイアログを出したいとき WM_RBUTTONDOWN メニュー“ノードの追加”を選択 WM_COMMAND + IDM_ADDNODE ダイアログボックスの役割1<データの入力> MS-DOSだと・・・ Windowsだと・・・ DialogChangePointProc 出発ノード,到着ノードを入力して下さい > 1 7 Enter Enterキーが押されたのをきっかけにして データの読み込み,数値を切り分けてから 各変数に格納する int startPoint,endPoint; printf(“出発ノード,到着ノードを入力して下さい ”); scanf ( "%d %d", &startPoint ,&endPoint ); IDC_START_POINT int startPoint,endPoint; char strn[10]; IDC_END_POINT IDC_CHANGE_OK: “OK”ボタンが押されたのが きっかけ BOOL CALLBACK DialogChangePointProc(HWND hWnd, UINT message, WPARAM wParam, それぞれのフィールドのデータの読み込み, LPARAM lParam) 各変数に格納する { switch (message) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CHANGE_OK: GetDlgItemText(hWnd, IDC_START_POINT, strn, 10); scanf (strn,"%d",&startPoint); GetDlgItemText(hWnd, IDC_END_POINT, strn, 10); sscanf (strn,"%d",&endPoint); : ダイアログボックスの項目(Item)を文字列(Text)として 読み込む関数 15 20 IDC_START_POINT GetDlgItemText (hWnd, IDC_START_POINT, strn, 10); 文字列配列strn 1 5 10文字分 scanf (strn, "%d", &startPoint); int変数 startPoint ダイアログボックスの役割2<データの出力> Windowsだと・・・ MS-DOSだと・・・ 始点ノード: 1 終端ノード: DialogModifyLinkProc 7 12 IDC_MODIFY_NODE1 IDC_MODIFY_NODE2 IDC_MODIFY_SHOW int startPoint=1, endPoint=7; int startPoint=1, endPoint=7; printf(“始点ノード: %d 終端ノー: %d ”, startPoint , endPoint ); “ノード確認”ボタンが押されたのを きっかけに,各表示欄に表示する BOOL CALLBACK “ノード確認”ボタンが押された DialogModifyLinkProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_MODIFY_SHOW: SetDlgItemInt(hWnd, IDC_MODIFY_NODE1, startPoint, FALSE); SetDlgItemInt(hWnd, IDC_MODIFY_NODE2, endPoint, FALSE); return 1; : ダイアログボックスの項目(Item)を整数(Int)として 書き込む関数 15 IDC_MODIFY_NODE1 SetDlgItemInt(hWnd, IDC_MODIFY_NODE1, startPoint, FALSE); int変数 startPoint ダイアログボックスを用いたときの イベントメッセージの流れ リソースエディタで作成 リソースID“IDD_DIALOG11” ④ DialogBoxマクロを呼出し,動的に 1つのダイアログボックスを生成する. 同時にダイアログボックス用のイベン トハンドラ関数と対応付ける IDD_DIALOG11によって識別される DialogBoxのひな型(テンプレート) ハンドラ関数内の処理を実行 ダイアログボックスのイベントハンドラ関数 DialogProc1 構成上の親子(owner)関係で 結ばれる ⑤ 以後,生成されたダイアログボ ックス上での操作に関するイベント メッセージは親子関係をたどって送 られる メインウィンドウ メインウィンドウのイベントハンドラ関数 アプリケーション hInstance ①表示されたダイアログボックスの リソース(例えば,ボタン)を押した とき, WM_COMMANDメッセージを送信 MainWndProc ② メニュー選択操作等によ るWM_COMMANDメッセージ メッセージ名 メッセーシ名゙に対 応して起動す べき処理内容 Windowsシステム ③ WM_COMMANDメッセージのメッセージ名 に対応した処理内容(ダイアログボック スを表示する)をもつハンドラ関数を起 動する
© Copyright 2024 ExpyDoc