getting the rectangle occupied by line in CRichEditCtrl

hi group,

i am able to get the line number from the caret position.

with something like this
CRichEditCtrl m_rich;
long i, j;
CPoint p1, p2, pCaret;
m_rich.GetSel (i, j);

p1 = m_rich.GetCharPos (i);
p2 = m_rich.GetCharPos (j);
pCaret = m_rich.GetCaretPos ();

int m_CurLine = m_rich.LineFromChar (i) + 1;
int m_CurColumn = i - m_rich.LineIndex (m_CurLine-1) + 1;



but now i want to get the rectangle of this line  for CRichEditCtrl
how i can do this?
because i read on codeproject a highlighting demo
but it is for CEditView

void CHiliteEditView::GetLineRect(int nLine, LPRECT lpRect) const
{
        if (nLine == 0)		// the first line;
	{
		GetEditCtrl().GetRect(lpRect);
		lpRect->bottom = lpRect->top + m_sizeChar.cy;
	}
	else if (nLine == GetEditCtrl().GetLineCount() - 1)		// the last line
	{
		// we get previous line's rect, then offset it by one line height.
		int nLineIndex = GetEditCtrl().LineIndex(nLine - 1);
		CPoint ptPos = GetEditCtrl().PosFromChar(nLineIndex);
		GetEditCtrl().GetRect(lpRect);
		lpRect->top = ptPos.y;
		lpRect->bottom = lpRect->top + m_sizeChar.cy;
		OffsetRect(lpRect, 0, m_sizeChar.cy);
	}
	else	// lines between first and last
	{
		int nLineIndex = GetEditCtrl().LineIndex(nLine);
		CPoint ptPos = GetEditCtrl().PosFromChar(nLineIndex);
		GetEditCtrl().GetRect(lpRect);
		lpRect->top = ptPos.y;
		lpRect->bottom = lpRect->top + m_sizeChar.cy;
	}
}

but PosFromChar is not supported by CRichEditCtrl because it gives
error "not a member function"

so how to do this


Thanks and Regards
Harshal shete

0
6/1/2006 12:51:04 PM
vc.mfc 33608 articles. 0 followers. Follow

2 Replies
1191 Views

Similar Articles

[PageSpeed] 23

Where do you get this error, at runtime or when you compile the project.
Does GetCharPos work? (they both give the same value)

Note that the code below assumes that you are using the same size character
all throught the edit control.  If you change font name or font size in the
middle of the edit control then it will not work correctly.

AliR.



<harshalshete@gmail.com> wrote in message
news:1149166264.715336.315040@h76g2000cwa.googlegroups.com...
> hi group,
>
> i am able to get the line number from the caret position.
>
> with something like this
> CRichEditCtrl m_rich;
> long i, j;
> CPoint p1, p2, pCaret;
> m_rich.GetSel (i, j);
>
> p1 = m_rich.GetCharPos (i);
> p2 = m_rich.GetCharPos (j);
> pCaret = m_rich.GetCaretPos ();
>
> int m_CurLine = m_rich.LineFromChar (i) + 1;
> int m_CurColumn = i - m_rich.LineIndex (m_CurLine-1) + 1;
>
>
>
> but now i want to get the rectangle of this line  for CRichEditCtrl
> how i can do this?
> because i read on codeproject a highlighting demo
> but it is for CEditView
>
> void CHiliteEditView::GetLineRect(int nLine, LPRECT lpRect) const
> {
>         if (nLine == 0) // the first line;
> {
> GetEditCtrl().GetRect(lpRect);
> lpRect->bottom = lpRect->top + m_sizeChar.cy;
> }
> else if (nLine == GetEditCtrl().GetLineCount() - 1) // the last line
> {
> // we get previous line's rect, then offset it by one line height.
> int nLineIndex = GetEditCtrl().LineIndex(nLine - 1);
> CPoint ptPos = GetEditCtrl().PosFromChar(nLineIndex);
> GetEditCtrl().GetRect(lpRect);
> lpRect->top = ptPos.y;
> lpRect->bottom = lpRect->top + m_sizeChar.cy;
> OffsetRect(lpRect, 0, m_sizeChar.cy);
> }
> else // lines between first and last
> {
> int nLineIndex = GetEditCtrl().LineIndex(nLine);
> CPoint ptPos = GetEditCtrl().PosFromChar(nLineIndex);
> GetEditCtrl().GetRect(lpRect);
> lpRect->top = ptPos.y;
> lpRect->bottom = lpRect->top + m_sizeChar.cy;
> }
> }
>
> but PosFromChar is not supported by CRichEditCtrl because it gives
> error "not a member function"
>
> so how to do this
>
>
> Thanks and Regards
> Harshal shete
>


