Control "CStatic"

18/12/2003 - 20:29 por kapsule | Informe spam
Hola a todos.

Tengo un pequeño problema, estoy diseñando un cuadro de
dialogo que contiene un control CTabCtrl, y encima de
este un control CStatic.

El problema es que cuando ejecuto la aplicacion sobre XP
y tengo los estilos estos que carga el XP el Tab se ve de
un color como blanco y el CStatic de un colo mas oscuro.

He probado de decir al control CStatic que es
transparente desde las propiedades pero nada.

Haber si me podeis decir como hacer que el CStatic se me
vea bien sobre el control Tab.

Un saludo
 

Leer las respuestas

#1 Sergio
19/12/2003 - 10:59 | Informe spam
Una forma de pasar por encima de los estilos del XP es haciendote una clase
CStatic propia, deribando DrawItem, y haciendo que el texto y sea del color
que quieras.

Hace poco(ayer), tuve que hacerme una clase propia, te la paso, espero que
te sirva


<-CPP>


// MyStatic.cpp: archivo de implementación
//

#include "stdafx.h"
#include "MyStatic.h"


// CMyStatic

IMPLEMENT_DYNAMIC(CMyStatic, CStatic)
CMyStatic::CMyStatic()
{
}

CMyStatic::~CMyStatic()
{
}


BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
END_MESSAGE_MAP()



// Controladores de mensajes de CMyStatic


void CMyStatic::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
COLORREF clrBackGrnd = dc.GetBkColor();
COLORREF clrTextOld = dc.GetTextColor();
COLORREF clrTextNew = RGB(255,255,255);
CRect crctRect(lpDrawItemStruct->rcItem);
CString cstrTexto;
GetWindowText(cstrTexto);
dc.SetBkColor(clrBackGrnd);
dc.SetTextColor(clrTextNew);
dc.FillRect(crctRect,&CBrush(clrBackGrnd));
dc.TextOut(crctRect.left+2,crctRect.top+2,cstrTexto);
dc.SetTextColor(clrTextOld);
dc.Detach();
}

<-CPP>

<-H>

#pragma once


// CMyStatic

class CMyStatic : public CStatic
{
DECLARE_DYNAMIC(CMyStatic)

public:
CMyStatic();
virtual ~CMyStatic();

protected:
DECLARE_MESSAGE_MAP()
public:
virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
};

<-H>

Para usarla:
CMyStatic myst;
myst.Create("CMyStatic",WS_CHILD|WS_VISIBLE|SS_OWNERDRAW,CRect(100,100,200,2
00),this);

Si no modificas la clase aparecerá "CMyStatic" escrito en blanco, solo
tienes que cambiar clrTextNew de DrawItem, y ajustarlo a tu gusto.
Espero que te valga.

Preguntas similares