Red de conocimiento informático - Conocimiento informático - Programación de red Sun Xin vc

Programación de red Sun Xin vc

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

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

Cree 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. 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->Configuración->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, código Proporcionado por aplicaciones 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 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(& 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 para maximizar el botón a su vez, es decir, WS _ ventana superpuesta y ~ WS _ cuadro de maximizar (la sintaxis en el parámetro, o debe asignar un objeto.

) De esta manera, invierta el ws_maximizebox de ws_overlappedwindow y se logrará el efecto. */,

int x, |

Int y, | selección (posición) de coordenadas horizontales y verticales. El origen está en el centro de la pantalla.

Int nWidth, //Definir el ancho de la ventana | La macro predeterminada es: CW_USEDEFAULT XY. Utilice también esta macro.

Int nHeight, //Define la altura de la abertura de la ventana. |

Hwnd hwndparent, //El identificador de la ventana secundaria, NULL si no.

HMENU hMenu, //Identificador del menú, vacío si no.

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

===

Ventana de tienda

==

Ventana de visualización booleana(

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

Modo de visualización, //Macro SW _ normalmente se muestra como SW_SHOWNORMAL)

-Ventana de actualización

Ventana de actualización (hwnd ); //Introduciendo etiquetas más adelante.

==

Bucle de mensajes

==

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

GetMessage(

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

HWND hWnd//Obtener el mensaje de una ventana.

UINT wMsgFilterMin //Establece el valor mínimo del mensaje | Si se establece en 0, se devolverán los mensajes de todas las colas de mensajes

UINT wMsgFilterMax //Establece el valor máximo del mensaje para el filtrado de mensajes

). //Obtener el mensaje

TranslateMessage(* dirección principal) convierte el par de mensajes y lo envía a la cola de mensajes (generando un nuevo mensaje). 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, está el caso WM_CHAR: indica que se ha presionado una determinada tecla

); el tipo de parámetro no se puede cambiar, pero los demás sí.

-

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 formateo %d, wparam)//Formatear en 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, confirme la ventana emergente MB_YESNO, YESNO.

)

HDC = contexto del dispositivo

)

Iniciar impresión 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)

-Seleccione un proyecto vacío

Crear un nuevo archivo C++ (archivo fuente)

Empezar a escribir

Incluir 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

Proyecto->Configuración->Parámetros de configuración de Argu

}

Clase de ventana de diseño

winmain(...)

{

WNDCLASS wndcls

wnd cls cbclsextra = 0;

p>

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 y wnd cls (referenciado desde ventana)

Crear. Ventana:

HWND hwnd

hwnd=CreateWindow(

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

Las coordenadas de la ventana,

Las coordenadas de la ventana,

Largo,

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);

Ventana de actualización (hwnd); primero Usa estas dos oraciones

Mensaje mensaje // Crear mensaje

while(GetMessage(& Msg, Null, 0 (filtro), 0 (filtro))

{

Traducir mensaje(&MSG);

enviar mensaje(amp;MSG);

}

Como arriba, WINMAIN

generalmente se puede copiar siempre que sea posible.

Función del 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 copiando y luego editando el real parte de procesamiento de mensajes.

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

{

Caso:..

Caso WM_PAINT:

HDC hDC

PAINTSTRUCT ps

hDC-comenzar pintura(hwnd & PS);

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

capa final (hwnd&ps);

break; //redibujar

Caso WM_CLOSE:

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

destroy window(hwnd); //Función de cierre de ventana

Caso WM_DESTROY:

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 |

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);

Ventana de actualización (hwnd); /p>

while(GetMessage(& msg, NULL, 0, 0))

{

Traducir mensaje(& msg);

despachar mensaje(amp;MSG);

}

Devuelve 0;

}

QQ107395975