Red de conocimiento informático - Aprendizaje de programación - Código fuente de Ltpserver

Código fuente de Ltpserver

Si eres principiante, lo mejor es empezar desde lo básico.

WIN32, solo echa un vistazo al tutorial de Sun Xin.

Crear una nueva área de proyecto WIN32 en C. Odio decirlo. ¿Por qué se siente tan problemático?

Lo aprendí hace dos días y tomé algunas notas al azar. Echa un vistazo a esto. No me culpes por ser vago. .

===

Mensaje:

===

Identificador: El índice es similar a un puntero.

El mensaje Uint contiene mensajes utilizados por el sistema operativo para enviar y recibir. Estos mensajes son enteros sin firmar y tienen una gran cantidad de representaciones macro (WM).

Wparm: Tras recibir el mensaje, se convierte al código ASCii correspondiente.

Tipo de palabra: entero de 16 bits

Palabra doble: 32 bits

Dword time guarda el tiempo del mensaje

Haga clic en pt- guardar el mensaje y enviarlo La posición del cursor de tiempo.

|

Estructura

x,

y,

===

winmain:

===

(asignado directamente por el sistema operativo)

Instancia Hin identificador de instancia de la aplicación.

Ejemplo: inicio del flujo del programa de movimiento;

El identificador de la misma instancia se abrió después de la instancia hPreInstance (normalmente vacía)

Cadena de puntero larga

p >

Lpstr lpCmdLine acepta el valor de arge argumento.

Proyecto - gt; configuración - gt; parámetros de configuración de Argu

===

Diseño de ventana

===

-Clase de ventana wndclass (importante)

Cs_hredraw | cs_verdraw correspondiente (redibujo de ventana) al cambiar el tamaño de la ventana O operación

Función de devolución de llamada LpfnWndProc, el código se aplica mediante Proporcionado por el programa y llamado por el sistema operativo.

cbclsextra Normalmente, a 0 se le asigna memoria adicional.

cbwndextra es generalmente 0. Lo mismo que arriba.

HINSTANCE hNúmero de instancia de instancia

Icono de control (icono de carga) (el primer parámetro en el gráfico estándar está vacío)

HCURSOR Cargar cursor del cursor (use el cursor estándar cuando , el primer parámetro es NULL)

HBRUSH hbrMango del pincel de fondo

(HBRUSH)getstockobject (parámetro, color de fondo)

LPCTSTR lpszmenuname: establece el nombre del menú (NULL significa que no se requiere menú).

LTPCSTR lpszclassname: el nombre de la ventana (para múltiples ventanas)

==

Registro de ventana

==

Función de registro de clase Registerclass

clase de registro (amp; Wndclass) Wndclass definida previamente por WNDCLASS.

==

Operaciones de ventana

==

-Crear una ventana

