
๐ฅ๏ธ C++ MFC ํ๋ก๊ทธ๋๋ฐ <ํ ์คํธ ์ปจํธ๋กค ํธ>
Static Text (ํ ์คํธ ์ปจํธ๋กค)์ ์ถ๊ฐํด์ ํฐํธ, ์์ ๋ฑ์ ์กฐ์ํด๋ณด๊ฒ ์ต๋๋ค.
โ VS 2022 ํ๊ฒฝ์์ ์งํ๋์์ต๋๋ค โ
๋ฆฌ์์ค๋ทฐ์ ๋ค์ด๊ฐ์ Static Text๋ฅผ ๋ค์ด์ผ๋ก๊ทธ์ ๋ฃ์ด ์ฃผ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ID๋ฅผ IDC_STATIC_TEST_TEXT๋ก ๋ณ๊ฒฝํด์ฃผ์์ต๋๋ค.

ํ๋จ์ ์ต์ ์์ ๊ธ์์ ์ข์ฐ ์ ๋ ฌ ๋ฑ์ ์ต์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
๋ค์ด์ผ๋ก๊ทธ๋ฅผ ์ผ๋ณด๋ฉด ๊ธ์๊ฐ ์ ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.

์ฐ์ ์ปจํธ๋กค์ ๋ณ์๋ก ๋ง๋ค์ด ์ฃผ๊ฒ ์ต๋๋ค.
๋ฆฌ์์ค๋ทฐ์์ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ํจ ๋ค์ ์ปจํธ๋กค์ ์ฐํด๋ฆญํด ๋ณ์ ์ถ๊ฐ๋ฅผ ํด์ฃผ์ธ์.

์ปจํธ๋กค์ด ๋ฐฐ์น๋ ๋ค์ด์ผ๋ก๊ทธ์ ํด๋์ค์ธ์ง ํ์ธํ๊ณ ,
๋ณ์ํ์์ด CStatic์ธ์ง ํ์ธํด์ฃผ์ธ์.
๊ทธ๋ฆฌ๊ณ ์ด๋ฆ ์ง์ด์ฃผ๊ณ ๋ง์นจ.

๊ทธ๋ฌ๋ฉด ํค๋์ ๋ณ์๊ฐ ์ถ๊ฐ๋จ๊ณผ ๋์์ ์์ค์ฝ๋์ ๋ณ์๋ช
๊ณผ ID๊ฐ ๋ฐ์ธ๋ฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

์ปจํธ๋กค์ ํฐํธ๋ฅผ ์ค์ ํ๊ธฐ ์ํด์ CFont ์๋ฃํ์ ํฐํธ ๊ฐ์ฒด๋ฅผ ๋ฉค๋ฒ๋ก ์ ์ธํด์ผ ํฉ๋๋ค.

ํฐํธ๋ฅผ ๊ฐ์ฒด๋ก ์ง์ญ๋ณ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์ ํจ์ ์ข
๋ฃ์ ํจ๊ป
ํฐํธ ๊ฐ์ฒด๊ฐ ํ๊ดด๋์ด์ ํฐํธ๊ฐ ์ ์ง๋์ง ์์ต๋๋ค.
๊ทธ๋์ ๋ฉค๋ฒ๋ก์ ์ ์ธ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ค์ด์ผ๋ก๊ทธ์ ์ด๊ธฐํ ํจ์์ธ OnInitDialog()์์ ํฐํธ๋ฅผ ์ค์ ํ๊ณ ์ ์ฉํ๊ฒ ์ต๋๋ค.
CreateFont()๋ฅผ ์ฌ์ฉํด์ ๊ฐ๊ฐ์ ์ธ์๊ฐ์ ๋ฃ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์์.
๊ทธ๋ฆฌ๊ณ ํ
์คํธ ์ปจํธ๋กค์ SetFont()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฉํฉ๋๋ค.
BOOL TestDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// ํฐํธ ์ด๊ธฐํ
_testFont.CreateFont(
20, // ํฐํธ ํฌ๊ธฐ (๋์ด)
0, // ํญ (0์ด๋ฉด ์๋ ์ค์ )
0, // ๊ธฐ์ธ๊ธฐ ๊ฐ๋
0, // ๊ธฐ์ค์ ๊ณผ์ ๊ฐ๋
FW_BOLD, // ๊ตต๊ธฐ (FW_NORMAL, FW_BOLD ๋ฑ)
FALSE, // ์ดํค๋ฆญ์ฒด ์ฌ๋ถ
FALSE, // ๋ฐ์ค ์ฌ๋ถ
0, // ์ทจ์์ ์ฌ๋ถ
DEFAULT_CHARSET, // ๋ฌธ์ ์งํฉ
OUT_DEFAULT_PRECIS, // ์ถ๋ ฅ ์ ๋ฐ๋
CLIP_DEFAULT_PRECIS, // ํด๋ฆฌํ ์ ๋ฐ๋
DEFAULT_QUALITY, // ์ถ๋ ฅ ํ์ง
DEFAULT_PITCH | FF_SWISS, // ํจ๋ฐ๋ฆฌ์ ํ์น
_T("Arial")); // ํฐํธ ์ด๋ฆ
// Static Text ์ปจํธ๋กค์ ํฐํธ ์ ์ฉ
_testText.SetFont(&_testFont);
return TRUE; // ์ด๊ธฐํ ์๋ฃ
}
์คํํด๋ณด๋ฉด ํฐํธ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

