2012-02-08 1 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 변경 방법에 다른 곳에서도 답을 찾을 수가 없어 이해, 어떤 도움을 매우 감사하게 될 것입니다 이 문이 true 일 때 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

대단히 감사합니다. 나는 그 상태가 무엇인지 혼란 스럽다. 손톱만큼 두꺼운 것에 대한 Apoligies. – bigbaz34

관련 문제