Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente de la biblioteca de aspectos Vc

Código fuente de la biblioteca de aspectos Vc

Botón autodibujado: (VC's) data source/3582077/blog/item/9e 86 f 81 c64a 97 b 9 c 86 b 6677. html control de 3 botones El principio del control de botón autodibujado es muy simple. Obtenga el contexto del dispositivo (DC) de la ventana de control y luego llame a la función de dibujo API correspondiente para dibujar el control. Se pueden aplicar todas las funciones API que se pueden ejecutar en DC. Primero, importamos dos mapas de bits al proyecto, uno es la imagen que se muestra cuando se presiona el botón (número de identificación: IDB_SELECT) y el otro es la imagen que se muestra normalmente (IDB_NORMAL).

Sabemos que la clase correspondiente al control del botón es CButton, por lo que tenemos que derivar una clase a partir de esta clase.

La forma de derivar la clase CButton es ingresar a la pestaña ClassView, hacer clic derecho en Primeras clases y seleccionar Nueva clase... Luego aparecerá un cuadro de diálogo de nueva clase. El elemento Nombre es el nombre de la nueva clase. El nombre de la clase aquí es CNewButton. Seleccione CButton como clase base y haga clic en Aceptar. En este momento, hay una clase CNewButton adicional en Primeras clases, que es una clase derivada de la clase Botón (CButton).

Luego agregue la función virtual DrawItem en CNewButton. El método para agregar la función virtual se explicó al agregar la función virtual PreTranslateMessage.

La definición de esta función es la siguiente:

void CNewButton::DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT)

LpDrawItemStruct es un puntero a la estructura DrawItemStruct, en " Colección en línea (reimpresa))". El código en las letras de DrawItem es el siguiente: //todo: Agrega tu código para dibujar el elemento especificado.

CDC dc

Washington. adjuntar(lpDrawItemStruct-gt; hDC); //La función ATTACH en la clase CDC se utiliza para convertir HDC a CDC.

UINT state = lpDrawItemStruct- gt; itemState

CRect ButtonRect

GetClientRect(amp;ButtonRect); //Llame a la función GetWindowRect en la clase del botón para obtener. el tamaño del área del botón.

MemDC CDC

memDC. CreateCompatibleDC(amp; DC); //Crea un DC compatible

CBitmap bmp

if (estado ampODS_SELECTED) //Si se presiona el botón,

{

bmp. load bitmap(IDB _ SELECT); //Carga la imagen presionada

}

Otros

{

bmp. cargar mapa de bits(IDB _ NORMAL);

}

Bitmap bmpInfo

bmp. Obtener mapa de bits (información ampBMP); //Obtener información de mapa de bits

memDC. seleccionar objeto(ampBMP); //Seleccionar imagen.

Washington.

StretchBlt(0, 0, ButtonRect.right, ButtonRect.bottom, ampmemDC,

0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, copia src //Mostrar imagen

); CString string;

GetWindowText(str); //Obtener texto del botón

Washington. SetBkMode(transparent); //Establece el fondo del texto en transparente

Washington. DrawText(string ampButtonRect, DT_CENTER | DT_VCENTER | DT_single line); //Texto del botón de salida memDC. EliminarDC();

bmp. eliminar objeto(); Luego, agregamos un botón al cuadro de diálogo y lo convertimos en una variable asociada. En el cuadro de diálogo Agregar variable miembro, seleccione CNewButton en la columna Tipo de variable, establezca el estilo del control del botón en "Descripción del propietario" y luego incluya NewButton.h (el archivo de encabezado de clase de botón derivado) en la clase de diálogo: #include" new button. h" Luego compilamos y ejecutamos, el efecto es el siguiente:

Porque solo procesamos los dos estados del botón, el estado presionado y el estado normal, cuando el botón recibe el foco o está activado. en otros estados no existe ninguna acción correspondiente.