設定画面などで、チェックボックスの値を取得したり設定する必要がよくあります。
実際に値を設定・取得する関数は、フォーム関数(Frm〜)とコントロール関数(Ctl〜)の
2種類がありますが、どちらも結果は同じです。
どちらかというと、フォーム関数の方が簡単なようです。
サンプル画面
ヘッダファイル
#define MainForm 1000 #define MainCheckbox 1001 #define MainOffButton 1002 #define MainOnButton 1003 #define MainReversalButton 1004 #define Checkbox_OFF 0 #define Checkbox_ON 1 |
リソースファイル
FORM ID MainForm AT (0 0 160 160) NOFRAME BEGIN TITLE "Checkbox" CHECKBOX "Checkbox" ID MainCheckbox AT (45 55 AUTO AUTO) FONT 0 BUTTON "OFF" ID MainOffButton AT (34 96 AUTO AUTO) FONT 0 BUTTON "ON" ID MainOnButton AT (PREVRIGHT+4 PREVTOP AUTO AUTO) FONT 0 BUTTON "Reversal" ID MainReversalButton AT (PREVRIGHT+4 PREVTOP AUTO AUTO) FONT 0 END |
イベントハンドラ
Boolean MainFormHandleEvent(
EventPtr pEvent) /* I:イベント */
{
Boolean handled = false;
FormPtr pForm;
UInt16 index;
ControlPtr pControl;
switch (pEvent->eType)
{
case frmOpenEvent: /* フォームオープンイベント */
pForm = FrmGetActiveForm();
FrmDrawForm(pForm);
break;
case ctlSelectEvent: /* コントロール選択イベント */
pForm = FrmGetActiveForm();
switch (pEvent->data.ctlSelect.controlID)
{
case MainOffButton: /* 「OFF」ボタン */
/* チェックボックスをOFF */
index = FrmGetObjectIndex(pForm, MainCheckbox);
pControl = (ControlPtr)FrmGetObjectPtr(pForm, index);
CtlSetValue(pControl, Checkbox_OFF);
break;
case MainOnButton: /* 「ON」ボタン */
/* チェックボックスをON */
index = FrmGetObjectIndex(pForm, MainCheckbox);
pControl = (ControlPtr)FrmGetObjectPtr(pForm, index);
CtlSetValue(pControl, Checkbox_ON);
break;
case MainReversalButton: /* 「Reversal」ボタン */
index = FrmGetObjectIndex(pForm, MainCheckbox);
if (Checkbox_OFF == FrmGetControlValue(pForm, index)) /* チェックボックスはOFF? */
{
/* チェックボックスをON */
FrmSetControlValue(pForm, index, Checkbox_ON);
}
else if (Checkbox_ON == FrmGetControlValue(pForm, index)) /* チェックボックスはON? */
{
/* チェックボックスをOFF */
FrmSetControlValue(pForm, index, Checkbox_OFF);
}
break;
default:
return false;
}
handled = true;
break;
default:
break;
}
return handled;
}
|
「ON」「OFF」ボタンの時と「Reversal」ボタンの時で、 チェックボックスの値を設定する関数を別なものを使用していますが、 どちらも結果は同じです。
またチェックボックスの値を取得するときも、 FrmGetControlValue関数の代わりにCtlGetValue関数を使用することもできます。
'05/6/10 新規作成
Copyright (c) 2005-2006 kasa0 All rights reserved.