CSplitButton クラス
このクラスは CSplitButton
、分割ボタン コントロールを表します。 分割ボタン コントロールは、ユーザーがボタンのメイン領域をクリックすると既定の動作を実行し、ユーザーがボタンのドロップダウン矢印をクリックするとドロップダウン メニューを表示します。
構文
class CSplitButton : public CButton
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CSplitButton::CSplitButton | CSplitButton オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CSplitButton::Create | 指定したスタイルを持つ分割ボタン コントロールを作成し、現在 CSplitButton のオブジェクトにアタッチします。 |
CSplitButton::SetDropDownMenu | ユーザーが現在の分割ボタン コントロールのドロップダウン矢印をクリックしたときに表示されるドロップダウン メニューを設定します。 |
保護メソッド
名前 | 説明 |
---|---|
CSplitButton::OnDropDown | ユーザーが現在の分割ボタン コントロールのドロップダウン矢印をクリックしたときにシステムが送信するBCN_DROPDOWN通知を処理します。 |
解説
クラスは CSplitButton
CButton クラスから派生します。 分割ボタン コントロールは、スタイルが BS_SPLITB (テラバイト)UTTON であるボタン コントロールです。 ユーザーがドロップダウン矢印をクリックすると、カスタム メニューが表示されます。 詳細については、「ボタン スタイル」の「BS_SPLITB (テラバイト)UTTON および BS_DEFSPLITB (テラバイト)UTTON スタイル」を参照してください。
次の図は、ポケットベル コントロールと (1) 分割ボタン コントロールを含むダイアログ ボックスを示しています。 (2) ドロップダウン矢印は既にクリックされており、(3) サブメニューが表示されます。
継承階層
CSplitButton
必要条件
ヘッダー: afxcmn.h
このクラスは、Windows Vista 以降でサポートされています。
このクラスの追加要件については、「Windows Vista コモン コントロールのビルド要件」を参照 してください。
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。それ以外の場合は FAL Standard Edition。
CSplitButton::CSplitButton
CSplitButton
オブジェクトを構築します。 コンストラクターのパラメーターは、ユーザーが分割ボタン コントロールのドロップダウン矢印をクリックしたときに表示されるサブメニューを指定します。
CSplitButton();
CSplitButton(
UINT nMenuId,
UINT nSubMenuId)
CSplitButton(CMenu* pMenu)
パラメーター
nMenuId
[in]メニュー バーのリソース ID。
nSubMenuId
[in]サブメニューのリソース ID。
pMenu
[in]サブメニューを 指定する CMenu オブジェクトへのポインター。 オブジェクトがCSplitButton
スコープ外になると、オブジェクトとそれに関連付けられている HMENU がCSplitButton
削除CMenu
されます。
解説
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通知を転送しません。 そのため、含まれているコントロールは、通知に応答するカスタム アクションをサポートできません。
含むコントロールがサポートするカスタム アクションを実装するには、オブジェクトではなく、BS_SPLITB (テラバイト)UTTON のスタイルを持つ CButton オブジェクトをCSplitButton
使用します。 次に、BCN_DROPDOWN通知のハンドラーをオブジェクトに CButton
実装します。 詳しくは、「ボタンのスタイル」をご覧ください。
分割ボタン コントロール自体がサポートするカスタム アクションを実装するには、メッセージ リフレクションを使用します。 クラスから独自のクラスを 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
スコープ外になると、オブジェクトとそれに関連付けられている HMENU がCSplitButton
削除CMenu
されます。
解説
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);
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示