Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. How to implement Tab order to the controls in a MFC Dialog box

How to implement Tab order to the controls in a MFC Dialog box

Scheduled Pinned Locked Moved C / C++ / MFC
questionc++tutorial
15 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A AJ83

    Hi ns Ami, I am creating dynamic edit box in Group Box. My current Tab order is Group Box, OK, Cancel button. Now I want tab order as: Group box-> Edit Box 1 -> Edit Box 2 -> Edit Box 3 -> OK -> Cancel. How can i achieve this? do you have any idea? Regards, Anshul

    N Offline
    N Offline
    Nishad S
    wrote on last edited by
    #6

    I presume that "dynamic edit box" means you are creating edit box dynamically at run time. If so, you can use SetWindowPos API to set the Z-order of edit control. You will get more information from the API documentation. The parameter hWndInsertAfter (or pWndInsertAfter in the case of MFC) can be the window handle of control, which is needed to be before in tab order. For example, m_edit2.SetWindowPos( &m_edit1, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZER | SWP_NOACTIVATE ); This will set the tab order as edit1 -> edit2. Hope this info will help.

    - ns ami -

    A 1 Reply Last reply
    0
    • N Nishad S

      I presume that "dynamic edit box" means you are creating edit box dynamically at run time. If so, you can use SetWindowPos API to set the Z-order of edit control. You will get more information from the API documentation. The parameter hWndInsertAfter (or pWndInsertAfter in the case of MFC) can be the window handle of control, which is needed to be before in tab order. For example, m_edit2.SetWindowPos( &m_edit1, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZER | SWP_NOACTIVATE ); This will set the tab order as edit1 -> edit2. Hope this info will help.

      - ns ami -

      A Offline
      A Offline
      AJ83
      wrote on last edited by
      #7

      Hi Ami, I am creating edit box in Group box as:

      #define ID_CURRENT_SN_EDIT 2000

      m_gbGroupBox = (CStatic*)GetDlgItem(IDC_GROUPBOX);
      int pointY = 0;
      int i = 0;

      for (int x = 0; x < m_vecpData->size(); x++, i++)
      {
      pointY = 30 + (i * 35);
      m_ceEdit = new CEdit;
      m_ceEdit->Create(WS_VISIBLE| WS_BORDER |ES_READONLY | WS_TABSTOP, CRect(10, pointY, 130, pointY + 25), m_gbGroupBox, ID_CURRENT_SN_EDIT + i);
      m_ceEdit->SetWindowText(m_vecpData->at(x).c_str());
      m_ceEdit->SetWindowPos(m_gbGroupBox, HWND_BOTTOM , 10, pointY, 130, pointY + 25, SWP_NOSIZE); // This line is not working.:confused:
      m_ceEdit->ShowWindow(SW_SHOWNORMAL);
      }

      N 1 Reply Last reply
      0
      • A AJ83

        Hi Ami, I am creating edit box in Group box as:

        #define ID_CURRENT_SN_EDIT 2000

        m_gbGroupBox = (CStatic*)GetDlgItem(IDC_GROUPBOX);
        int pointY = 0;
        int i = 0;

        for (int x = 0; x < m_vecpData->size(); x++, i++)
        {
        pointY = 30 + (i * 35);
        m_ceEdit = new CEdit;
        m_ceEdit->Create(WS_VISIBLE| WS_BORDER |ES_READONLY | WS_TABSTOP, CRect(10, pointY, 130, pointY + 25), m_gbGroupBox, ID_CURRENT_SN_EDIT + i);
        m_ceEdit->SetWindowText(m_vecpData->at(x).c_str());
        m_ceEdit->SetWindowPos(m_gbGroupBox, HWND_BOTTOM , 10, pointY, 130, pointY + 25, SWP_NOSIZE); // This line is not working.:confused:
        m_ceEdit->ShowWindow(SW_SHOWNORMAL);
        }

        N Offline
        N Offline
        Nishad S
        wrote on last edited by
        #8

        In this case the tab order will be same as the creation order. So no need to set the Z-order again. Anyway, is this a compilable code? Argument count of SetWindowPos seems as wrong. Note that you are creating edit control as child of that GroupBox (a static control, i think). In that case the tab key navigation will not enter to the controls inside the GroupBox. Applying WS_EX_CONTROLPARENT style to GroupBox will help you. For instance, m_gbGroupBox->ModifyStyleEx( 0, WS_EX_CONTROLPARENT );

        - ns ami -

        A 1 Reply Last reply
        0
        • N Nishad S

          In this case the tab order will be same as the creation order. So no need to set the Z-order again. Anyway, is this a compilable code? Argument count of SetWindowPos seems as wrong. Note that you are creating edit control as child of that GroupBox (a static control, i think). In that case the tab key navigation will not enter to the controls inside the GroupBox. Applying WS_EX_CONTROLPARENT style to GroupBox will help you. For instance, m_gbGroupBox->ModifyStyleEx( 0, WS_EX_CONTROLPARENT );

          - ns ami -

          A Offline
          A Offline
          AJ83
          wrote on last edited by
          #9

          This is my modified compilable code but tab order is not working as GRPBox -> Edit 1 -> Edit 2 -> Edit 3 -> OK -> CANCEL. It is still working as **GRPBox -> OK -> CANCEL.**

          #define ID_CURRENT_SN_EDIT 1003

          m_gbGroupBox = (CStatic*)GetDlgItem(IDC_GROUPBOX);
          m_gbGroupBox->ModifyStyleEx( 0, WS_EX_CONTROLPARENT);

          m_btnOK = (CButton*)GetDlgItem(IDC_OK);
          m_btnCancel = (CButton*)GetDlgItem(IDC_CANCEL);

          int pointY = 0;
          int i = 0;

          for (int x = 0; x < m_vecpData->size(); x++, i++)
          {
          pointY = 30 + (i * 35);
          m_ceEdit = new CEdit;
          m_ceEdit->Create(WS_VISIBLE| WS_BORDER |ES_READONLY, CRect(10, pointY, 130, pointY + 25), m_gbGroupBox, ID_CURRENT_SN_EDIT + i);
          m_ceEdit>SetWindowText(m_vecpData->at(x).c_str());
          int nCtlrID = ID_CURRENT_SN_EDIT + i;

          if (x > 0)
          {
          CEdit* pEdit = (CEdit*)GetDlgItem(nCtlrID - 1);
          m_ceEdit->SetWindowPos(pEdit, 10, pointY, 130, pointY + 25, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
          }
          m_ceEdit->ShowWindow(SW_SHOWNORMAL);
          }

          Any Help or Suggestion!! I do not know what to do now.

          N 1 Reply Last reply
          0
          • A AJ83

            This is my modified compilable code but tab order is not working as GRPBox -> Edit 1 -> Edit 2 -> Edit 3 -> OK -> CANCEL. It is still working as **GRPBox -> OK -> CANCEL.**

            #define ID_CURRENT_SN_EDIT 1003

            m_gbGroupBox = (CStatic*)GetDlgItem(IDC_GROUPBOX);
            m_gbGroupBox->ModifyStyleEx( 0, WS_EX_CONTROLPARENT);

            m_btnOK = (CButton*)GetDlgItem(IDC_OK);
            m_btnCancel = (CButton*)GetDlgItem(IDC_CANCEL);

            int pointY = 0;
            int i = 0;

            for (int x = 0; x < m_vecpData->size(); x++, i++)
            {
            pointY = 30 + (i * 35);
            m_ceEdit = new CEdit;
            m_ceEdit->Create(WS_VISIBLE| WS_BORDER |ES_READONLY, CRect(10, pointY, 130, pointY + 25), m_gbGroupBox, ID_CURRENT_SN_EDIT + i);
            m_ceEdit>SetWindowText(m_vecpData->at(x).c_str());
            int nCtlrID = ID_CURRENT_SN_EDIT + i;

            if (x > 0)
            {
            CEdit* pEdit = (CEdit*)GetDlgItem(nCtlrID - 1);
            m_ceEdit->SetWindowPos(pEdit, 10, pointY, 130, pointY + 25, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );
            }
            m_ceEdit->ShowWindow(SW_SHOWNORMAL);
            }

            Any Help or Suggestion!! I do not know what to do now.

            N Offline
            N Offline
            Nishad S
            wrote on last edited by
            #10

            :) Well, you missed WS_TABSTOP style.

            AJ83 wrote:

            m_ceEdit->Create(WS_VISIBLE| WS_BORDER |ES_READONLY, CRect(10, pointY, 130, pointY + 25), m_gbGroupBox, ID_CURRENT_SN_EDIT + i);

            And the following is not needed...

            AJ83 wrote:

            if (x > 0) { CEdit* pEdit = (CEdit*)GetDlgItem(nCtlrID - 1); m_ceEdit->SetWindowPos(pEdit, 10, pointY, 130, pointY + 25, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE ); } m_ceEdit->ShowWindow(SW_SHOWNORMAL);

            - ns ami -

            A 1 Reply Last reply
            0
            • N Nishad S

              :) Well, you missed WS_TABSTOP style.

              AJ83 wrote:

              m_ceEdit->Create(WS_VISIBLE| WS_BORDER |ES_READONLY, CRect(10, pointY, 130, pointY + 25), m_gbGroupBox, ID_CURRENT_SN_EDIT + i);

              And the following is not needed...

              AJ83 wrote:

              if (x > 0) { CEdit* pEdit = (CEdit*)GetDlgItem(nCtlrID - 1); m_ceEdit->SetWindowPos(pEdit, 10, pointY, 130, pointY + 25, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE ); } m_ceEdit->ShowWindow(SW_SHOWNORMAL);

              - ns ami -

              A Offline
              A Offline
              AJ83
              wrote on last edited by
              #11

              Hey Ami, **Thanks a lot for your valuable suggestion. It is working now. great :) !!!** Now my another task is: There is one Static GRPbox which has been created in CFormView by using ToolBox. Now in Static Groupbox, I am creating "n" number of dynamic GrpBox. In Dynamic GrpBox, I am creating dynamic Edit Box (few are READ ONLY too). Now I have to set taborder for that also. Any suggestion on this.? Regards, Anshul

              N 1 Reply Last reply
              0
              • A AJ83

                Hey Ami, **Thanks a lot for your valuable suggestion. It is working now. great :) !!!** Now my another task is: There is one Static GRPbox which has been created in CFormView by using ToolBox. Now in Static Groupbox, I am creating "n" number of dynamic GrpBox. In Dynamic GrpBox, I am creating dynamic Edit Box (few are READ ONLY too). Now I have to set taborder for that also. Any suggestion on this.? Regards, Anshul

                N Offline
                N Offline
                Nishad S
                wrote on last edited by
                #12

                I believe that, since you could understand your first solution well, you can implement this easily. :) Or, are you in any trouble with that?

                - ns ami -

                A 1 Reply Last reply
                0
                • N Nishad S

                  I believe that, since you could understand your first solution well, you can implement this easily. :) Or, are you in any trouble with that?

                  - ns ami -

                  A Offline
                  A Offline
                  AJ83
                  wrote on last edited by
                  #13

                  Well, In first round it is working but once it comes to OK or CANCEL button is not going back to edit box. I am trying for that... I will post code after few minutes or if you do have idea of why is it not coming back to edit box, you can let me know.. Regards, Anshul

                  A 1 Reply Last reply
                  0
                  • A AJ83

                    Well, In first round it is working but once it comes to OK or CANCEL button is not going back to edit box. I am trying for that... I will post code after few minutes or if you do have idea of why is it not coming back to edit box, you can let me know.. Regards, Anshul

                    A Offline
                    A Offline
                    AJ83
                    wrote on last edited by
                    #14

                    Hi Ami, My problem has been resolved. your given suggestion worked out. **Thanks a lot once again..... :)**

                    1 Reply Last reply
                    0
                    • N Naveen

                      open your dialog in the IDE, Press "Ctrl + D". This will display the current tab order. Click on each controls in the order in which you want to set tab-order.

                      nave [OpenedFileFinder] [My Blog]

                      N Offline
                      N Offline
                      Nahida HK
                      wrote on last edited by
                      #15

                      I did That But the tab order doesn't work on checkbox and RadioButton and i don't know why !!

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups