#require Namespace ActiveBasic Namespace Windows Namespace UI Enum CheckState Unchecked = BST_UNCHECKED Checked = BST_CHECKED Indeterminate = BST_INDETERMINATE End Enum /*! @date 2008/07/13 @brief チェックボックスを表すクラス。 @author Egtra */ Class CheckBox Inherits ButtonBase Protected Override Sub GetCreateStruct(ByRef cs As CREATESTRUCT) Super.GetCreateStruct(cs) cs.style Or= BS_AUTOCHECKBOX End Sub Public /*! @brief チェックされているかどうかの取得。 @retval true チェックされているもしくは第3状態 @retval false チェックされていない */ Const Function Checked() As Boolean Checked = SendMessage(BM_GETCHECK) > 0 End Function /*! @brief チェックされているかどうかの設定。 @param[in] check チェックを入れるならtrue, 外すならfalse。 */ Sub Checked(check As Boolean) SendMessage(BM_SETCHECK, check As WPARAM, 0) End Sub /*! @brief チェック状態の取得 */ Const Function State() As CheckState Dim ret = SendMessage(BM_GETCHECK) /* If ret = BST_UNCHECKED Or ret = BST_CHECKED Or ret = BST_INDETERMINATE Then State = ret As CheckState */ If ret = BST_CHECKED Then State = CheckState.Checked ElseIf ret = BST_INDETERMINATE Then State = CheckState.Indeterminate Else State = CheckState.Unchecked End If End Function /*! @brief チェック状態の設定 */ Sub State(state As CheckState) SendMessage(BM_SETCHECK, state As WPARAM, 0) End Sub /*! @brief クリック時に自動で状態変化するかどうかの取得。 @retval true 自動変化する @retval false 自動変化しない */ Function AutoCheck() As Boolean AutoCheck = autoCheck(Style) End Function /*! @brief クリック時に自動で状態変化するどうかの設定。 @param[in] check 自動で変化させるならTrue、そうでないならFalse。 */ Sub AutoCheck(autoCheck As Boolean) If autoCheck Then Style = Style Or BS_AUTOCHECKBOX Else Style = (Style And (Not BS_AUTOCHECKBOX)) Or BS_CHECKBOX End If End Sub /*! @brief 3状態目を使用するどうかの設定。 @param[in] useThreeState 3状態目を使用するならTrue、そうでないならFalse。 */ Sub ThreeState(useThreeState As Boolean) Dim oldStyle = This.Style Dim style = oldStyle And (Not 7) Dim buttonType = oldStyle And 7 If useThreeState = threeState(buttonType) Then Exit Sub End If If useThreeState Then If buttonType = BS_AUTOCHECKBOX Then style Or= BS_AUTO3STATE Else style Or= BS_3STATE End If Else If buttonType = BS_AUTO3STATE Then style Or= BS_AUTOCHECKBOX Else style Or= BS_CHECKBOX End If End If Style = style End Sub /*! @brief 3状態目を使用しているかどうかの取得。 */ Function ThreeState() As Boolean ThreeState = threeState(Style) End Function Private Static Function threeState(style As DWord) As Boolean style And= 7 Return style = BS_3STATE Or style = BS_AUTO3STATE End Function Static Function autoCheck(style As DWord) As Boolean style And= 7 Return (style = BS_AUTOCHECKBOX Or style = BS_AUTO3STATE) End Function End Class End Namespace 'UI End Namespace 'Widnows End Namespace 'ActiveBasic