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. CEdit::LineLength returning zero

CEdit::LineLength returning zero

Scheduled Pinned Locked Moved C / C++ / MFC
databasehelp
15 Posts 5 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.
  • F ForNow

    I did pass 0 is the index and still it returned 0 I do use The GetTextExtent but thought that LineLength would be easier This is the code I used to figured out how much space I needed per line I was looking to allow the user up to 8 hex characters (by that I mean 0 -F ) It just didn't come up exactly the way I figured

    CSize mycsize = gprdc->GetTextExtent(_T("0123456789ABCDEF"), 16);
    mycsize.cx = mycsize.cx / 16;
    RECT gprrect, gprrect1, accessrect;

    WINDOWINFO dlgwin;
    GetWindowInfo(&dlgwin);
    asidgprs.GetWindowRect(&gprrect);
    asidaccess.GetWindowRect(&accessrect);
    int height = gprrect.bottom - gprrect.top;
    gprrect.left = (gprrect.left - dlgwin.rcWindow.left) + dlgwin.cxWindowBorders;
    accessrect.left = (accessrect.left - dlgwin.rcWindow.left) + dlgwin.cxWindowBorders;
    gprrect.top = gprrect.top - ( dlgwin.rcWindow.top + dlgwin.cyWindowBorders + 20) ;
    accessrect.top = accessrect.top - ( dlgwin.rcWindow.top + dlgwin.cyWindowBorders + 20);
    gprrect.bottom = ( gprrect.top + height) -20 ;
    accessrect.bottom = (accessrect.top + height) - 20;
    gprrect.right = gprrect.left + (mycsize.cx * 10);
    accessrect.right = accessrect.left + (mycsize.cx * 10);

    mycsize.cx represents the number of pixels per character originally I multiplied by 8 figuring 8 characters per line but I ended up multiplying by 10 to get 8 characters to fit asidgprs and asidacess are 2 multiline edit controls in the Dialog I ended doing a lot tweeking wit this to get it to the right size

    R Offline
    R Offline
    Rick York
    wrote on last edited by
    #4

    Is there a reason you need to use multi-line edit controls of a fixed width? It seems like an array of single line edit controls might do what you need and it is easier to limit the length of data in them.

    F 1 Reply Last reply
    0
    • R Rick York

      Is there a reason you need to use multi-line edit controls of a fixed width? It seems like an array of single line edit controls might do what you need and it is easier to limit the length of data in them.

      F Offline
      F Offline
      ForNow
      wrote on last edited by
      #5

      If they are all adjacent to each other they look like multi line ?

      1 Reply Last reply
      0
      • F ForNow

        Hi I want to limit the number of characters on a line in a multiline edit control I figured I would do CEdit::linelength and divide that by rect.right From getclientrect that would get me the number of pixels per character I would then multiply it by the number of characters I want on a line however Cedit:Linelength return zero my edit control is declared CEdit mycontrol I know under the covers it does a SendMessage EM_LINELENGTH Is there a issue that I dont have a message map The character index is 0

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #6

        This message returns the length of the existing text at that line, not the amount of space available. How many characters are in the control when you call this?

        F 1 Reply Last reply
        0
        • L Lost User

          This message returns the length of the existing text at that line, not the amount of space available. How many characters are in the control when you call this?

          F Offline
          F Offline
          ForNow
          wrote on last edited by
          #7

          Thanks that’s it I wanted to calculate the number of characters the control can hold on a line

          V 1 Reply Last reply
          0
          • F ForNow

            Thanks that’s it I wanted to calculate the number of characters the control can hold on a line

            V Offline
            V Offline
            Victor Nijegorodov
            wrote on last edited by
            #8

            ForNow wrote:

            I wanted to calculate the number of characters the control can hold on a line

            It depends on the font your control is currently using.

            F 1 Reply Last reply
            0
            • V Victor Nijegorodov

              ForNow wrote:

              I wanted to calculate the number of characters the control can hold on a line

              It depends on the font your control is currently using.

              F Offline
              F Offline
              ForNow
              wrote on last edited by
              #9

              using the current font

              V 1 Reply Last reply
              0
              • F ForNow

                using the current font

                V Offline
                V Offline
                Victor Nijegorodov
                wrote on last edited by
                #10

                If your current font is a "proportional" one (like Arial, Times New, ...) then it is not possible to calculate the number of characters in a line in a common case. It will always depend of the text itself. Example: the text "WWW" needs much more pixels than "111". But for non-proportional fonts (like Courier New) both need the same number of pixels.

                F 1 Reply Last reply
                0
                • V Victor Nijegorodov

                  If your current font is a "proportional" one (like Arial, Times New, ...) then it is not possible to calculate the number of characters in a line in a common case. It will always depend of the text itself. Example: the text "WWW" needs much more pixels than "111". But for non-proportional fonts (like Courier New) both need the same number of pixels.

                  F Offline
                  F Offline
                  ForNow
                  wrote on last edited by
                  #11

                  I understand that this is the font statement from resource file dialog definition "FONT 8, "MS Shell Dlg", 400, 0, 0x1" I basically editing for hex characters so my GetTTextExtent string is "0123456789ABCDEF" these characters seem like the size even without a Font like courier new

                  L 1 Reply Last reply
                  0
                  • F ForNow

                    Hi I want to limit the number of characters on a line in a multiline edit control I figured I would do CEdit::linelength and divide that by rect.right From getclientrect that would get me the number of pixels per character I would then multiply it by the number of characters I want on a line however Cedit:Linelength return zero my edit control is declared CEdit mycontrol I know under the covers it does a SendMessage EM_LINELENGTH Is there a issue that I dont have a message map The character index is 0

                    D Offline
                    D Offline
                    David Crow
                    wrote on last edited by
                    #12

                    Have you considered deriving your own class from CEdit, something like:

                    class MyCustomEdit : public CEdit
                    {
                    }

                    Then as each character is typed into the control but before the control is updated, figure out what line the cursor is on (I haven't used MFC in a few years so I'm not sure what these two messages would be). If there is room, let the character through, otherwise not.

                    "One man's wage rise is another man's price increase." - Harold Wilson

                    "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                    "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

                    F 2 Replies Last reply
                    0
                    • D David Crow

                      Have you considered deriving your own class from CEdit, something like:

                      class MyCustomEdit : public CEdit
                      {
                      }

                      Then as each character is typed into the control but before the control is updated, figure out what line the cursor is on (I haven't used MFC in a few years so I'm not sure what these two messages would be). If there is room, let the character through, otherwise not.

                      "One man's wage rise is another man's price increase." - Harold Wilson

                      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                      "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

                      F Offline
                      F Offline
                      ForNow
                      wrote on last edited by
                      #13

                      probably WM_CHAR and wparam is the keystroke truth that would also save me time on the editing as I can see if it is a valid hex character was entered rather then do GetWindowText to read the entire control Thanks

                      1 Reply Last reply
                      0
                      • F ForNow

                        I understand that this is the font statement from resource file dialog definition "FONT 8, "MS Shell Dlg", 400, 0, 0x1" I basically editing for hex characters so my GetTTextExtent string is "0123456789ABCDEF" these characters seem like the size even without a Font like courier new

                        L Offline
                        L Offline
                        Lost User
                        wrote on last edited by
                        #14

                        That's a proportional font, a 1 will take far less space than an E. If spacing is important then you should use a fixed font in your edit control.

                        1 Reply Last reply
                        0
                        • D David Crow

                          Have you considered deriving your own class from CEdit, something like:

                          class MyCustomEdit : public CEdit
                          {
                          }

                          Then as each character is typed into the control but before the control is updated, figure out what line the cursor is on (I haven't used MFC in a few years so I'm not sure what these two messages would be). If there is room, let the character through, otherwise not.

                          "One man's wage rise is another man's price increase." - Harold Wilson

                          "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                          "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

                          F Offline
                          F Offline
                          ForNow
                          wrote on last edited by
                          #15

                          This class may provide all the functionality of a DDV macro

                          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