Transparentes Static -> Problem beim Redraw



  • Hallo,
    ich mache den Hintergrund des Statics mit den folgenden Code Transparent:

    HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	// TODO:  Change any attributes of the DC here
    	if (pWnd->GetDlgCtrlID() == IDC_LABEL)
    	{
    		pDC->SetBkMode(TRANSPARENT);
    		return static_cast<HBRUSH>(::GetStockObject(HOLLOW_BRUSH));
    	}
    	// TODO:  Return a different brush if the default is not desired
    	return hbr;
    }
    

    Mit einen Timer erneuere ich den Text alle 2 sekunden. Allerdings wird der Hintergrund des statics nicht gelöscht und somit kann man nach kurzer Zeit den Text nicht mehr lesen. Wie behebe ich dieses Problem?

    danke im voraus



  • Hallo,

    so wie ich das ferstanden habe ist doch der hintergrund Transparent als ist das was voher dort war nach den neuzeichne minernoch zu sechen.

    du must dafür sorgen das das was hinter diene transparenten hintergrund ist neu gezeichnet wirt.

    MFG TaccoGo



  • Hi versuch mal die Classe

    class CTransparentStatic : public CStatic
    {
    	DECLARE_DYNAMIC(CTransparentStatic)
    
    public:
    	CTransparentStatic();
    	virtual ~CTransparentStatic();
    
    protected:
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnPaint();
    };
    
    IMPLEMENT_DYNAMIC(CTransparentStatic, CStatic)
    CTransparentStatic::CTransparentStatic()
    {
    }
    
    CTransparentStatic::~CTransparentStatic()
    {
    }
    
    BEGIN_MESSAGE_MAP(CTransparentStatic, CStatic)
    	ON_WM_PAINT()
    END_MESSAGE_MAP()
    
    void CTransparentStatic::OnPaint()
    {
    	CPaintDC dc(this); 
    
    	CRect client_rect;
    	GetClientRect(client_rect);
    
    	CString szText;
    	GetWindowText(szText);
    
    	CFont *pFont, *pOldFont;
    	pFont = GetFont();
    	pOldFont = dc.SelectObject(pFont);
    
    #define MAP_STYLE(src, dest) if(dwStyle & (src)) dwText |= (dest)
    #define NMAP_STYLE(src, dest) if(!(dwStyle & (src))) dwText |= (dest)
    
    	DWORD dwStyle = GetStyle(), dwText = 0;
    
    	MAP_STYLE(	SS_RIGHT,			DT_RIGHT					);
    	MAP_STYLE(	SS_CENTER,			DT_CENTER					);
    	MAP_STYLE(	SS_CENTERIMAGE,		DT_VCENTER | DT_SINGLELINE	);
    	MAP_STYLE(	SS_NOPREFIX,		DT_NOPREFIX					);
    	MAP_STYLE(	SS_WORDELLIPSIS,	DT_WORD_ELLIPSIS			);
    	MAP_STYLE(	SS_ENDELLIPSIS,		DT_END_ELLIPSIS				);
    	MAP_STYLE(	SS_PATHELLIPSIS,	DT_PATH_ELLIPSIS			);
    
    	NMAP_STYLE(	SS_LEFTNOWORDWRAP |
    				SS_CENTERIMAGE |
    				SS_WORDELLIPSIS |
    				SS_ENDELLIPSIS |
    				SS_PATHELLIPSIS,	DT_WORDBREAK				);
    
    	dc.SetBkMode(TRANSPARENT);
    
    	dc.DrawText(szText, client_rect, dwText);
    
    	dc.SelectObject(pOldFont);
    }
    

Anmelden zum Antworten