none
CDialogEx::SetBackgroundImage() RRS feed

  • Общие обсуждения

  • Как быть с правильным отображением фона checkbox-ов при использовании данного класса в таком режиме? Приведенный код рисунок ставит нормально, но фокусная рамка рисуется не правильно - она не стирается с checkbox-а при клике по другим элементам.

    HBRUSH CCDialogExExDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO: Change any attributes of the DC here
      if (m_brBkgr.GetSafeHandle() != NULL || m_hBkgrBitmap != NULL)
      {
    #define AFX_MAX_CLASS_NAME 255
    #define AFX_BUTTON_CLASS _T("Button")
    if (nCtlColor == CTLCOLOR_STATIC)
        {
    TCHAR lpszClassName[AFX_MAX_CLASS_NAME + 1];
          int nChars = ::GetClassName(pWnd->GetSafeHwnd(), lpszClassName, AFX_MAX_CLASS_NAME); 
    if(( nChars > 0 ) && ( _tcsncmp( lpszClassName, AFX_BUTTON_CLASS, nChars ) == 0))
    {
    UINT uStyle=((CButton*)pWnd)->GetButtonStyle();
    if (uStyle==BS_AUTOCHECKBOX)
    {
    CBitmap bmpBk;
    CDC * pParentDC = GetDC();//Получаем контекст владельца контрола
    CDC dcBk;
    m_brBkImage.DeleteObject();// уничтожаем предыдущее
    CRect rClient; // клиентская область контрола
    CRect rWnd;// окно контрола
    pWnd->GetClientRect(& rClient);
    pWnd->GetWindowRect(& rWnd);
    ScreenToClient(& rWnd);// перевод в клиентские координаты родителя
    dcBk.CreateCompatibleDC(pDC);
    bmpBk.CreateCompatibleBitmap(pDC, rClient.Width(), rClient.Height());
    CBitmap * pOldBitmap=dcBk.SelectObject(& bmpBk);
    dcBk.BitBlt(0, 0, rClient.Width(), rClient.Height(), pParentDC, rWnd.left, rWnd.top, SRCCOPY);
    m_brBkImage.CreatePatternBrush(&bmpBk);// получаем кисть для контрола
    dcBk.SelectObject(pOldBitmap);//pOldBrush
    
    ReleaseDC(pParentDC); // освобождаем контекст
    //pDC->SetBkMode(TRANSPARENT);
    hbr =(HBRUSH)m_brBkImage;
    ReleaseDC(&dcBk);
    //return (HBRUSH)m_brBkgr;
    }
    }
    }
    
    }
    return hbr;
    }
    • Изменено Alborro 18 сентября 2010 г. 3:58 невыразительный код
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:08 MSDN Forums consolidation (От:Разработка Windows-приложений)
    • Изменен тип Abolmasov Dmitry 12 марта 2011 г. 11:35
    18 сентября 2010 г. 3:56

Все ответы

  • Вопрос ещё актуален.

    28 октября 2010 г. 13:44
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    5 марта 2011 г. 8:18