View Full Version : سوال: تغيير رنگ يك Static text با كليك كردن يك دكمه
noshin156
یک شنبه 10 اردیبهشت 1391, 10:52 صبح
سلام
من چه جوري مي تونم رنگ يك Static text را با كليك كردن بر روي يك دكمه تغيير بدم
با تشكر
mehdi.mousavi
یک شنبه 10 اردیبهشت 1391, 11:08 صبح
سلام من چه جوري مي تونم رنگ يك Static text را با كليك كردن بر روي يك دكمه تغيير بدم با تشكر
سلام.
برای اینکار، کافیه تا WM_CTRLCOLOR رو Handle کنید و Static Text مورد نظر رو به رنگ دلخواه در بیارید:
HBRUSH CMyMfcTest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
اینجا، من رنگ رو قرمز انتخاب کردم، اما چون شما میخواهید با فشرده شدن کلید رنگ رو تغییر بدید، باید متغیری در Class داشته باشید که رنگ مورد نظر رو در اون نگهداری کنید، هر وقت OnCtrlColor فراخوانی شد، اون رنگ رو با SetTextColor روی Static Text ست کنید. البته روش بهتر، Derive کردن یک Control از CStatic و اضافه کردن متود SetColor (و ...) به کنترل جدید هستش تا بدین ترتیب کنترلی داشته باشید که بتونید رنگش رو بر اساس شرایط متفاوت توسط متودهایی از بیرون براحتی تعیین کنید. برای مشاهده این روش، می تونید به این مقاله (http://www.codeproject.com/Articles/1035/Using-colors-in-CEdit-and-CStatic) مراجعه کنید.
موفق باشید.
noshin156
دوشنبه 11 اردیبهشت 1391, 11:03 صبح
مرسي از راهنمايتون
منظور شما كدوم كلاسه خودم بايد تعريف كنم؟
چه طوري مي تونم فراخوانيش كنم؟
من رنگ فونت رو نمي خوام تغيير بدم مي خوام رنگ خود كنترل را تغيير بدم اگر ممكنه يه نمونه كد بذاريد
ASGGSA
دوشنبه 11 اردیبهشت 1391, 19:02 عصر
سلام.
با تشکر از راهنمایی آقای موسوی اضافه می کنم که اگر از MFC استفاده می کنید تابع WM_CTLCOLOR در Class Wizard موجود هست و اگر از Win32 استفاده می کنید این پیغام را باید خودتان اضافه کنید و یک Brush برگردانید. این تابع بصورت خودکار فراخوانی می شود.
در دستور if باید ID مورد نظر را وارد کنید ، همچنین می توانید یک متغیر از نوع bool تعریف کرده مثل Unlock و در دستور if استفاده کنید تا هر موقع روی دکمه کلید زدید رنگ تغییر کند.
در کد زیر Brush اول برای تغییر رنگ Text و Brush دوم برای تغییر رنگ زمینه است.
if ( pWnd->GetSafeHwnd() == GetDlgItem(IDC_STATIC)->GetSafeHwnd() && Unlock == true)
{
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkMode( TRANSPARENT );
hbr = ::CreateSolidBrush(RGB(0,255,0));
}
تابع OnButton1 برای دکمه مورد نظر:
void CColorControlDlg::OnButton1()
{
Unlock = true;
InvalidateRect(NULL, FALSE);
}
تابع InvalidateRect برای فراخوانی تابع OnPaint.
noshin156
سه شنبه 12 اردیبهشت 1391, 17:04 عصر
ببخشيد يه مشكل ديگه به وجود مياد
من كد نوشته شده رو تو يك تابع دريك class جديد ميذارم
void layer11_f_DF::active_f_DF(int input)
{
if (input == 1)
{
rgb=RGB(0,255,0);
Unlock = true;
InvalidateRect(NULL, FALSE);
}
if (input == 2)
{
rgb=RGB(255,0,0);
Unlock = true;
InvalidateRect(NULL, FALSE);
}
تابع OnCtlColor فراخواني مي شود اما وقتي به خط
if ( pWnd->GetSafeHwnd() == GetDlgItem(IDC_miles)->GetSafeHwnd() && Unlock == true)
مي رسه error ميده چه كارش كنم؟
ASGGSA
سه شنبه 12 اردیبهشت 1391, 18:28 عصر
سلام.
احتمالاً خطا از متغیر Unlock است ، این متغیر را کجا تعریف کرده اید؟ اگر در کلاس تعریف کرده اید مشکل از اینه که برای آن شیء معلوم نکرده اید. اگر از Unlock نیست باید از ID باشد.
لطفاً پیام خطاها را بنویسید تا بتوانیم کمک کنیم.
noshin156
چهارشنبه 13 اردیبهشت 1391, 09:52 صبح
unlock رو در ديالوگ تعريف كردم چه جوري مي تونم مقدار id رو به صورت پارامتر به تابع ارسال كنم؟
86585
ASGGSA
چهارشنبه 13 اردیبهشت 1391, 10:25 صبح
سلام.
من فکر کردم هنگام کامپایل شدن خطا صورت گرفته. منظور من از ID این بود که از لحاظ نوشتاری مشکلی نداشته باشد و نیازی به ارسال ID نیست چون ID در پرونده resource.h بصورت ماکرو تعریف شده و در همه جای برنامه جواب می دهد. حالا شما بجای گرفتن خروجی برنامتون از Debug استفاده کنید تا دقیقاً خطی که خطا در آن صورت گرفته را نشان دهد.
mehdi.mousavi
پنج شنبه 14 اردیبهشت 1391, 16:51 عصر
if ( pWnd->GetSafeHwnd() == GetDlgItem(IDC_STATIC)->GetSafeHwnd() && Unlock == true)
سلام.
نیازی نیست تا برای به دام انداختن IDC_STATIC خاصی، Safe Handle دو پنجره رو مقایسه کنید. کافیه تا بدین شکل عمل کنید:
if(pWnd->GetDlgCtrlID() == IDC_STATIC_MYTEXT)
{
//THIS IS THE CONTROL WE NEED TO CHANGE ITS COLOR!
}
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.