Mfc-checkboxes
MFC-チェックボックス
チェックボックスは、ユーザーがアイテムの値をtrueまたはfalseに設定または変更できるWindowsコントロールです。
__ *チェックボックスクラス*のメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
Create Windowsボタンコントロールを作成し、それを CButton オブジェクトにアタッチします。 |
2 |
DrawItem オーナー描画の CButton オブジェクトを描画するためにオーバーライドします。 |
3 |
GetBitmap 以前にhttps://msdn.microsoft.com/en-us/library/a1446sbt.aspx[SetBitmap]で設定されたビットマップのハンドルを取得します。 |
4 |
GetButtonStyle ボタンコントロールスタイルに関する情報を取得します。 |
5 |
GetCheck ボタンコントロールのチェック状態を取得します。 |
6 |
GetCursor 以前にhttps://msdn.microsoft.com/en-us/library/8w6ks9y7.aspx[SetCursor]で設定されたカーソルイメージのハンドルを取得します。 |
7 |
GetIcon 以前にhttps://msdn.microsoft.com/en-us/library/bd24s672.aspx[SetIcon]で設定されたアイコンのハンドルを取得します。 |
8 |
GetIdealSize ボタンコントロールの理想的なサイズを取得します。 |
9 |
GetImageList ボタンコントロールの画像リストを取得します。 |
10 |
GetNote 現在のコマンドリンクコントロールのノートコンポーネントを取得します。 |
11 |
GetNoteLength 現在のコマンドリンクコントロールのノートテキストの長さを取得します。 |
12 |
GetSplitGlyph 現在の分割ボタンコントロールに関連付けられているグリフを取得します。 |
13 |
GetSplitImageList 現在の分割ボタンコントロールの画像リストを取得します。 |
14 |
GetSplitInfo 現在の分割ボタンコントロールを定義する情報を取得します。 |
15 |
GetSplitSize 現在の分割ボタンコントロールのドロップダウンコンポーネントの境界矩形を取得します。 |
16 |
GetSplitStyle 現在の分割ボタンコントロールを定義する分割ボタンスタイルを取得します。 |
17 |
GetState ボタンコントロールのチェック状態、ハイライト状態、フォーカス状態を取得します。 |
18 |
GetTextMargin ボタンコントロールのテキストマージンを取得します。 |
19 |
SetBitmap ボタンに表示されるビットマップを指定します。 |
20 |
SetButtonStyle ボタンのスタイルを変更します。 |
21 |
SetCheck ボタンコントロールのチェック状態を設定します。 |
22 |
SetCursor ボタンに表示されるカーソル画像を指定します。 |
23 |
SetDropDownState 現在の分割ボタンコントロールのドロップダウン状態を設定します。 |
24 |
SetIcon ボタンに表示されるアイコンを指定します。 |
25 |
SetImageList ボタンコントロールの画像リストを設定します。 |
26 |
SetNote 現在のコマンドリンクコントロールにメモを設定します。 |
27 |
SetSplitGlyph 指定したグリフを現在の分割ボタンコントロールに関連付けます。 |
28 |
SetSplitImageList 画像リストを現在の分割ボタンコントロールに関連付けます。 |
29 |
SetSplitInfo 現在の分割ボタンコントロールを定義する情報を指定します。 |
30 |
SetSplitSize 現在の分割ボタンコントロールのドロップダウンコンポーネントの境界矩形を設定します。 |
31 |
SetSplitStyle 現在の分割ボタンコントロールのスタイルを設定します。 |
32 |
SetState ボタンコントロールの強調表示状態を設定します。 |
33 |
SetTextMargin ボタンコントロールのテキストマージンを設定します。 |
____チェックボックスコントロールのメッセージマッピングのリストです。
Message | Map entry | Description |
---|---|---|
BN_CLICKED | ON_BN_CLICKED( <id>, <memberFxn> ) | The framework calls this member function when is button clicked. |
BN_DISABLE | ON_BN_DISABLE( <id>, <memberFxn> ) | The framework calls this member function when button is disabled. |
BN_DOUBLECLICKED | ON_BN_DOUBLECLICKED( <id>, <memberFxn> ) | The framework calls this member function when button is double clicked. |
BN_PAINT | ON_BN_PAINT( <id>, <memberFxn> ) | The framework calls this member function when an application makes a request to repaint a button. |
新しいMFCダイアログベースのプロジェクトを作成しましょう。
プロジェクトが作成されると、デザイナーウィンドウに次のダイアログボックスが表示されます。
- ステップ1 *-次のスナップショットに示すように、TODO行を削除し、1つのチェックボックスと1つの編集コントロールをドラッグします。 また、チェックボックスのキャプションを[コントロールを有効にする]に変更します。
- ステップ2 *-チェックボックスを右クリックして、変数の追加を選択します。
- ステップ3 *-このダイアログボックスでさまざまなオプションを選択できます。 チェックボックスについては、CButton変数タイプがデフォルトで選択されています。
- ステップ4 *-同様に、コントロールIDもデフォルトで選択されています。 [カテゴリ]コンボボックスで[コントロール]を選択し、[変数名]編集ボックスにm_enableDisableCheckと入力して、[完了]をクリックする必要があります。
- ステップ5 *-次のスナップショットに示すように、編集コントロールのコントロール変数を設定とともに追加します。
- ステップ6 *-ダイアログクラスのヘッダーファイルを確認します。 これら2つの変数が追加されたことがわかります。
CButton m_enableDisableCheck;
CEdit m_myEditControl;
- ステップ7 *-チェックボックスを右クリックして、[変数の追加]を選択します。
- ステップ8 *-[完了]をクリックして続行します。
- ステップ9 *-次のスナップショットに示すように、編集コントロールの値変数を設定で追加します。
- ステップ10 *-ヘッダーファイルを確認します。 新しい変数が追加されたことがわかります。
bool m_enableDisableVal;
CString m_editControlVal;
- ステップ11 *-チェックボックスのイベントハンドラーを追加します。
- ステップ12 *-通知イベントを処理するコントロールを右クリックします。
- ステップ13 *-[メッセージタイプ]ボックスでイベントを選択して、[クラス]リストボックスで選択したクラスに追加します。
- ステップ14 *-[関数ハンドラー名]ボックスでデフォルト名を受け入れるか、選択した名前を入力します。
- ステップ15 *-[追加と編集]をクリックして、イベントハンドラーを追加します。
- ステップ16 *-CMFCControlManagementDlg.cppファイルの最後に追加された次のイベントを確認できます。
void CMFCControlManagementDlg::OnBnClickedCheck1() {
//TODO: Add your control notification handler code here
}
- ステップ17 *-チェックボックスがオン/オフになったときに、編集コントロールを有効/無効にします。
- ステップ18 *-チェックボックスクリックイベントハンドラーを追加しました。 チェックボックスのイベントハンドラーの実装を次に示します。
void CMFCControlManagementDlg::OnBnClickedCheck1() {
//TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_enableDisableVal)
m_myEditControl.EnableWindow(TRUE);
else
m_myEditControl.EnableWindow(FALSE);
}
- *ステップ19 *-CMFCControlManagementDlg
- OnInitDialog()に次のコードを追加する必要があります。 ダイアログが作成されると、これらのコントロールが管理されます。
UpdateData(TRUE);
if (m_enableDisableVal)
m_myEditControl.EnableWindow(TRUE);
else
m_myEditControl.EnableWindow(FALSE);
- ステップ20 *-CMFCControlManagementDlg.cppファイルの完全な実装です。
//MFCControlManagementDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MFCControlManagement.h"
#include "MFCControlManagementDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//CAboutDlg dialog used for App About
class CAboutDlg : public CDialogEx {
public:
CAboutDlg();
//Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);//DDX/DDV support
//Implementation
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) {
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX) {
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
CMFCControlManagementDlg::CMFCControlManagementDlg(CWnd* pParent/* = NULL*/)
: CDialogEx(IDD_MFCCONTROLMANAGEMENT_DIALOG, pParent),
m_enableDisableVal(FALSE), m_editControlVal(_T("")) {
m_hIcon = AfxGetApp()→LoadIcon(IDR_MAINFRAME);
}
void CMFCControlManagementDlg::DoDataExchange(CDataExchange* pDX) {
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHECK1, m_enableDisableCheck);
DDX_Control(pDX, IDC_EDIT1, m_myEditControl);
DDX_Check(pDX, IDC_CHECK1, m_enableDisableVal);
DDX_Text(pDX, IDC_EDIT1, m_editControlVal);
}
BEGIN_MESSAGE_MAP(CMFCControlManagementDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_CHECK1, &CMFCControlManagementDlg::OnBnClickedCheck1)
END_MESSAGE_MAP()
//CMFCControlManagementDlg message handlers
BOOL CMFCControlManagementDlg::OnInitDialog() {
CDialogEx::OnInitDialog();
//Add "About..." menu item to system menu.
//IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL) {
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty()) {
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
//Set the icon for this dialog. The framework does this automatically
//when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); //Set big icon
SetIcon(m_hIcon, FALSE); //Set small icon
//TODO: Add extra initialization here
UpdateData(TRUE);
if (m_enableDisableVal)
m_myEditControl.EnableWindow(TRUE);
else
m_myEditControl.EnableWindow(FALSE);
return TRUE;//return TRUE unless you set the focus to a control
}
void CMFCControlManagementDlg::OnSysCommand(UINT nID, LPARAM lParam) {
if ((nID & 0xFFF0) == IDM_ABOUTBOX) {
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}else {
CDialogEx::OnSysCommand(nID, lParam);
}
}
//If you add a minimize button to your dialog, you will need the code below
//to draw the icon. For MFC applications using the document/view model,
//this is automatically done for you by the framework.
void CMFCControlManagementDlg::OnPaint() {
if (IsIconic()) {
CPaintDC dc(this);//device context for painting
SendMessage(WM_ICONERASEBKGND,
reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
//Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1)/2;
int y = (rect.Height() - cyIcon + 1)/2;
//Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}else{
CDialogEx::OnPaint();
}
}
//The system calls this function to obtain the cursor to display while the user drags
//the minimized window.
HCURSOR CMFCControlManagementDlg::OnQueryDragIcon() {
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCControlManagementDlg::OnBnClickedCheck1(){
//TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_enableDisableVal)
m_myEditControl.EnableWindow(TRUE);
else
m_myEditControl.EnableWindow(FALSE);
}
- ステップ21 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、デフォルトでチェックボックスがオフになっていることがわかります。 これにより、編集コントロールが無効になります。
- ステップ22 *-チェックボックスをオンにすると、編集コントロールが有効になります。