0
AliR3470 (3235)
6/1/2006 1:34:14 PM
hi AliR,

sorry for replying late,

i get this error at compile time.
as CharFromPos is not member function of CRichEditCtrl
and in MSDN it is shown as member function

steps i have followed
1)in my view class function HighLightLine i am i am changing my
   caret position to specified line.
2)then i am calling drawcaret function
  which will first of all try to get the rect associated with the line
  but because i am using CRichEditCtrl i am not able to get the rect of
the line

 next thing i want to do is by geting the rect i want create something
that will highlight it

and i am not changing the font of the rich edit in middle of the
application
so i think it won't be a problem.will it be?

so the code is as below.


i have view class as follow's
class CMyAppView : public CView
{
  public:
         CRichEditCtrl m_rich;
         .
         .//all other functions
         // then i have function
        void HighLightLine(CString Lineno);
        void DrawCaret();

}

void CMyAppView::HighLightLine(CString lineno)
{
      int nBegin;
      int currentLineNumber;
      int lineNumber = atoi( (LPCTSTR) lineno);
      lineNumber -= 1;
      if ((nBegin=m_rich.LineIndex(lineNumber))!= VAL_NEGATIVE_ONE)
	{
		currentLineNumber = m_rich.GetFirstVisibleLine();
		m_rich.LineScroll(lineNumber - currentLineNumber-2);
		int nEnd = m_rich.LineIndex( lineNumber + VAL_ONE );
		m_rich.SetSel(nBegin, nBegin);

		// To check line number means where the caret is present
	   long i, j;
	   CPoint p1, p2, pCaret;
	   m_rich.GetSel (i, j);
	   p1 = m_rich.GetCharPos (i);
	   p2 = m_rich.GetCharPos (j);
	   pCaret = m_rich.GetCaretPos ();
           int m_CurLine = m_rich.LineFromChar (i) + 1;//current line
of caret
	   int m_CurColumn = i - m_rich.LineIndex (m_CurLine-1) + 1;
             //the above thing is just for checking the caret position
is right
            //or not
           DrawCaretLine(m_CurLine);//call draw caret line with this
lineno.
}

void CMyAppView::DrawCaretLine(CString lineno)
{
        CRect rect;
	GetLineRect(m_nCaretLine, rect);

}

//this is for EditView i mean work well for CEditView Derived class
//i want to substitute it with CRichEditCtrl related code
void CMyAppView::GetLineRect(CString lineno)
{
        if (nLine == 0)		// the first line;
	{
		GetEditCtrl().GetRect(lpRect);
		lpRect->bottom = lpRect->top + m_sizeChar.cy;
	}
	else if (nLine == GetEditCtrl().GetLineCount() - 1)		// the last line
	{
		// we get previous line's rect, then offset it by one line height.
		int nLineIndex = GetEditCtrl().LineIndex(nLine - 1);
		CPoint ptPos = GetEditCtrl().PosFromChar(nLineIndex);
		GetEditCtrl().GetRect(lpRect);
		lpRect->top = ptPos.y;
		lpRect->bottom = lpRect->top + m_sizeChar.cy;
		OffsetRect(lpRect, 0, m_sizeChar.cy);
	}
	else	// lines between first and last
	{
		int nLineIndex = GetEditCtrl().LineIndex(nLine);
		CPoint ptPos = GetEditCtrl().PosFromChar(nLineIndex);
		GetEditCtrl().GetRect(lpRect);
		lpRect->top = ptPos.y;
		lpRect->bottom = lpRect->to p + m_sizeChar.cy;
	}
}



HOW TO DO IT?
if you can please tell me.
it will be helpfull for me..
if any suggetstion please tell me
Thanks and regards
Harshal shete

0
6/5/2006 8:36:34 AM
Reply:

Similar Artilces:

Scatter plot and line graph combination
Hi I need to create a scatter plot of three ranges of data and then have three lines for three different ranges. Is this possible? I need to depict three classes of item and straight lines that separate them. The items are plotted on the graph using a scatterplot as three separate ranges. The lines (which represent mathematical functions) are to be plotted as line graphs. This is to depict a neural network classification problem. I have tried editing the custom types by taking a copy of one that is similar and then trying to modify it. Unfortulately only one of the ranges has X ...

i get error 404 not found when trying to download
I'm trying to download nokia pc suite to windows xp to upload gallery onto the computer but get error message404 not found - how can i download this pc suite please -- Krysy Albutt Krysy Albutt wrote: > I'm trying to download nokia pc suite to windows xp to upload gallery > onto the computer but get error message404 not found - how can i > download this pc suite please Care to enlighten us how this pertains to: - 1) Microsoft 2) Publisher 3) Windows If you're having problems downloading from the *NOKIA* site where do you think you should be directing your ...

