[C++/MFC] ๐Ÿ–ฅ๏ธ MFC ํ”„๋กœ๊ทธ๋ž˜๋ฐ (6)

Singery00ยท2024๋…„ 11์›” 7์ผ

MFC

๋ชฉ๋ก ๋ณด๊ธฐ
6/6
post-thumbnail

๊ฐœ์š”

๐Ÿ–ฅ๏ธ C++ MFC ํ”„๋กœ๊ทธ๋ž˜๋ฐ <ํ…์ŠคํŠธ ์ปจํŠธ๋กค ํŽธ>

Static Text (ํ…์ŠคํŠธ ์ปจํŠธ๋กค)์„ ์ถ”๊ฐ€ํ•ด์„œ ํฐํŠธ, ์ƒ‰์ƒ ๋“ฑ์„ ์กฐ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โ— VS 2022 ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค โ—


๋ณธ๋ก 


ํ…์ŠคํŠธ ์ปจํŠธ๋กค ์ถ”๊ฐ€

Static Text

๋ฆฌ์†Œ์Šค๋ทฐ์— ๋“ค์–ด๊ฐ€์„œ 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 (ํ…์ŠคํŠธ ์ปจํŠธ๋กค)์˜ ๋‹ค์–‘ํ•œ ์„ค์ •์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ๋ฐ•์Šค ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž

0๊ฐœ์˜ ๋Œ“๊ธ€