์คํ์ค์ ํฐํธ์ ์ค์ ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ธฐ์กด์ ํฐํธ ๊ฐ์ฒด๋ฅผ ํ๊ดดํ๊ณ ,
์๋กญ๊ฒ ๋ง๋ค๋ค์ ๋ค์ ํ ๋นํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ฐ์ ํฐํธ ์ฌ์ด์ฆ๋ก ์ฌ์ฉํ ๋ณ์๋ฅผ ํ๋ ๋ง๋ค๊ฒ ์ต๋๋ค.
๋ง๋ ๋ณ์๋ฅผ CreateFont()์ 1๋ฒ์งธ ์ธ์์ธ ํฌ๊ธฐ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
int _fontSize = 20;
ํฐํธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ๊ธฐ์กด ํฐํธ๋ฅผ ์ญ์ ํ๊ณ ์ ํฐํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ํ์ต๋๋ค.
DeleteObject()๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํฐํธ ๊ฐ์ฒด๋ฅผ ํ๊ดด ํ,
์๋กญ๊ฒ CreateFont()๋ก ๋ง๋ค๊ณ ํ ๋นํด์ค๋๋ค.
๋ฒํผ์ ๋๋ฅด๋ฉด ์ฌ์ด์ฆ๋ฅผ 5ํค์ฐ๊ณ ํด๋น ๊ณผ์ ์ ์งํํด์ฃผ์์ต๋๋ค.
void TestDialog::OnBnClickedButton1()
{
_fontSize += 5;
// ๊ธฐ์กด ํฐํธ ์ญ์ ๋ฐ ์ ํฐํธ ์์ฑ
_testFont.DeleteObject();
_testFont.CreateFont(
_fontSize, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T("Arial"));
// ๋ณ๊ฒฝ๋ ํฐํธ๋ฅผ ํ
์คํธ ์ปจํธ๋กค์ ์ ์ฉ
_testText.SetFont(&_testFont);
}
์คํํด๋ณด๋ฉด ๋ฒํผ์ ๋๋ฅผ๋ ๋ง๋ค ํฐํธ ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋๋ค.
ํฐํธ๊ฐ ์ปค์ง๋ค๊ฐ ๊ฐ๋ ค์ง๋๊ฑด ์ปจํธ๋กค์ ์ฌ์ด์ฆ๋ฅผ ๋ฒ์ด๋์ ๊ทธ๋ฐ๊ฒ๋๋ค.

์ปจํธ๋กค์ ์์์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ OnCtlColor ๋ฉ์์ง์์ ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
ํด๋์ค ๋ง๋ฒ์ฌ๋ฅผ ์ผ์

ํด๋์ค ํ์ธํด์ฃผ์๊ณ ๋ฉ์์ง ํญ์์ WM_CTLCOLOR ๋ฉ์์ง๋ฅผ ์ถ๊ฐํฉ๋๋ค.

pWnd->GetDlgCtrlID()๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ์ปจํธ๋กค์ ID์ ๋น๊ตํฉ๋๋ค.
๊ทธ๋์ CBrush๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ ์ ์ฉํด์ฃผ์ด์ผ ํฉ๋๋ค.
HBRUSH TestDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
CBrush m_bgBrush;
if (pWnd->GetDlgCtrlID() == IDC_STATIC_TEST_TEXT)
{
return m_bgBrush; // ๋ธ๋ฌ์ ๋ฐํ
}
return hbr;
}
๊ธ์ ์์์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ pDC->SetTextColor() ํจ์๋ฅผ,
๊ธ์ ๋ฐฐ๊ฒฝ์์ pDC->SetBkColor()์,
์ปจํธ๋กค ๋ฐฐ๊ฒฝ์์ CreateSolidBrush()๋ฅผ ์ฌ์ฉ ํ RGB๊ฐ์ ๋ฃ์ด ์ฃผ์ด์ผ ํฉ๋๋ค.
๋นจ,์ด,ํ๋ก ์ค์ ํ ์คํํด๋ณด๋ฉด
if (pWnd->GetDlgCtrlID() == IDC_STATIC_TEST_TEXT)
{
pDC->SetTextColor(RGB(255, 0, 0)); // ํ
์คํธ ์์ ์ค์
pDC->SetBkColor(RGB(0,255,0)); // ํ
์คํธ ๋ฐฐ๊ฒฝ ์์ ์ค์
m_bgBrush.CreateSolidBrush(RGB(0,0,255)); // ์ปจํธ๋กค ๋ฐฐ๊ฒฝ ์์ ์ค์
return m_bgBrush; // ๋ฐฐ๊ฒฝ ๋ธ๋ฌ์ ๋ฐํ
}
์ ์ฉ์ด ๋์ง ์์ต๋๋ค.
์ด๋ ํฐํธ์ ๊ฐ์ด ๋ธ๋ฌ์ฌ ๊ฐ์ฒด๊ฐ ํ๊ดด๋๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฉ์์ง ๋ด์์ ์ ์ธํ CBrush m_bgBrush;๋ฅผ ๋ฉค๋ฒ๋ก ๋ณ๊ฒฝํ๊ณ
๋ค์ ์คํํด์ฃผ๋ฉด ํ
์คํธ์ ์์์ด ์ ์ฉ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

Static Text (ํ
์คํธ ์ปจํธ๋กค)์ ๋ค์ํ ์ค์ ์ ๋ํด ์์ ๋ณด์์ต๋๋ค.
๋ค์ ํฌ์คํ
์์๋ ๋ฆฌ์คํธ๋ฐ์ค ์ปจํธ๋กค์ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.