كيفية تغيير لون الخلفية لعنصر تحكم علامة تبويب

ملخص

توضح هذه المقالة كيفية تغيير لون الخلفية لكل علامة تبويب في عنصر تحكم علامة تبويب. يفترض وجود مربع حوار وتحديد وتغيير حجم عنصر تحكم علامة تبويب في مربع الحوار باستخدام محرر المورد.

مزيد من المعلومات

لتغيير لون الخلفية لكل علامة تبويب يجب التأكد من علامة التبويب رسم المالك التحكم واستخدم الأسلوب FillRect() لتعبئة مساحة مستطيل من صفحة نفسه بفرشاة إنشاء ثم استدعاء الأسلوب SetBkColor() قبل إجراء استدعاء لأسلوب TextOut() مع النص الذي تريد ظهوره في علامة التبويب.


أولاً إظهار خصائص عنصر تحكم علامة تبويب في محرر المورد وحدد خانة الاختيار أنماط التبويب حدد رسم المالك "الثابتة" واحفظ عملك. إذا تم إنشاء عنصر تحكم علامة التبويب بشكل حيوي أثناء تهيئة مربع الحوار مع CreateWindow() أو CreateWindowEx() تأكد من تضمين TCS_OWNERDRAWFIXED بت في المعلمة دوستيلي.


التالية #defines المستخدمة في النموذج:

        #define RED     RGB(255,0,0)        #define YELLOW  RGB(255,255,0)
#define MAGENTA RGB(255,0,255)
#define WHITE RGB(255,255,255)
#define BLUE RGB(0,0,255)

إذا كنت تستخدم SDK

الفرش في هذا المقتطف نموذج تم إنشاؤها في WM_INITDIALOG ومؤشرات ثابتة.


إضافة رسالة WM_DRAWITEM إلى إجراء مربع الحوار.

نموذج لتعليمة برمجية

   case WM_DRAWITEM:      lpdis = (LPDRAWITEMSTRUCT) lParam; // item drawing information
hTabCtrl = GetDlgItem(hDlg, IDC_TAB1);

if (hTabCtrl == lpdis->hwndItem) // is this the tab control?
{
// which tab? first, second...fifth
switch (lpdis->itemID)
{
case 0:
hbr = hbrRed;
bkColor = RED;
break;
case 1:
hbr = hbrYellow;
bkColor = YELLOW;
break;
case 2:
hbr = hbrMagenta;
bkColor = MAGENTA;
break;
case 3:
hbr = hbrWhite;
bkColor = WHITE;
break;
case 4:
hbr = hbrBlue;
bkColor = BLUE;
break;
}

memset(szTabText, '\0', sizeof(szTabText));

tci.mask = TCIF_TEXT;
tci.pszText = szTabText;
tci.cchTextMax = sizeof(szTabText)-1;

TabCtrl_GetItem(hTabCtrl, lpdis->itemID, &tci);

FillRect(lpdis->hDC, &lpdis->rcItem, hbr);
SetBkColor(lpdis->hDC, bkColor);

TextOut(lpdis->hDC,
lpdis->rcItem.left,
lpdis->rcItem.top,
tci.pszText,
lstrlen(tci.pszText));
}
break;

إذا كان يتم استخدام MFC

الفرش المشار إليها هي جزء من فئة الحوار وتم إنشاؤها عندما تم استدعاء الدالة الإنشائية الحوار.


تجاوز أسلوب OnDrawItem() لفئة مشتقة CDialog الخاصة بك استخدام "معالج فئة" وإضافة التعليمة البرمجية التالية، تغيير أسماء المتغيرات حسب الضرورة. من المهم ملاحظة أن مؤشر لكائن CDC من معالج وحدة تحكم المجال التي تم تمريرها عبر لبدراويتيمستروكت المطلوب، إلا خلفية النص باللون الذي تريده.

نموذج لتعليمة برمجية

       void CMFCTabCtrlDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis)       {
CDialog::OnDrawItem(nIDCtl, lpdis);

char szTabText[100];
RECT rect;
UINT bkColor;
CBrush *cbr;
TC_ITEM tci;

CTabCtrl *pTabCtrl = (CTabCtrl *)GetDlgItem(IDC_TAB1);

if (pTabCtrl->m_hWnd == lpdis->hwndItem)
{
// which tab?
switch (lpdis->itemID)
{
case 0:
cbr = &m_brRed;
bkColor = RED;
break;

case 1:
cbr = &m_brYellow;
bkColor = YELLOW;
break;

case 2:
cbr = &m_brMagenta;
bkColor = MAGENTA;
break;

case 3:
cbr = &m_brWhite;
bkColor = WHITE;
break;

case 4:
cbr = &m_brBlue;
bkColor = BLUE;
break;
}

memset(szTabText, '\0', sizeof(szTabText));

tci.mask = TCIF_TEXT;
tci.pszText = szTabText;
tci.cchTextMax = sizeof(szTabText)-1;

pTabCtrl->GetItem(lpdis->itemID, &tci);

CDC *dc = CDC::FromHandle(lpdis->hDC);

dc->FillRect(&lpdis->rcItem, cbr);
dc->SetBkColor(bkColor);

TextOut(lpdis->hDC,
lpdis->rcItem.left,
lpdis->rcItem.top,
tci.pszText,
lstrlen(tci.pszText));
}
}

خصائص

رقم الموضوع: 179909 - آخر مراجعة: 09‏/01‏/2017 - المراجعة: 1

تعليقات