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) サブメニューが表示されます。
継承階層
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);