Exporting Excel file into Notepad with column & row lines
I cannot get the horizontal & vertical lines to show up in my notepad file. Help Please. Notepad looks at text. Text doesn't have horizontal & vertical lines. You can, of course, use underscore characters _ to look like a horizontal line, and pipe characters | to look like a vertical line. -- David Biddulph "JIVL" <JIVL@discussions.microsoft.com> wrote in message news:232B20B7-2719-47ED-A2C3-5673B8FCA925@microsoft.com... >I cannot get the horizontal & vertical lines to show up in my notepad file. > Help Please. ...

How to get Calendar to send me reminders
I have changed my e-mail address but for some reason I cannot get Calendar to send reminders to my new address - I think I have carried out all that is necessary to effect the changover but I am not getting reminders sent. Can anyone help please? Is the Calendar Live ID based and accessible at Calendar.live.com ? -- ....winston ms-mvp mail "Dabardevon" wrote in message = news:FDC2B3B2-EDE4-41B1-BFC4-C0F9ED59CFB9@microsoft.com... I have changed my e-mail address but for some reason I cannot get = Calendar to send reminders to my new address - I think I have...

Some recipients get the attachment, some get winmail.dat
This one has me baffled. We are using Exchange 2000 and Outlook 2000 and have been for 8 months. No previous problems with attachments (.doc, .xls, .jpg). About 2 weeks ago, we started hearing from certain recipients that the attachment wasn't arriving; instead they were getting an unreadable file called winmail.dat. MS says that this is because the sender is using Rich Text to format the email. We have changed the senders to use Plain Text and still have the same problem. If the email is sent to several recipients, some will get the attachment fine, some will not. This didn'...

How to get the CScrollBar's Handle in CTreeCtrl?
Hey,All: I thought I have a problem when I trid to get the CScrollBar's handle from my CTreeCtrl extended handle. Can anybody tell me whether I can get the handle of the CScrollBar from the CTreeCtrl? Thanks in advance! Carl :-| Carl wrote: > Hey,All: > > I thought I have a problem when I trid to get the CScrollBar's handle from > my CTreeCtrl extended handle. > Can anybody tell me whether I can get the handle of the CScrollBar from the > CTreeCtrl? > > Thanks in advance! > Carl > :-| > > Sorry, it is not that simple. The scroll bars that...

A Crystal Beginner
I am using Crystal 9.2.4.77 and have loaded the Crystal enhancements. Now I want to do against the CRM database. What do I do? I thought I would create a data source to the CRM SQLserver, which I did, then connect to it through Crystal Reports. That works, but when I drill down on the AAA_MSCRM database to choose my tables, it shows me dbo as the only option (where did this come from??) and under that are just a few generic tables. No CRM tables. Something's not quite right. What am I missing? file - log on to aps server "KBLawson" <klawson@aetinc.com> wrote in ...

Cannot get fast forward or fast reverse to work with WMP 11
I am running Vista Home Premium on a HP G 217-EM Notebook which comes pre-installed with Windows Media Player 11. When I play cds and try to fast forward or fast reverse by keeping the fast forward or fast reverse buttons constantly depressed nothing happens. Why is this, and can anyone come up with a solution? Many thanks This doesn't work on my system either, so it's probably just a limitation of WMP. Fast forward and fast reverse should work fine when you rip the CD's to MP3 or WMA files, and play these files instead. Regards -- Tim De Baets http://www....

