Re: Proper way to declare a static const object in a class
Stick wrote:
Hi,
Basically, I am creating a class that draws a single line of GDI+ text.
Right now I'm doing it like this:
void DisplayLine::Draw(Graphics *pGraphics)
{
if(pGraphics != NULL)
{
Font font_big (L"FIXEDSYS", 18, FontStyleBold, UnitPixel);
Font font_small (L"FIXEDSYS", 12, FontStyleBold, UnitPixel);
StringFormat sFormat = new StringFormat();
SolidBrush grnbrush(Color((int)(brightness * 2.55), textRed,
textGreen, textBlue));
sFormat.SetAlignment(textAlign);
sFormat.SetLineAlignment(lineAlign);
wchar_t buf[20+1] = { 0 };
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lineText.c_str(),
(int)lineText.length(), buf, 20);
pGraphics->DrawString(buf, -1, &font_big, lineRect, &sFormat,
&grnbrush);
}
}
This works fine, but given that the Gdiplus::SolidBrush, for example, is
going to be the same used by all instances I'd really like to make it a
static variable in the class.
What would the class declaration (and constructor) for this look like? I
had problems because it is a constant. I really want to do the same with the
fonts.
It should be like that:
// ----- header file -----
class DisplayLine
{
// ....
// declaration of static member
static const SolidBrush s_solidBrush;
};
// -----------------------
// ------ source file -------
// definition of static member
const SolidBrush DisplayLine::s_solidBrush(/*whatever*/);
// --------------------------
In the same manner you declare and define `Font' objects.
HTH
Alex