Programación de red Sun Xin vc
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>
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, p>
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)) p >
{
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); p>
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