2012-02-08 4 views
-1

У меня возникли проблемы с возможностью изменения растровых изображений, когда определенный параметр больше другого. Я большой новичок в этом, и моя кодировка невелика (вообще). У меня есть код, который считывает пределы (параметры) и отображается в виде текста, который заключается в следующем:Получение растрового изображения для изменения цвета при достижении предела

CFont* def_font = argDC->SelectObject(&m_Font); 
    CString csText; 
    int StartPos = WindowRect.Width()/5; 
    CRect TextRect(StartPos, WindowRect.top + 5, StartPos + 100, WindowRect.top + 35); 
    csText.Format(_T("%.2ft"), argSystemDataPtr->GetMaxSWL()); 
    int32_t iSWLDigits = csText.GetLength(); 
    if (iSWLDigits < m_SWLDigitsNum) 
    { 
     m_RedPanelBitmap.LoadBitmapW(IDB_BITMAP_PANEL_RED); 
     //argDC->FillSolidRect(TextRect, RGB(255, 255, 255)); 
    } 
    m_SWLDigitsNum = iSWLDigits; 
    argDC->DrawText(csText, TextRect, DT_LEFT); 

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

CRect PanelRect1, PanelRect2; 

     CRect PanelsRect(WindowRect); 

     const int BarHeight = 30; 
     PanelsRect.OffsetRect(0,m_bShowTitleBar?BarHeight:-BarHeight); 
     PanelsRect.DeflateRect(0,m_bShowTitleBar?BarHeight*-1:BarHeight); 


     m_GreenPanelBitmap.Detach(); 


     m_GreenPanelBitmap.LoadBitmapW(IDB_BITMAP_PANEL_GREEN); 

     CBitmap* pOld = memDC.SelectObject(&m_GreenPanelBitmap); 

     BITMAP bits; 

     m_GreenPanelBitmap.GetObject(sizeof(BITMAP),&bits); 

     PanelRect1.SetRect(0,PanelsRect.top, PanelsRect.right /2 , PanelsRect.Height()/3); 
     PanelRect2.SetRect(0,PanelsRect.top+PanelRect1.Height(), PanelsRect.right /2 ,(PanelsRect.Height()/3) + PanelRect1.Height()); 


     //Now draw the Panels 
     if (pOld != NULL) 
     { 

      argDC->StretchBlt(PanelRect1.left ,PanelRect1.top,PanelRect1.Width(),PanelRect1.Height(), 
      &memDC,0,0,bits.bmWidth-1, bits.bmHeight-1, SRCCOPY); 

      argDC->StretchBlt(PanelRect2.left,PanelRect2.top,PanelRect2.Width(),PanelRect2.Height(), 
      &memDC,0,0,bits.bmWidth-1, bits.bmHeight-1, SRCCOPY); 


      memDC.SelectObject(pOld); 

Я был бы очень признателен за любую помощь, я понимаю, что, вероятно, простой ответ, но я почесал голову над ней и не могу найти ответ в другом месте о том, как изменить m_GreenPanelBitmap to m_RedPanelBitmap, когда это утверждение истинно.

`if (iSWLDigits < m_SWLDigitsNum).` 
+0

и вопрос есть? –

+0

Как мне изменить растровое изображение на другое? if (iSWLDigits bigbaz34

ответ

2

Ну, я думаю, что ваш вопрос немного грязный, но ...

На втором фрагменте кода вы вывесили (я полагаю, из OnPaint метода в диалоговом окне) вы показываете зеленый растровое используя StretchBlt. Если ваша проблема в том, что вам нужно отображать один растровый или другой файл в зависимости от условия, вы должны загружать оба изображения (возможно, вы можете сделать это в другом месте, чтобы избежать загрузки изображений при каждом расписании диалога), а затем отобразить тот, который вам действительно нужен на основе состояние. Что-то вроде этого:

bool bCondition = /*whatever*/ 

m_GreenPanelBitmap.LoadBitmapW(IDB_BITMAP_PANEL_GREEN); 
m_RedPanelBitmap.LoadBitmapW(IDB_BITMAP_PANEL_RED); 

CBitmap* pBitmapToDisplay = bCondition ? &m_GreenPanelBitmap : &m_RedPanelBitmap; 

CBitmap* pOld = memDC.SelectObject(pBitmapToDisplay); 

BITMAP bits; 
pBitmapToDisplay->GetObject(sizeof(BITMAP),&bits); 

PanelRect1.SetRect(0,PanelsRect.top, PanelsRect.right /2 , PanelsRect.Height()/3); 
PanelRect2.SetRect(0,PanelsRect.top+PanelRect1.Height(), PanelsRect.right /2, PanelsRect.Height()/3) + PanelRect1.Height()); 

argDC->StretchBlt(PanelRect1.left ,PanelRect1.top,PanelRect1.Width(),PanelRect1.Height(), 
      &memDC,0,0,bits.bmWidth-1, bits.bmHeight-1, SRCCOPY); 

memDC.SelectObject(pOld); 

Возможно, с более подробным вопросом мы сможем вам помочь.

+0

Большое спасибо. Я в замешательстве, что бы это было. Аполитики для того, чтобы быть такими же толстыми, как гвозди. – bigbaz34