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

    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