Get paid while you get online!!
I found a great Internet company - Cashfiesta.com - that has created a product everyone can benefit from. They pay you while you work or play on your computer. All you need to do is keep their software - the FiestaBar=99 - active while you are online. They even pay you when your friends are using their computers. Unlike other companies, Cashfiesta gives you control over how much money you earn. They have an individual payrate based on the number of Special Offers you sign up for. As some of these offers are free, you can increase your payrate up to 33 times without spending a penny. It's...

Spreadsheet getting corrupted
Hello All: I have a relatively large spreadsheet. I am getting errors (see after my signature line). What could be causing these errors? Is it that the spreadsheet is too large? Thanks Deguza -------------------------------------------------------- Microsoft Office Excel File Repair Log Errors were detected in file 'C:\Documents and Settings\deguza\My Documents\sales\Sales_2006_2007.xls' The following is a list of repairs: Global PivotTable report information was repaired due to integrity problems. Global PivotTable report information was repaired due to integrity problems. Glo...

Can't get auto-update (update) to install
Version: 2008 Operating System: Mac OS X 10.4 (Tiger) Processor: Power PC I've been trying to manually check for updates to Word 2008, and I get a &quot;critical update&quot; notice, asking me to install auto-update. When I try to install it, I cannot. It just keeps repeating the attempt, in an &quot;endless loop.&quot; What to do? <br> Thank you. ...

Reg getting the next IV Document Number field !
Hi, I am creating a window in dexterity similar to the item transaction entry window (Transactions>Inventory> Transaction Entry). In the Item transaction Entry window, the Document number field defaults to the next document number when we move the focus to that field. I wanted to know if there is any function , or table that i can access to get the next document number in the new window that i am creating. Thanks, swetha -- swetha >In the Item transaction Entry window, the Document number field defaults to the next document number when we move the focus to that field.< T...

How do I get??
Sorry if this seems a fairly easy question to you guys. I have a spreadsheet and I need to get the current system time into a cell. The format of the time is hh:mm am/pm. Any assistance would be most helpful. Hi try =INT(NOW()) in this cell and format is to your needs -- Regards Frank Kabel Frankfurt, Germany PM wrote: > Sorry if this seems a fairly easy question to you guys. > > I have a spreadsheet and I need to get the current system time into a > cell. The format of the time is hh:mm am/pm. > > Any assistance would be most helpful. PM, in the cell you want pu...

Get notified when Out of Office is on
I am using Outlook 2007. With 2003, when returning from leave, I used to get a notification that the Outlook out of office was still on and asking me if I wanted to switch it off. This reminder no longer appears with 2007. How can I switch this setting on so that I get the notification? "Mary Ann" <MaryAnn@discussions.microsoft.com> wrote in message news:ED5533A7-D0EA-41B8-B1A0-A9D15FB6FD98@microsoft.com... >I am using Outlook 2007. With 2003, when returning from leave, I used to get > a notification that the Outlook out of office was still on and asking me ...

Can the Item Description wrap to multiple lines on an invoice?
We have some long item descriptions (up to the 100 character limit), and we were trying to figure out how to get them to print on an invoice. If I spread the field all out on a single line, it's too long to fit on the document. If I create a box that's several lines tall, it does partially wrap, but it doesn't print the full description - it cuts off after around the 60th character or so. Has anyone successfully wrapped an item description on an invoice? -- Bud Cool, Accounting System Manager HDA, Inc. Hazelwood, MO GP 9.0, SP2 I think you'll need to parse it and then...

Getting Control ID in Active X control
GetWindowLong return 0. You need to call GetDlgCtrlID from outside the activex control as the function available within the control returns an arbitrary value of zero. Take a look at this article http://xendra.ens.uabc.mx/~sinfante/loo/libro/ch17_4.htm particularly the paragraph preceeding the title "MFC and Ambient Properties". This really begs the question why you want the ID in the first place as activex controls have to be fully self containing to operate - with a few exceptions where sibling controls need to be able to locate each other. - Tim "ytv" <...

