CRichEditCtrl in a dialog box
Randy Sales -- rsc@halcyon.com
Tuesday, September 10, 1996
Environment: MSVC 4.1, NT 3.51
BTW, thanks Mike B. for your recent answer regarding CopyElements
helper function. I had not started using 4.2 yet and should
have look there first. Your answer was, as usual, clear,
consise and humbling.
I am attempting to use a CRichEditCtrl as part of a dialog box.
I created the dialog template using the Developer Studio and
then added a member variable for the edit control. I then
went into the code and made the CEdit into a CRichEditCtrl.
Then, in my OnInitDialog I make calls againt the member
variable like this:
m_CRichEditCtrl.SetSelectionCharFormat(cf);
Based on the contents of the cf structure, these calls should
change the color of any subsequently added text. The calls
succeed with no errors but the text color is unchanged. The
same code works fine if I create the rich edit control manually
using Create, but then I must also manually place the control.
This must be a common use of the CRichEditCtrl, but I can't seem
to get it to work. Even if I call SubclassDlgItem() on the rich
edit control like this:
m_CRichEditCtrl.SubclassDlgItem(IDC_EDIT1, this);
it seems to make no difference. I searched the MFC archives
for a solution and came across an entry that suggested calling
InitCommonControls() and LoadLibrary(_T("RICHED32.DLL")) from
the application's InitInstance(). Also doesn't seem to help.
I don't think this matters, but this is all being done from
a COM object instantiated by a DLL inproc server, just incase
this has any bearing on the problem.
Thanks,
Randy Sales
--
RS Consulting
1521 1/2 Cedar Street
Everett, WA 98201
Phone 206-259-1056
Fax 206-259-1315
email rsc@halcyon.com
Erik Funkenbusch -- chucks@isd.net
Wednesday, September 11, 1996
[Mini-digest: 3 responses]
I believe your problem stems from your Dialog resource. By adding an edit
control to the Dialog resource, when the Dialog is created it will create
an edit control, not a RichEdit. I do not believe resources currently
support rich edit functionality.
You will need to create the control manually.
----------
> From: Randy Sales
> To: mfc-l@netcom.com
> Subject: CRichEditCtrl in a dialog box
> Date: Tuesday, September 10, 1996 9:08 AM
>
> Environment: MSVC 4.1, NT 3.51
>
> BTW, thanks Mike B. for your recent answer regarding CopyElements
> helper function. I had not started using 4.2 yet and should
> have look there first. Your answer was, as usual, clear,
> consise and humbling.
>
> I am attempting to use a CRichEditCtrl as part of a dialog box.
> I created the dialog template using the Developer Studio and
> then added a member variable for the edit control. I then
> went into the code and made the CEdit into a CRichEditCtrl.
> Then, in my OnInitDialog I make calls againt the member
> variable like this:
>
> m_CRichEditCtrl.SetSelectionCharFormat(cf);
>
> Based on the contents of the cf structure, these calls should
> change the color of any subsequently added text. The calls
> succeed with no errors but the text color is unchanged. The
> same code works fine if I create the rich edit control manually
> using Create, but then I must also manually place the control.
> This must be a common use of the CRichEditCtrl, but I can't seem
> to get it to work. Even if I call SubclassDlgItem() on the rich
> edit control like this:
>
> m_CRichEditCtrl.SubclassDlgItem(IDC_EDIT1, this);
>
> it seems to make no difference. I searched the MFC archives
> for a solution and came across an entry that suggested calling
> InitCommonControls() and LoadLibrary(_T("RICHED32.DLL")) from
> the application's InitInstance(). Also doesn't seem to help.
>
> I don't think this matters, but this is all being done from
> a COM object instantiated by a DLL inproc server, just incase
> this has any bearing on the problem.
>
> Thanks,
> Randy Sales
>
> --
> RS Consulting
> 1521 1/2 Cedar Street
> Everett, WA 98201
>
> Phone 206-259-1056
> Fax 206-259-1315
> email rsc@halcyon.com
-----From: Ed Ball
It sounds like you are trying to subclass an edit control into a rich
edit control, but since they are two completely different controls, that
is impossible. One way to solve the problem is to create a rich edit
control with the same flags and dimensions and Z-order as the edit
control and then destroy the edit control (I've seen sample code for
this method somewhere...). Another way is to put a "custom control" in
the dialog template instead of an edit control, specifying class
"RichEdit" and the appropriate 32-bit style (you'll have to look at the
values of the style constants in winuser.h & richedit.h and bitwise-OR
them yourself) -- then subclassing will work as in your example. (You
might also have to call AfxOleInit in InitInstance for the latter
solution; I'm not sure.)
- Ed
-----From: Yury Peskin
First, the RichEdit Box does not exist in the component galley, what you are
inserting is a normal CEdit. With this CEdit, set the properties you want
and then:
// Grab the rect and the style of the CEdit Ctrl
DWORD dwStyle;
CRect rectRichEdit;
CWnd *pCtl = GetDlgItem(IDC_EDIT);
dwStyle = GetWindowLong(pCtl->m_hWnd, GWL_STYLE);
pCtl->GetWindowRect(&rectRichEdit);
ScreenToClient(&rectRichEdit);
pCtl->DestroyWindow();
// Create the Rich edit
m_RichEdit.Create(dwStyle, rectRichEdit,this,IDC_EDIT);
// m_RichEdit is a member of CFormView Good Luck.
This answer came from one of the news groups and should be attributed to
wagner@ma.ultranet.com (Wagner Alcocer)
pjn -- pjn@indigo.ie
Monday, September 16, 1996
On Tue, 10 Sep 1996 15:08:43 +0100, you wrote:
>Environment: MSVC 4.1, NT 3.51
>
>BTW, thanks Mike B. for your recent answer regarding CopyElements
>helper function. I had not started using 4.2 yet and should
>have look there first. Your answer was, as usual, clear,
>consise and humbling.
>
>I am attempting to use a CRichEditCtrl as part of a dialog box.
>I created the dialog template using the Developer Studio and
>then added a member variable for the edit control. I then
>went into the code and made the CEdit into a CRichEditCtrl.
>Then, in my OnInitDialog I make calls againt the member
>variable like this:
>
> m_CRichEditCtrl.SetSelectionCharFormat(cf);
>
>Based on the contents of the cf structure, these calls should
>change the color of any subsequently added text. The calls
>succeed with no errors but the text color is unchanged. The
>same code works fine if I create the rich edit control manually
>using Create, but then I must also manually place the control.
>This must be a common use of the CRichEditCtrl, but I can't seem
>to get it to work. Even if I call SubclassDlgItem() on the rich
>edit control like this:
>
> m_CRichEditCtrl.SubclassDlgItem(IDC_EDIT1, this);
>
>it seems to make no difference. I searched the MFC archives
>for a solution and came across an entry that suggested calling
>InitCommonControls() and LoadLibrary(_T("RICHED32.DLL")) from
>the application's InitInstance(). Also doesn't seem to help.
>
>I don't think this matters, but this is all being done from
>a COM object instantiated by a DLL inproc server, just incase
>this has any bearing on the problem.
>
>Thanks,
>Randy Sales
>
>--
>RS Consulting
>1521 1/2 Cedar Street
>Everett, WA 98201
>
>Phone 206-259-1056
>Fax 206-259-1315
>email rsc@halcyon.com
>
You might want to try SetDefaultCharFormat in preference to
SetSelectionCharFormat. This should do the trick for you.
'''
@ @
+========================ooO-(_)-Ooo=================================+
| PJ Naughter |
| |
| Software Developer Email: pjn@indigo.ie |
| Softech Telecom Tel: +353-1-2958384 |
| Fax: +353-1-2956290 |
| Author of DTime - A Collection URL: http://indigo.ie/~pjn |
| of Date & Time classes for MFC |
| |
| Addr: 7 Woodford, Brewery Road, Stillorgan, |
| Blackrock, Co. Dublin, Republic of Ireland |
+====================================================================+
| Вернуться в корень Архива
|