CRichEditCtrl question
junping li -- junping@infolytica.qc.ca Friday, November 01, 1996 Environment: VC++ 4.2-flat, WinNT 4.0 Hello, I am in trouble to figure out how to make a CRichEditCtrl on a property page work properly. I made a property page using the dialog resource editor. I placed an Edit Box control on the page and used the ClassWizard to create the wrapper class and mapped the variable m_richEditControl to this Edit control. Then I manually changed the type of this variable to CRichEditCtrl. Later on, I did the following in a handler function of the page class to change the text font in the edit control: CFontDialog dlg; CHARFORMAT charFormat; if(dlg.DoModal() == IDOK) { dlg.GetCharFormat(charFormat); m_richEditControl.SetSel(0, -1); m_richEditControl.SetDefaultCharFormat(charFormat); m_richEditControl.SetSelectionCharFormat(charFormat); } Unfortunately, I found out that both SetDefaultCharFormat and SetSelectionCharFormat calls failed and hence, the text font in the edit control was not changed. Am I missing some obvious points here? How can you replace an existing CEdit control with a CRichEditCtrl to make use of the extra functionality? I looked at the WORDPAD sample and searched on the MSDN and MFC-FAQ, no answer was found. Thanks for your hints! -- Have a nice day! Junping -- Have a nice day! Junping
Michael Iles -- michaeli@dra.com Wednesday, November 06, 1996 [Mini-digest: 5 responses] > Environment: VC++ 4.2-flat, WinNT 4.0 > > Hello, > I am in trouble to figure out how to make a CRichEditCtrl on a property > page work properly. > > I made a property page using the dialog resource editor. I placed an > Edit Box control on the page and used the ClassWizard to create the wrapper > class and mapped the variable m_richEditControl to this Edit control. > Then I manually changed the type of this variable to CRichEditCtrl. > Later on, I did the following in a handler function of the page class > to change the text font in the edit control: Hi Junping, An edit control and a rich edit control are two different things. Two ways to get a rich edit control onto a dialog (or property page) are: (1) insert it as an OLE control from the component gallery, or (2) create it dynamically when you're initialising your dialog. In my opinion (2) is easier and faster. The way I do it is to put a static text control on my dialog where I want the rich edit control to be, with an ID of (for example) IDC_RICHEDIT. Then in the OnInitDialog of your dialog class, do // The IDC_RICHEDIT static text box is a placeholder for the rich edit // control CWnd* pwnd = GetDlgItem( IDC_RICHEDIT ); ASSERT( pwnd ); // Convert the screen co-ordinates to client co-ordinates CRect rect; pwnd->GetWindowRect( &rect ); ScreenToClient( &rect ); VERIFY( m_ctrlRichEdit.Create( ES_MULTILINE | ES_AUTOVSCROLL | ES_SUNKEN | ES_NOHIDESEL | WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER, rect, this, IDC_RICHEDIT ) ); That's it! Mike. -----From: "Doug Brubacher"Disclaimer: I apologize in advance in the likelihood that any or all of the following may in some one offend anyone. If you are easily offended please, stop reading now, there are lots of other MFC-L questions and responses for you to read. I'll try to refrain from any abuse here, but this clearly is not a question from an advanced or even an intermediate MFC/Windows developer and as such does not belong on this list. Just because you defined you member variable as CRichEditCtrl that doesn't mean the Window you are attached to was created with the "RichEdit" window class. You could have just as easily "manually changed the type of this variable to CRichEditCtrl" from CButton or CListBox or CScrollBar. And your surprised it doesn't work? In the words of .B ekiM, read the documentation! Start with "Rich Edit Controls" in the Win32 SDK documentation and the CreateWindowEx function (or CRichEditCtrl::Create()). Regards, Doug Brubacher DouglasB@msn.com -----From: browkl@inel.gov (Kenneth L Brown) I've noticed a similiar problem that appears to be a bug but maybe someone else could shed some light on this. When I use SetSelectionCharFormat on a selection that starts at position 0 it does nothing. If the selection starts at position 1 or greater it works fine. I had to create a work around where I checked if the selection started at 0 in which case I cleared the selection, placed the cursor at 0 and used SetDefaultCharFormat. It seems a pretty lousy way to do this but I've not found a decent answer to this yet. Anyone else? Kenneth Brown browkl@inel.gov -----From: "Michael R Thompson" You have to set the cbSize member of the CHARFORMAT structure. Mike. -----From: Dong Chen Try to pass your charFormat as the first parameter in your CFontDialog as: CFontdialog dlg(charFormat, ....); This might solve your problem.
| Вернуться в корень Архива |