PowerPoint プレゼンテーション

【事例演習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メッセージのメッセージ名
に対応した処理内容(ダイアログボック
スを表示する)をもつハンドラ関数を起
動する