over VPN, it gets stuck when sending outgoing email
When I use VPN to connect to work from home, the outlook can not finish sending outgoing emails. The progress bar moves to the end but then stops there forever. It can never finish. The receiving of new incoming emails work fine. All other network functionality works, e.g. internet browsing, telnet, ftp, etc, all work fine. My system is win2k. I use linksys wireless DSL router. I'd appreciate any hint! Are you using Exchange server? I'd set up your mail profile to prompt you to work offline or online - when using VPN, work offline with scheduled syncs. If not using exchange, pos...

Get photos from a camera
I have an asp.net intranet application that I need to upload 1 or all photos from a digital camera at a PC workstation. We are using DataGrids and GridViews to display them on the web once they are uploaded but need something at the client. I assume I need some sort of ActiveX process or something. Has anyone run into a solution for this need? Thanks. -- David "DavidC" <dlchase@lifetimeinc.com> wrote in message news:2B061F4F-B548-4AA4-96FA-2F87383192D2@microsoft.com... > I have an asp.net intranet application that I need to upload 1 or all > photos ...

Freeze panes / vertical lines
Hello, I just used "Freeze Panes". Is there a way to make the vertical black line invisible? Rgds, Thore Hi AFAIK this is not possible >-----Original Message----- >Hello, > >I just used "Freeze Panes". Is there a way to make the >vertical black line invisible? > >Rgds, >Thore >. > ...

how to get the format of this cell right?
When I let go: Selection.Replace " ", Replacement:="-", Lookat:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False " " is entered by means of an array: Words = Array(" ", "+", "/", "---", "--", "&") on a cell containing: 5 a I would expect to get: 5-a as a result. Unfortunately, it produces 5:00:00-AM. How can I solve this tiny but frustrating problem? best regards Pet...

how to get the pointer variable address from a dll
hi all, I have a DLL which has a output parameter LPVOID, A application calls this DLL function, the Dll responsibility is to assign a valid pointer to the lpBuffer, Till here it is OK, but once it returns to the Application this lpBuffer becomes NULL. Prototype, __declspec(dllexport) BOOL TRSTMonGetStatus(LPVOID lpBuffer) Please let me know what to do, I am stuck in this. try this __declspec(dllexport) BOOL TRSTMonGetStatus(LPVOID &lpBuffer) AliR. <karunyalakshmi@gmail.com> wrote in message news:1182179607.989434.318540@x35g2000prf.googlegroups.com... > > hi a...

How do I get my best friend back?
I NEED TO KNOW "monsterboy16" <monsterboy16@discussions.microsoft.com> wrote in message news:7918DF09-EB34-46E4-852E-8DAAC3FFF45F@microsoft.com... > I NEED TO KNOW Easy. Just lift the lid on your toilet seat and whistle. Dipshit! -- "Don't pick a fight with an old man. If he is too old to fight, he'll just kill you." Pretend that you're in a coma and unable to communicate in any way (such as posting messages in newsgroups). "monsterboy16" <monsterboy16@discussions.microsoft.com> wrote in message news...

Why do I get this?
IMCEAEX-_O=ABC_OU=CN121_CN=RECIPIENTS_CN=USER1@companyABC.com <-- why am I getting this as the FROM field from a recently upgrade user to Exchange 2003? ...

Excel Data List Gets "Stuck" -- Help
This has now happened for the second time. I have a "data list" that is around 1800 rows in size. Somcetimes, after I've filtered the data to show just a small number of rows, it gets "stuck." I I am no longer able to expand the list to show all the rows. I've gone in to all the columns and chosen "All" for all the columns and it still does not work. I know I can highight the entire list and tell it to remove the list and recreate the list, but that's a pain, and I lose some formatting. Can anyone help me? -- slobizman -----------------------...

how do you get umlauts?
I've changed the language to German but how do I get umlauts helen <helen@discussions.microsoft.com> was very recently heard to utter: > I've changed the language to German but how do I get umlauts a) Change your keyboard layout to German in Regional Settings. The umlauted letters are then where ', ;, and [ are on a standard UK keyboard (uncertain about USA) (� is where - is) or b) Use Insert > Symbol or c) Memorise the character codes. To get � for example, hold down Alt and tap 0252 on your numeric keypad, then release Alt. 0223 is �, 0246 is �, and 0228 is ...