次の方法で共有


CSplitButton クラス

CSplitButton クラスは、分割ボタン コントロールを表します。 分割ボタン コントロールは、ユーザーがボタンのメイン領域をクリックすると既定の動作を実行し、ユーザーがボタンのドロップダウン矢印をクリックするとドロップダウン メニューを表示します。

構文

class CSplitButton : public CButton

メンバー

パブリック コンストラクター

名前 説明
CSplitButton::CSplitButton CSplitButton オブジェクトを構築します。

パブリック メソッド

名前 説明
CSplitButton::Create 指定したスタイルを持つ分割ボタン コントロールを作成し、現在の CSplitButton オブジェクトにアタッチします。
CSplitButton::SetDropDownMenu ユーザーが現在の分割ボタン コントロールのドロップダウン矢印をクリックしたときに表示されるドロップダウン メニューを設定します。

保護メソッド

名前 説明
CSplitButton::OnDropDown ユーザーが現在の分割ボタン コントロールのドロップダウン矢印をクリックしたときにシステムが送信するBCN_DROPDOWN通知を処理します。

解説

CSplitButton クラスは、CButton クラスから派生します。 分割ボタン コントロールは、スタイルがBS_SPLITBUTTONボタン コントロールです。 ユーザーがドロップダウン矢印をクリックすると、カスタム メニューが表示されます。 詳細については、「 Button スタイルのBS_SPLITBUTTONおよびBS_DEFSPLITBUTTONスタイル」を参照してください。

次の図は、ポケットベル コントロールと (1) 分割ボタン コントロールを含むダイアログ ボックスを示しています。 (2) ドロップダウン矢印は既にクリックされており、(3) サブメニューが表示されます。

分割ボタンとポケットベル コントロールを含むダイアログ。

継承階層

CObject

CCmdTarget

CWnd

CButton

CSplitButton

要件

ヘッダー: afxcmn.h

このクラスは、Windows Vista 以降でサポートされています。

このクラスの追加要件については、「Windows Vista Common Controls の Build 要件で説明されています。

CSplitButton::Create

指定したスタイルを持つ分割ボタン コントロールを作成し、現在の CSplitButton オブジェクトにアタッチします。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

パラメーター

dwStyle
[in]コントロールに適用するスタイルのビットごとの組み合わせ (OR)。 詳しくは、「ボタンのスタイル」をご覧ください。

rect
[in]コントロールの位置とサイズを含む RECT 構造体への参照。

pParentWnd
[in]コントロールの親ウィンドウである CWnd オブジェクトへの null 以外のポインター。

nID
[in]コントロールの ID。

戻り値

このメソッドが成功した場合は TRUE。それ以外の場合は FALSE。

CSplitButton::CSplitButton

CSplitButton オブジェクトを構築します。 コンストラクターのパラメーターは、ユーザーが分割ボタン コントロールのドロップダウン矢印をクリックしたときに表示されるサブメニューを指定します。

CSplitButton();

CSplitButton(
    UINT nMenuId,
    UINT nSubMenuId)
CSplitButton(CMenu* pMenu)

パラメーター

nMenuId
[in]メニュー バーのリソース ID。

nSubMenuId
[in]サブメニューのリソース ID。

pMenu
[in]サブメニューを指定する CMenu オブジェクトへのポインター。 CSplitButton オブジェクトは、CSplitButton オブジェクトがスコープ外になったときに、CMenu オブジェクトとそれに関連付けられている HMENU を削除します。

解説

CSplitButton::Create メソッドを使用して分割ボタン コントロールを作成し、CSplitButton オブジェクトにアタッチします。

CSplitButton::OnDropDown

ユーザーが現在の分割ボタン コントロールのドロップダウン矢印をクリックしたときにシステムが送信するBCN_DROPDOWN通知を処理します。

afx_msg void OnDropDown(
    NMHDR* pNMHDR,
    LRESULT* pResult);

パラメーター

pNMHDR
[in]BCN_DROPDOWN通知に関する情報を含むNMHDR構造体へのポインター。

pResult
[out](使用されません。値は返されません)。 BCN_DROPDOWN 通知の戻り値。

解説

