PDA

View Full Version : تغییر رنگ و فونت در یک edit control



A_Salimi
سه شنبه 30 بهمن 1386, 00:06 صبح
در ویژوال سی 2005 (به نظر من ) هیچ optionی برای تغییر متن و یا فونت یک edit control وجود نداره برای تغییر رنگ وفونت در این شئ و اشیا مشابه مثل static text باید چیکار کرد ؟

باید بگم که یک سری کد در codeproject پیدا کردم که خیلی جالب جواب دادن:
برای تغییر فونت :




BOOL CMyDlg::OnInitDialog()
{
CFont myfont;
CStatic* pStatic = GetDlgItem ( IDC_SOME_LABEL );
// ... create a font here using the 'myfont' object ...
// Change the static control's font.
pStatic->SetFont ( &myfont );
return TRUE;
}



برای تغییر رنگ پس زمینه یک کنترل :
در ابتدای برنامه یک متغیر CBrush به نام m_bkbrush تعریف شود.




HBRUSH CsdDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here

if ( pWnd->GetSafeHwnd() == GetDlgItem(IDC_STATIC)->GetSafeHwnd() &&
CTLCOLOR_STATIC == nCtlColor )
{
// m_bkbrush is a CBrush member variable
m_bkbrush.CreateSolidBrush ( RGB(230,0,20) );
pDC->SetBkMode ( TRANSPARENT );
return m_bkbrush;
}
// TODO: Return a different brush if the default is not desired
return hbr;


}
که رنگ static text رو تغییر میده .
اگه ممکنه برای تغییر رنگ فونت کمک کنید . . .

Nima_NF
سه شنبه 30 بهمن 1386, 01:32 صبح
خوب ، خودتان جواب را دادید .
در MFC و Win32 باید از طریق همان کدها و پیام هاِ آن ، رنگ ها را تغییر داد ، برای درک درست پیام ها ابتدا باید بر روی پیام های win32 کار کنید تا متوجه شوید که با MFC چگونه عمل کنید ؛ قبلا در این صفحه توضیحات داده شده است:
http://barnamenevis.org/forum/showthread.php?t=74998

در MFC نیز به همان شکل در رویداد OnCtlColor و توسط CTLCOLOR_STATIC (برای Static control ها) به همان شکل به جای دستورات فوق انجام می شود که باید ID کنترل مورد نظر را هم مورد تست قرار دهید و فقط برای همان مورد ، یک brush با رنگ دلخواه برگردانید (برای پشت زمینه) و برای بقیه کنترل ها مقدار قبلی را برگردانید.

برای تغییر رنگ نوشته از طریق SetTextColor با DC مربوط به آن کنترل می توانید رنگ text را تغییر دهید:



HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
{
// Set the text color to red
pDC->SetTextColor(RGB(255, 0, 0));

pDC->SetBkMode(TRANSPARENT);

hbr = m_brush;
}

return hbr;
}

A_Salimi
سه شنبه 30 بهمن 1386, 10:36 صبح
ممنونم
کد شما به خوبی جواب داد فقط یه سوال در مورد کد تغییر فونتی که گذاشتم دارم
اون کد رو زمانی که در برنامه قرار دادم فونت کنترل من تغییر کرد در صورتی که در اونجا هیچ کدی خلق (creat) نمیشه آیا مقدار پیش فرضی وجود داره که از اون استفاده میشه ؟

Nima_NF
سه شنبه 30 بهمن 1386, 16:48 عصر
وقتی شما فونتی در خواست می کنید و آن فونت در سیستم وجود ندارد ، ویندوز به طور اتومات فونتی را که نزدیک ترین خواص را داشته باشد انتخاب می کند ، در اینجا هم چون شما هیچ فونتی را ایجاد نکرده اید خودش با توجه به مقادیری که در سازنده کلاس توسط مایکروسافت تعریف شده ، یک فونت را انتخاب می کند. که الته کار درستی نیست.
همیشه خودتان یک فونت تعریف و مقدار دهی اولیه کنید تا جواب های عجیب در سایر سیستم ها دریافت نکنید.