Crear ventana (registrada por lpcstr Nombre de la ventana,

Título LPCSTR Nombre de LAN, Diseño Dowrd (macro) del marco externo del programa, como barra de tareas, minimizar y maximizar, /*Método para eliminar maximizar: por ejemplo, la macro seleccionada es WS_OVERLAPPEDWINDOW, luego agregue la macro WS_MAXIMIZEBOX del botón maximizar a su vez, es decir, WS _ ventana superpuesta ~ WS _ cuadro de maximización (la sintaxis en el parámetro, o desea asignar un objeto). De esta manera, invierta el ws_maximizebox de ws_overlappedwindow, y puedes ¡El efecto se logra */,

int x, |

Int y, |El origen de las coordenadas horizontales y verticales es el centro de la pantalla.

Int nWidth, // Define el ancho de la ventana | La macro predeterminada es: CW_USEDEFAULT XY

Int nHeight, // Define la altura de la apertura de la ventana >Hwnd hwndparent. , //Identificador de la ventana secundaria, NULL si no es así.

HMENU hMenu, //Identificador del menú, NULL en caso contrario

LPVOID lpParam, // Como se describe más adelante, es. el puntero que el usuario debe señalar a múltiples documentos

===

La ventana de la tienda

==

Ventana booleana. (

HWND hWnd, //El identificador de la ventana que se mostrará

Modo de visualización, //Macro SW_normalmente se muestra como SW_SHOWNORMAL)

-Actualizar ventana

Actualizar ventana (hwnd); //Introducir etiquetas más tarde

==

Bucle de mensajes

==

Usar while(GetMessage) para implementar el bucle de mensajes (el valor es verdadero cuando hay un mensaje)

GetMessage(

LPMSG lpMsg//La dirección de la estructura de reproducción

HWND hWnd//Obtener el mensaje de una ventana

UINT wMsgFilterMin //Establecer el valor mínimo del mensaje | Si se establece en 0, se devolverán todos los mensajes de la cola de mensajes. UINT wMsgFilterMax/ /Establecer el valor máximo de mensajes | para el filtrado de mensajes

) //Obtener el mensaje

TranslateMessage(* dirección principal) Traducir el par de mensajes y enviarlo a la cola de mensajes (generar nueva información). Si no se utiliza, se convertirá a WCHAR y se podrá capturar.

//El valor original es WM_KEYDOWN, que se puede convertir al valor correspondiente a través de esta función, como "presionar el mouse".

Después de usar DispatchMessage(* dirección principal), el sistema llama a la función de devolución de llamada.

Utilice interruptores para manejar los mensajes recibidos en consecuencia.

-Tipo de devolución de llamada

LRESULT devolución de llamada WindowProc(

HWND hwnd, //identificador de ventana

UINT uMsg, //ID de mensaje

La hora en que se envió el primer mensaje

LPARAM lParam //El cursor de entrega del segundo mensaje

Contenido determinado por el conmutador

Por ejemplo, existe el caso WM_CHAR: que indica que se ha presionado una determinada tecla.

); El tipo de parámetro no se puede cambiar, pero todo lo demás se puede cambiar.

-

Devolución de llamada:

-

Al ejecutar la función DispatchMessage mencionada anteriormente, el sistema operativo llamará a la siguiente función de devolución de llamada de ventana .

Sprintf(var, const char*/*Cadena constante, puede ser */ con la operación de formato d, wparam)//Formatear en la memoria.

int MessageBox(

Hwnd, //Propietario de esta ventana

Lpctstr lptext, //Texto del cuerpo

Lpctstr lpcaption, // Texto del título

Tipo uin//Tipo de título (macro) Ventana emergente MB_OK, ventana emergente OK MB_YESNO, YESNO

)

HDC =. contexto del dispositivo

p>

)

Comenzar la huella final de WM_PRINT.

GetDC() releaseDC() se utiliza para no WM_PRINT.

Destroywindow() cierra la ventana postquitmessage() para salir del proceso.

===

Proceso de escritura * * *

==

Crear proyecto (aplicación win32)

-Elige un proyecto vacío

Crea un nuevo archivo C (archivo fuente)

Comienza a escribir

Incluye windows.hstdio.h.

Establece la función winmain. (El contenido es el siguiente, copiar)

{

//int WINAPI WinMain(

// HINSTANCE hInstance, /*handle de la instancia actual* /

//HINSTANCE hPrevInstance, /*identificador de la instancia anterior*/

//LPSTR lpCmdLine, /*línea de comando*/

//int nCmdShow//display Status

}

Lo anterior es el contenido completo de winmain

{(asignado directamente por el sistema operativo)

aplicación de instancia hin. Identificador de instancia

Ejemplo: flujo de programa de movimiento iniciado;

Manejador de la misma instancia abierta después de hinstance hPreInstance (generalmente vacía)

Largo cadena de caracteres de puntero

Lpstr lpCmdLine acepta el valor de arge argu

Project-gt;Parámetros de configuración de Argu

}

Clase de ventana de diseño

winmain(...)

{

WNDCLASS wndcls

wnd cls cbclsextra = 0;

wnd cls . cbwndextra = 0;

wnd HBR fondo =(HBRUSH)GetStockObject(BLACE _ BRUSH);

...

Asignar valores a todos los miembros en wndcls

Ver arriba.

Registrar clase de ventana; wnd cls); (referenciado desde la ventana)

Crear ventana:

HWND hwnd

hwnd=CreateWindow(

Ingreso constante de wndcls.lpszClassName, nombre de la ventana, tipo de ventana WS_OVERLAPPEDWINDOW (macro con barra de título),

Coordenadas de la ventana,

Coordenadas de la ventana ,

Longitud,

Ancho,

Subventana (si no, entonces vacía)

Menú, (si no, entonces Vacío)

h identificador de instancia, (mensaje)

Datos de creación de ventana, (vacío)

)

Ventana de tienda

ShowWindow(hwnd, SW _ show normal);

Actualizar ventana (hwnd); use estas dos oraciones primero

Mensaje mensaje // Crear mensaje

while(GetMessage(amp; Msg, Null, 0(filter), 0(filter))

{

Traducir mensaje(amp MSG);

despachar message(amp;MSG);

}

Igual que WINMAIN anterior

Generalmente cópielo lo que pueda

Programa de ventana. (copiar)

Devolución de llamada LRESULT WinSunProc(

HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam

);

Lo anterior es la idea de la función, generalmente copia y luego edita la parte de procesamiento de mensajes reales

Switch(. uMSG)/ /¡En devolución de llamada de mensaje! No MSG

{

Caso: ..

Caso WM_PAINT:

HDC hDC

p>

PAINTSTRUCT ps

hDC-begin paint(hwnd amp; PS);

TextOut(hDC, 0, 0, "ddddd", strlen(" dddd") )

topcoat(hwnd&ps);

break; //redibujar

Caso WM_CLOSE:

if(IDYES == MessageBox(hwnd, "¿Estás seguro?", "weixin", MB_YESNO))

Destruir ventana (hwnd); //Función de cierre de ventana

Caso WM_DESTROY:

p>

PostQuitMessage(0);

Roto; //La ventana está destruida. Este mensaje se envía cuando se ejecuta la función DESTROYWINDOW.

Los parámetros def windowproc (hwnd, umsg, wparam, lparam) se le pasan directamente.

}

Nota: ¡No existe el concepto principal, el procesamiento de mensajes está escrito en WinSunProc! ! ! //El nombre especificado por la clase de ventana.

===

typedef int ancho

typedef int alto

Ancho x

Alto y;

Esto es mejor, es más fácil de distinguir.

El apéndice completo es el siguiente

WNDCLASS wndcls

wnd cls cbclsextra = 0

wnd cls . 0;

p>

wnd cls . fondo HBR =(HBRUSH)GetStockObject(BLACK_BRUSH);

wndcls.hCursor=LoadCursor(NULL, IDC_CROSS);

wndcls hIcon = LoadIcon(NULL,IDI_ERROR);

wnd cls.h instancia = h instancia;

wndcls.lpfnWndProc = WinSunProc

wnd cls.lpsz clase Nombre = " Nombre ";

wndcls.lpszMenuName = NULL

wnd cls estilo = CS_HREDRAW | CS_VREDRAW;

registrar clase( amp . wnd cls);

HWND hwnd

hwnd=CreateWindow("Nombre "," Nombre ",WS_OVERLAPPEDWINDOW,

0, 0, 600, 400, NULL , NULL, hInstance, NULL);

ShowWindow(hwnd, SW_show normal);

Actualizar ventana(hwnd);

MSG MSG;

while(GetMessage(amp;msg,NULL,0,0))

{

Traducir mensaje (amp msg);

enviar mensaje( amp;MSG);

}

Devuelve 0;

}

QQ107395975