ユーザーが分割ボタン コントロールのドロップダウン矢印をクリックすると、システムはBCN_DROPDOWN通知メッセージを送信します。このメッセージは、 OnDropDown メソッドによって処理されます。 ただし、 CSplitButton オブジェクトは、分割ボタン コントロールを含むコントロールにBCN_DROPDOWN通知を転送しません。 そのため、含まれているコントロールは、通知に応答するカスタム アクションをサポートできません。

含むコントロールがサポートするカスタム アクションを実装するには、CSplitButton オブジェクトではなく、BS_SPLITBUTTONのスタイルを持つ CButton オブジェクトを使用します。 次に、 CButton オブジェクトにBCN_DROPDOWN通知のハンドラーを実装します。 詳しくは、「ボタンのスタイル」をご覧ください。

分割ボタン コントロール自体がサポートするカスタム アクションを実装するには、 message リフレクションを使用します。 CSplitButton クラスから独自のクラスを派生させ、CMySplitButton などの名前を付けます。 次に、次のメッセージ マップをアプリケーションに追加して、BCN_DROPDOWN通知を処理します。

BEGIN_MESSAGE_MAP(CMySplitButton,
    CSplitButton)
    ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)
END_MESSAGE_MAP()

CSplitButton::SetDropDownMenu

ユーザーが現在の分割ボタン コントロールのドロップダウン矢印をクリックしたときに表示されるドロップダウン メニューを設定します。

void SetDropDownMenu(
    UINT nMenuId,
    UINT nSubMenuId);

void SetDropDownMenu(CMenu* pMenu);

パラメーター

nMenuId
[in]メニュー バーのリソース ID。

nSubMenuId
[in]サブメニューのリソース ID。

pMenu
[in]サブメニューを指定する CMenu オブジェクトへのポインター。 CSplitButton オブジェクトは、CSplitButton オブジェクトがスコープ外になったときに、CMenu オブジェクトとそれに関連付けられている HMENU を削除します。

解説

nMenuId パラメーターは、メニュー バー項目の水平リストであるメニュー バーを識別します。 nSubMenuId パラメーターは、サブメニューを識別する 0 から始まるインデックス番号です。これは、各メニュー バー項目に関連付けられているメニュー項目のドロップダウン リストです。 たとえば、一般的なアプリケーションには、メニュー バー項目 "ファイル"、"編集"、"ヘルプ" が含まれるメニューがあります。"ファイル" メニュー バー項目には、メニュー項目 "開く"、"閉じる"、"終了" を含むサブメニューがあります。分割ボタン コントロールのドロップダウン矢印をクリックすると、コントロールにはメニュー バーではなく、指定したサブメニューが表示されます。

次の図は、ポケットベル コントロールと (1) 分割ボタン コントロールを含むダイアログ ボックスを示しています。 (2) ドロップダウン矢印は既にクリックされており、(3) サブメニューが表示されます。

分割ボタンとポケットベル コントロールを含むダイアログ。

次のコード例の最初のステートメントは、 CSplitButton::SetDropDownMenu メソッドを示しています。 Visual Studio リソース エディターを使用してメニューを作成し、メニュー バー ID に自動的に名前を付IDR_MENU1。 nSubMenuId パラメーター (ゼロ) は、メニュー バーの唯一のサブメニューを参照します。

// Initialize the dropdown menu of the splitbutton control.
m_splitButton.SetDropDownMenu(IDR_MENU1, 0);

// Create the pager control.
BOOL nRet;
CRect rect;
GetClientRect(&rect);
nRet = m_pager.Create(
    (WS_VISIBLE | WS_CHILD | PGS_HORZ),
    CRect(rect.Width() / 4, 5, (rect.Width() * 3) / 4, 55),
    this,
    IDC_PAGER1);

m_pager.GetClientRect(&rect);
nRet = m_button.Create(
    _T("This is a very, very long button. 012345678901234567890"),
    (WS_VISIBLE | WS_CHILD), // Do not use CCS_NORESIZE.
    CRect(0, 0, rect.Width(), 30),
    &m_pager, IDC_BUTTON1);

m_pager.SetChild(m_button.m_hWnd);
m_pager.SetButtonSize(20);
m_pager.SetBorder(1);

関連項目

CSplitButton クラス
階層図
CButton クラス