2010-01-25 8 views
10

Cómo establecer el tamaño del área No cliente de una ventana Win32 (nativa).Cómo establecer el tamaño del área No cliente de una ventana Win32 (nativa)

Lo que quiero es hacer la barra de MAYÚSCULAS/TÍTULOS MÁS GRUESA.

He leído y me han dicho que debo manejar WM_NCCALCSIZE pero no puedo encontrar nada claro en la documentación.

De MSDN:

WM_NCCALCSIZE Notificación


El mensaje WM_NCCALCSIZE se envía cuando el tamaño y la posición del área cliente de una ventana deben ser calculados. Al procesar este mensaje, una aplicación puede controlar el contenido del área del cliente de la ventana cuando cambia el tamaño o la posición de la ventana.

Una ventana recibe este mensaje a través de su función WindowProc.

WParam Si wParam es TRUE, especifica que la solicitud debe indicar qué parte del área de cliente contiene información válida. El sistema copia la información válida en el área especificada dentro del área del nuevo cliente. Si wParam es FALSO, la aplicación no necesita indicar la parte válida del área del cliente.

IParam Si wParam es TRUE, lParam apunta a una estructura que contiene información NCCALCSIZE_PARAMS una aplicación puede utilizar para calcular el nuevo tamaño y la posición del rectángulo cliente. Si wParam es FALSO, lParam apunta a una estructura RECT. Al ingresar, la estructura contiene el rectángulo de ventana propuesto para la ventana. Al salir, la estructura debe contener las coordenadas de pantalla del área de cliente de ventana correspondiente.

+0

¿Quiere decir que desea establecer el tamaño de toda la viuda (incluido el área no cliente) o cambiar las métricas que no son del cliente como el ancho de un borde o la altura de la barra de título? –

+0

Acaba de editarse. Quiero hacer que la barra de subtítulos sea más gruesa. –

Respuesta

9

para establecer el tamaño del área no cliente mediante el manejo del mensaje WM_NCCALCSIZE. Pero no haga esto a menos que planee hacer todo el dibujo que no sea del cliente manejando WM_NCPAINT

Editar: aquí hay dos fragmentos de código, uno que maneja WM_NCCALCSIZE y proporciona un simple borde de n píxeles, y otro que agrega algunos píxeles adicionales después de que DefWindowProc haya realizado el manejo predeterminado.

case WM_NCCALCSIZE: 
    { 
    lRet = 0; 
    const int cxBorder = 2; 
    const int cyBorder = 2; 
    InflateRect((LPRECT)lParam, -cxBorder, -cyBorder); 
    } 

case WM_NCCALCSIZE: 
    { 
    LPNCCALCSIZE_PARAMS pncc = (LPNCCALCSIZE_PARAMS)lParam; 
    //pncc->rgrc[0] is the new rectangle 
    //pncc->rgrc[1] is the old rectangle 
    //pncc->rgrc[2] is the client rectangle 

    lRet = DefWindowProc (hwnd, WM_NCCALCSIZE, wParam, lParam); 
    pncc->rgrc[0].top += ExtraCaptionHeight; 
    } 

Usted puede aprender mucho al pasar a WM_NCCALCSIZE DefWindowProc y mirando a los valores de la NCCALCSIZEPARAM antes y después.

+0

Pinto la parte no cliente y sé acerca de WM_NCCALCSIZE, lea la documentación pero no la obtengo. –

+0

Sí, es un poco complicado. Tengo un código que escribí hace mucho tiempo. Veré si puedo encontrarlo. –

+0

muchas gracias hombre. –

Cuestiones relacionadas