KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q108896: INFO: Dynamically Disabling/Enabling a Control in a Dialog Box

Article: Q108896
Product(s): Microsoft C Compiler
Version(s): winnt:1.0,2.0,2.1,4.0
Operating System(s): 
Keyword(s): kbCtrl kbDlg kbMFC KbUIDesign kbVC kbDSupport kbGrpDSMFCATL
Last Modified: 07-MAY-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- The Microsoft Foundation Classes (MFC), used with:
   - Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5, 1.51, 1.52 
   - Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0 
-------------------------------------------------------------------------------

This article demonstrates one way to disable or enable a dialog box control
during the execution of a program with the Microsoft Foundation Classes
(MFC). The dialog box uses a dialog box template created by App Studio.

To disable or enable a control in a dialog box, the following steps can be
performed:

1. Create a data member in the dialog box class that maps to a specific control
  (you can use Class Wizard to do this). For example:

        ...
        public:
        CButton     m_button;
        ...

2. Override CWnd::DoDataExchange(CDataExchange *pDX) in the dialog box class and
  call the appropriate DDX routine to hook the Windows control to the dialog
  class data member. For example:

        ...
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);
        ...

        void CMyDlg::DoDataExchange(CDataExchange* pDX)
        {
          CDialog::DoDataExchange(pDX);
          DDX_Control(pDX, IDC_BUTTON1, m_button);
        }

  NOTE: If you use Class Wizard to add a member variable in your dialog box
  class, it does this for you.

3. Call CWnd::EnableWindow() to disable or enable the control when needed. For
  example, you can disable a button when the dialog box is initialized. For
  example:

        CMyDlg::OnInitDialog()
        {
         ...
         m_button.EnableWindow(FALSE);
         ...
        }

  An alternative method is to use the CWnd::GetDlgItem() function to get a CWnd
  * to the control and then call EnableWindow(). For example:

        CMyDlg::OnInitDialog()
         {
          ...
          GetDlgItem(IDC_BUTTON)->EnableWindow(FALSE);
          ...
         }

SUMMARY
=======



Additional query words: kbSweptVC600 kbinf 1.00 1.50 2.00 2.10 2.50 2.51 2.52 3.00 3.10 4.00

======================================================================
Keywords          : kbCtrl kbDlg kbMFC KbUIDesign kbVC kbDSupport kbGrpDSMFCATL 
Technology        : kbAudDeveloper kbMFC
Version           : winnt:1.0,2.0,2.1,4.0
Issue type        : kbhowto

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.