Mfc-checkboxes

提供:Dev Guides
移動先:案内検索

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 *-チェックボックスをオンにすると、編集コントロールが有効になります。

編集コントロール有効