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. Help with textbox control

Help with textbox control

Scheduled Pinned Locked Moved C / C++ / MFC
helpquestioncsharpc++game-dev
12 Posts 3 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.
  • S Stick

    Ok, I'm new to doing this in C++, although I have done it in C#. As this code has to work inside another larger C++ project I have (game program) I can't just do it in C#. In my click handler for a button I want to put text into a textbox control on my form. Unfortunately, the "text" is in a c-string (ie null terminated string), and so I'm not sure how to get it to work: System::Void btnGen_Click(System::Object^ sender, System::EventArgs^ e) { BYTE bMacaddress[MAC_DIM]; CSoftwareKey::RetrieveMACAddress(bMacaddress); char* pMacString = NULL; CSoftwareKey::Buffer2HexString( bMacaddress, MAC_DIM, &pMacString ); tbMacAddress->Text = *pMacString; // <---- Problem line } I tried first making a string: string strMacAddr(pMacString); and then: tbMacAddress->Text = pMacString; but this doesn't work either (and I'm sure you are laughing now) =) Anyway, how can I do this? Basically, pMacString points to something like this: "000C41805D2D\0" ( if I am making sense ) and so that's what I want in the text box. Thanks Patrick

    N Offline
    N Offline
    Nelek
    wrote on last edited by
    #2

    Mmmm, are you asking to port from c# to c++? or c++ to c#? Because... there are elements in your code that are unknown for me :S

    Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

    S 1 Reply Last reply
    0
    • N Nelek

      Mmmm, are you asking to port from c# to c++? or c++ to c#? Because... there are elements in your code that are unknown for me :S

      Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

      S Offline
      S Offline
      Stick
      wrote on last edited by
      #3

      No, the above code has nothing to do with C#, it is straight C++.

      N 1 Reply Last reply
      0
      • S Stick

        Ok, I'm new to doing this in C++, although I have done it in C#. As this code has to work inside another larger C++ project I have (game program) I can't just do it in C#. In my click handler for a button I want to put text into a textbox control on my form. Unfortunately, the "text" is in a c-string (ie null terminated string), and so I'm not sure how to get it to work: System::Void btnGen_Click(System::Object^ sender, System::EventArgs^ e) { BYTE bMacaddress[MAC_DIM]; CSoftwareKey::RetrieveMACAddress(bMacaddress); char* pMacString = NULL; CSoftwareKey::Buffer2HexString( bMacaddress, MAC_DIM, &pMacString ); tbMacAddress->Text = *pMacString; // <---- Problem line } I tried first making a string: string strMacAddr(pMacString); and then: tbMacAddress->Text = pMacString; but this doesn't work either (and I'm sure you are laughing now) =) Anyway, how can I do this? Basically, pMacString points to something like this: "000C41805D2D\0" ( if I am making sense ) and so that's what I want in the text box. Thanks Patrick

        H Offline
        H Offline
        Hamid Taebi
        wrote on last edited by
        #4

        Your code is managed it was better you asked on the (Managed) C++/CLI[^]


        WhiteSky


        S 1 Reply Last reply
        0
        • S Stick

          No, the above code has nothing to do with C#, it is straight C++.

          N Offline
          N Offline
          Nelek
          wrote on last edited by
          #5

          :omg: then I'm more newbie than I thought :doh: :P hehehehe I've never seen "^" used as "System::Object^ sender" Nevermind, your tbMacAddress->Text is a string or a char[x]? I had some problems with CString and char* in VC++ because of the "\0" at the end of the CStrings. I solved it considering the CString as a vector and taking every letter in a loop and putting it in the place of the char[20] that was needed. Afterwards I passed the &char[0] where the LPCSTR was asked for and it worked. Finally I found another way to do it and changed it but... sometimes silly things give the way to the correct answer.

          Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

          1 Reply Last reply
          0
          • H Hamid Taebi

            Your code is managed it was better you asked on the (Managed) C++/CLI[^]


            WhiteSky


            S Offline
            S Offline
            Stick
            wrote on last edited by
            #6

            My question has nothing to do with managed code. Basically, forget the code which is confusing you, and just think of this as the question: If you have a c-string (ie a null terminated string) and you want to set the Text in a textbox to that value, how do you do it? For example, when a button on the form is pushed, set the textbox to the c-string's value. Patrick

            N H 2 Replies Last reply
            0
            • S Stick

              My question has nothing to do with managed code. Basically, forget the code which is confusing you, and just think of this as the question: If you have a c-string (ie a null terminated string) and you want to set the Text in a textbox to that value, how do you do it? For example, when a button on the form is pushed, set the textbox to the c-string's value. Patrick

              N Offline
              N Offline
              Nelek
              wrote on last edited by
              #7

              Hi, to do that I associate a member variable (CString) to the CEditBox and when I push a button or happens whatever it shall happen, call UpdateData (FALSE); On the other hand, as the CEdit is derived from CWnd. It should be possible to modify its text with SetWindowText( LPCTSTR lpszString ); but I'm not sure because I have never tried it, I do it as above (VC++ 6)

              Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

              S 1 Reply Last reply
              0
              • S Stick

                My question has nothing to do with managed code. Basically, forget the code which is confusing you, and just think of this as the question: If you have a c-string (ie a null terminated string) and you want to set the Text in a textbox to that value, how do you do it? For example, when a button on the form is pushed, set the textbox to the c-string's value. Patrick

                H Offline
                H Offline
                Hamid Taebi
                wrote on last edited by
                #8

                If you want to set text for a control Textbox(editbox) or button you can use of SetWindowText();


                WhiteSky


                1 Reply Last reply
                0
                • N Nelek

                  Hi, to do that I associate a member variable (CString) to the CEditBox and when I push a button or happens whatever it shall happen, call UpdateData (FALSE); On the other hand, as the CEdit is derived from CWnd. It should be possible to modify its text with SetWindowText( LPCTSTR lpszString ); but I'm not sure because I have never tried it, I do it as above (VC++ 6)

                  Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

                  S Offline
                  S Offline
                  Stick
                  wrote on last edited by
                  #9

                  Code? So if I tell you that you are given a variable: myString[] = "0C34AZ"; // which is null terminated what would be working code to put it in a textbox?

                  N 1 Reply Last reply
                  0
                  • S Stick

                    Code? So if I tell you that you are given a variable: myString[] = "0C34AZ"; // which is null terminated what would be working code to put it in a textbox?

                    N Offline
                    N Offline
                    Nelek
                    wrote on last edited by
                    #10

                    Hi another time, ok, I have the DoDataExchange in my Form, and a member variable associated to my CEdit. DDX_Text(pDX, IDC_MYEDIT, m_szMemberString); I initialize it to “” (empty) in the constructor. And then, in some events/messages I put the name of another element I saved in the Document, in the example a click in a ListCtrl (report mode) where my elements are listed

                    void CMyFormView::OnClickCtrlList(NMHDR* pNMHDR, LRESULT* pResult)
                    { POSITION pos = m_clcMyList.GetFirstSelectedItemPosition();

                    //If the click was outside the range
                    

                    if (!pos)
                    { m_nRowNum = -1;
                    m_cbButton1.EnableWindow (FALSE);
                    m_ szMemberString = “”;
                    UpdateData (FALSE);
                    }

                    while (pos)
                    {	m\_nRowNum = m\_clcRuleList.GetNextSelectedItem(pos);
                    	M\_szMemberString = pDoc->GetElementNameOfColumn (m\_nRowNum);
                    	m\_cbButton1.EnableWindow (TRUE);
                    	UpdateData (FALSE);
                    }
                    
                    Invalidate ();			UpdateWindow ();
                    \*pResult = 0;
                    return;
                    

                    }

                    Another way (without member variables and the DoDataExchange) can be:

                    void CMyFormView::OnClickCtrlList(NMHDR* pNMHDR, LRESULT* pResult)
                    { POSITION pos = m_clcMyList.GetFirstSelectedItemPosition();
                    CEdit* pEdit = (CEdit*)GetDlgItem (IDC_MYEDIT);

                    //If the click was outside the range
                    if (!pos)
                    {	m\_nRowNum = -1;
                    	m\_cbButton1.EnableWindow (FALSE);
                    	pEdit->SetWindowText ("");
                    }
                    
                    while (pos)
                    {	m\_nRowNum = m\_clcRuleList.GetNextSelectedItem(pos);
                    	pEdit->SetWindowText (pDoc->GetElementNameOfColumn (m\_nRowNum));
                    	m\_cbButton1.EnableWindow (TRUE);
                    }
                    
                    Invalidate ();			UpdateWindow ();
                    \*pResult = 0;
                    return;
                    

                    }

                    The function I’m using is: CString CMyDoc::GetElementNameOfColumn (int nRow);

                    Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

                    S 1 Reply Last reply
                    0
                    • N Nelek

                      Hi another time, ok, I have the DoDataExchange in my Form, and a member variable associated to my CEdit. DDX_Text(pDX, IDC_MYEDIT, m_szMemberString); I initialize it to “” (empty) in the constructor. And then, in some events/messages I put the name of another element I saved in the Document, in the example a click in a ListCtrl (report mode) where my elements are listed

                      void CMyFormView::OnClickCtrlList(NMHDR* pNMHDR, LRESULT* pResult)
                      { POSITION pos = m_clcMyList.GetFirstSelectedItemPosition();

                      //If the click was outside the range
                      

                      if (!pos)
                      { m_nRowNum = -1;
                      m_cbButton1.EnableWindow (FALSE);
                      m_ szMemberString = “”;
                      UpdateData (FALSE);
                      }

                      while (pos)
                      {	m\_nRowNum = m\_clcRuleList.GetNextSelectedItem(pos);
                      	M\_szMemberString = pDoc->GetElementNameOfColumn (m\_nRowNum);
                      	m\_cbButton1.EnableWindow (TRUE);
                      	UpdateData (FALSE);
                      }
                      
                      Invalidate ();			UpdateWindow ();
                      \*pResult = 0;
                      return;
                      

                      }

                      Another way (without member variables and the DoDataExchange) can be:

                      void CMyFormView::OnClickCtrlList(NMHDR* pNMHDR, LRESULT* pResult)
                      { POSITION pos = m_clcMyList.GetFirstSelectedItemPosition();
                      CEdit* pEdit = (CEdit*)GetDlgItem (IDC_MYEDIT);

                      //If the click was outside the range
                      if (!pos)
                      {	m\_nRowNum = -1;
                      	m\_cbButton1.EnableWindow (FALSE);
                      	pEdit->SetWindowText ("");
                      }
                      
                      while (pos)
                      {	m\_nRowNum = m\_clcRuleList.GetNextSelectedItem(pos);
                      	pEdit->SetWindowText (pDoc->GetElementNameOfColumn (m\_nRowNum));
                      	m\_cbButton1.EnableWindow (TRUE);
                      }
                      
                      Invalidate ();			UpdateWindow ();
                      \*pResult = 0;
                      return;
                      

                      }

                      The function I’m using is: CString CMyDoc::GetElementNameOfColumn (int nRow);

                      Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

                      S Offline
                      S Offline
                      Stick
                      wrote on last edited by
                      #11

                      I just realised why I'm having the problem I'm having. I started a straight C++ project, and added a CLR form! I really didn't want a managed form, as I want to stick with unmanaged C++. duh So, basically, either I do this in C# ( or managed C++ ) or I have to learn how to do windows forms :( I think I'll stick to a console app to do this simple job and avoid the whole dang problem. Windows programming is just to much of a pain to learn.

                      N 1 Reply Last reply
                      0
                      • S Stick

                        I just realised why I'm having the problem I'm having. I started a straight C++ project, and added a CLR form! I really didn't want a managed form, as I want to stick with unmanaged C++. duh So, basically, either I do this in C# ( or managed C++ ) or I have to learn how to do windows forms :( I think I'll stick to a console app to do this simple job and avoid the whole dang problem. Windows programming is just to much of a pain to learn.

                        N Offline
                        N Offline
                        Nelek
                        wrote on last edited by
                        #12

                        Hehehehe, This is the same my partner said. He try to piss me off with "look, in VB I can print with just 2 lines", because I'm having problems to personalize a PrintDialog, margins, Bitmaps... Windows programming is not easy at all. But it is not imposible, just a question of time and being persistent.

                        Greetings. -------- M.D.V. If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?

                        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