チェックボックスの値を設定・取得する
Top > Tips > Checkbox

設定画面などで、チェックボックスの値を取得したり設定する必要がよくあります。

実際に値を設定・取得する関数は、フォーム関数(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 新規作成