سؤال

يا رفاق، هل يمكن لأي شخص أن يقدم لي شرحًا موجزًا ​​عن كيفية تغيير لون الخلفية لعنصر تحكم CEdit في وقت التشغيل؟أريد أن أكون قادرًا على تغيير الخلفية إلى اللون الأحمر إذا كان طول الحقل صفرًا والأبيض العادي بخلاف ذلك.

هل كانت مفيدة؟

المحلول

وأنت لا تستطيع أن تفعل ذلك مع CEDIT عادي، تحتاج إلى تجاوز بعض البتات.

وتطبيق معالج ON_WM_CTLCOLOR_REFLECT بك، ثم العودة CBrush اللون الخاص بك في معالج:

و(تقريبا، ستحتاج إلى وضع إدارة الموارد المعتادة هناك، rememebr حذف الفرشاة في destructor)

class CColorEdit : public CEdit
{
  ....
  CBrush   m_brBkgnd;
  afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
  {
    m_brBkgnd.DeleteObject();
    m_brBkgnd.CreateSolidBrush(nCtlColor);
  }
}

نصائح أخرى

يمكن القيام بذلك أيضًا دون الاشتقاق من CEdit:

  1. يضيف ON_WM_CTLCOLOR() إلى الحوار الخاص بك BEGIN_MESSAGE_MAP() كتلة التعليمات البرمجية.
  2. يضيف OnCltColor() إلى فئة الحوار الخاصة بك:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. ينفذ OnCtlColor() مثل ذلك:

    HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if ((CTLCOLOR_EDIT == nCtlColor) &&
            (IDC_MY_EDIT == pWnd->GetDlgCtrlID()))
        {
            return m_brMyEditBk; //Create this brush in OnInitDialog() and destroy in destructor
        }
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top