change Font Size & Color of Rich Edit during runtime

I want to develop a dialog based application with an rich edit control, whose Font Size and Color can be changed by pressing Buttons. I use the CHARFORMAT, SetDefaultCharFormat, SetSelCharFormat, and a custom function:
Format(CHARFORMAT &cf)
{
 cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_BOLD|CFM_COLOR;
cf.dwEffects =...
cf.yHeight = ...
.
.
}

After complier it, there appears a big "I" when the rich edit get focus. Moreover, the editor does not accept any input. What's wrong with it? Or someone can tell me another way to do the task?
erin021898Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

akamalCommented:
You can use CFontDialog for font options as user click the button, here is the full code:
CFontDialog fntdlg;
if(fntdlg.DoModal()==IDOK)
{
TEXTMETRIC tm;
CClientDC dc(this);
GetTextMetrics(dc.m_hDC,&tm);
CHARFORMAT cf;
cf.cbSize=sizeof(CHARFORMAT);
cf.dwMask=CFM_BOLD|CFM_COLOR|CFM_FACE|CFM_ITALIC|CFM_SIZE|CFM_STRIKEOUT|CFM_UNDERLINE;
cf.dwEffects=0;
if(fntdlg.IsBold())cf.dwEffects=cf.dwEffects|CFE_BOLD;
if(fntdlg.IsItalic())cf.dwEffects=cf.dwEffects|CFE_ITALIC;
if(fntdlg.IsUnderline())cf.dwEffects=cf.dwEffects|CFE_UNDERLINE;
if(fntdlg.IsStrikeOut())cf.dwEffects=cf.dwEffects|CFE_STRIKEOUT;
cf.yHeight=tm.tmHeight*fntdlg.GetSize()/8;
cf.crTextColor=fntdlg.GetColor();
cf.bPitchAndFamily=fntdlg.m_cf.lpLogFont->lfPitchAndFamily;
cf.szFaceName[LF_FACESIZE]=fntdlg.m_cf.lpLogFont->lfFaceName[LF_FACESIZE];
SetCharFormat(cf);
}

I have used this code in one of my projects and it worked.
Ahmed Kamal
0
jtwine100697Commented:
Note for both of ya:  instead of typing all that code, note that there is an undocumented CFontDialog constructor that takes a CHARFORMAT structure as its first parameter.  It is prototyped like this:

CFontDialog( const CHARFORMAT& charformat, DWORD dwFlags = CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL );

   Then use the undocumented CFontDialog::GetCharFormat(...) to get the user selected CHARFORMAT.

The quickest way to do it is to the following steps (Error checking left out):

   GetSelectionCharFormat( m_cfFormat );
   pFontDlg = new CFontDialog( m_cfFormat );
   if( pFontDlg -> DoModal() == IDOK )
   {
      pFontDlg -> GetCharFormat( m_cfFormat );
      SetSelectionCharFormat( m_cfFormat );
   }

   This will NOT work with RichEdit2.0 (CHARFORMAT2 structure).

-=- James.
0
jtwine100697Commented:
Almost forgot...  If you want to have pre-set CHARFORMAT structures to apply formats with, create a little app that uses the CFontDialog stuff above, and when you get the CHARFORMAT that you want, store it someplace (file, registry, etc), and then you can use them in your application.  No need for the user to select something.

-=- James.
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

erin021898Author Commented:
I want to "visual" change the char in the edit box. When the user click the button, the user can see the change at the same time.
0
akamalCommented:
You haven't specified your request clearly. I cannot answer a question whose owner isn't making it enough clear. May be next time I will try to help you, but this time, sorry.
Ahmed
0
jtwine100697Commented:
Lemme get this straight...  You want effects similar to this:

   The user has two buttons, labeld [Big] and [Small].  When the user clicks [Big], you want the Font/Size/Color to change to the "Big" state, and when the user hits [Small], you want the Font/Size/Color to change to the "Small" state, right?

   Simple:  Pre-set two (or more) CHARFORMAT structures, store them in the registry, or right in the program, select all text in the control using "SetSel( 0, -1 )", and then apply them using "SetSelectionCharFormat( m_cfBigCharFormat )" and/or "SetSelectionCharFormat( m_cfSmallCharFormat )".

-=- James.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Fonts Typography

From novice to tech pro — start learning today.