Re: How to change to BOLD in CEdit
"skidmarks" <skidmarks@discussions.microsoft.com> wrote in message
news:C5CA21FB-2944-4E84-BEE2-7D7B09B4BDFD@microsoft.com...
I would like to change the weight or color of text in a CEdit box. When I
use
the following code, the font seems to change to the system font which
seems
'bold' but I can't restore the font (MS Sans Serif). The code below is
substantially from samples and/or MFC Programming with Visual C++ 6
unleashed
1999 (this started as a VS 6.0 project).
I'm a novice and source code and literature would be useful.
I've tried to put CFONT font in the header file (as per one of the
messages)
and I get a crash.
----------------- C O D E ------------------------------
CFont* pFont = GetFont( );
LOGFONT logfont;
pFont->GetLogFont(&logfont);
logfont.lfWeight = FW_THIN;
CFont font;
int y = EnumFontFamiliesEx((HDC)m_AB_CTL.GetHandle(), &logfont,
&EnumFontFamExProc, 0, 0);
int x = font.CreateFontIndirect(&logfont);
m_AB_CTL.SetFont(&font);
m_AB_CTL.GetDC()->SelectObject(&font);
-----------------------------------------------------
For one thing, you need to make "font" a global variable or better yet,
member data so that the CFont doesn't get destroyed when the code goes out
of scope.
For another thing, you should call SetFont() to activate the font instead of
selecting it into the DC, which won't be permanent.
Here's what I do:
CDefFont::GetDefaultFont().GetLogFont(&lf);
lf.lfWeight = FW_BOLD;
m_hFontBold = ::CreateFontIndirect ( &lf );
CFont *pFontBold = CFont::FromHandle(m_hFontBold);
GetDlgItem(IDC_STATIC_PRODUCT_NAME)->SetFont ( pFontBold, TRUE );
The CDefFont is defined as:
CFont CDefFont::s_defFont;
CFont &CDefFont::GetDefaultFont()
{
// Create if this is the first time
if (!s_defFont.GetSafeHandle())
{
// Get default dialog font
LOGFONT lfDefault;
GetObject (GetStockObject(DEFAULT_GUI_FONT), sizeof(lfDefault),
&lfDefault);
// Fix bug that DEFAULT_GUI_FONT returns "MS Shell Dlg" but on Win2K and
XP
// we really need to specify "MS Shell Dlg 2" to get the default dialog
font
OSVERSIONINFO os_ver;
os_ver.dwOSVersionInfoSize = sizeof(os_ver);
GetVersionEx (&os_ver);
if ( (os_ver.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
(os_ver.dwMajorVersion >= 5) ) // Windows NT (not Win9x), and Win2K or
later
{
if ( lstrcmpi (lfDefault.lfFaceName, "MS Shell Dlg") == 0 ) // font is
"MS Shell Dlg"
{
// Set font face to "MS Shell Dlg 2" by appending " 2":
lstrcat ( lfDefault.lfFaceName, " 2" ); // lf.lfFaceName is "MS Shell
Dlg 2"
}
}
s_defFont.CreateFontIndirect(&lfDefault);
}
return s_defFont;
}
-- David