Problemas de programación en lenguaje C de Windows
Para ser honesto, también estoy buscando información en esta área.
Te mostraré un poco.
El programa C de Windows más simple.
#include
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, "¡Hola, bienvenido al entorno de aprendizaje y experimento integrado de Turbo C para Windows!", "Mi primer programa de Windows", MB_OK);
devuelve 0;
}
El resultado de la ejecución del programa es:
Análisis del programa:
1. Windows.h es un archivo de encabezado requerido por cada programa de Windows.
2. La función WinMain es la entrada a todos los programas de Windows C, similar a la función principal en DOS C.
3. MessageBox es una función API de Win32 (API, interfaz de programación de aplicaciones). Su función es abrir un cuadro de diálogo para mostrar el contenido del mensaje. El primer parámetro de esta función se utiliza para especificar el identificador de la ventana principal, es decir, el identificador de la ventana donde se encuentra el cuadro de diálogo. El segundo parámetro se utiliza para mostrar el contenido del mensaje (puede modificarlo según lo que desee mostrar). El tercer parámetro es el título del cuadro de diálogo, como "Mi primer programa de Windows" en este ejemplo. El cuarto parámetro es el botón que se muestra en el cuadro de diálogo especificado. Pruébelo, cambie MB_OK a MB_OKCANCEL y ejecute el programa. ¿Qué pasará? Intente cambiarlo a MB_RETRYCANCEL
Intente cambiar un programa de DOS C que calcula la suma de 1+2+3+…+100 a un programa de Windows.
#include "stdio.h"
main()
{
int sum=0,i;
for(i=1;i<=100;i++)
{
suma=suma+i;
}
printf("La suma de los números naturales del 1 al 100 es: %d\n",sum);
}
Programa de referencia:
# incluir
#include
#include
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance ,PSTR szCmdLine, int iCmdShow)
{
int sum=0,i;
char str1[40]="1-100 número de libro natural La suma es: ",str2[10];
for(i=1;i<=100;i++)
{
suma=suma+ i ;
}
itoa(sum,str2,10); /*Convierta el resultado de la operación de la variable entera suma en la cadena str2 para una visualización conveniente*/
strcat(str1,str2); /*Conecta el valor de str1 (la suma de 1-100 números naturales es:) con str2 para una fácil visualización*/
MessageBox(NULL,str1," El segundo programa Win32",MB_OK);
devuelve 0;
}
Resultados de la ejecución:
2. Introducción a los programas de Windows
(1) Composición del programa Windows C:
1.Archivo fuente del programa C, con extensión .c o .cpp
2.Archivo de encabezado, El la extensión es .h
3. El archivo de recursos tiene la extensión .rc
(2) La estructura de composición del programa fuente
El programa Windows C tiene una estructura relativamente fija La estructura básica generalmente incluye la función de entrada WinMain y la función de ventana.
1. La función WinMain
es la entrada a todos los programas de Windows C, similar a la función principal de DOS C. Su función es completar una serie de definiciones y trabajos de inicialización. y generar un bucle de mensajes. El bucle de mensajes es el núcleo de todo el programa.
La función WinMain tiene tres componentes básicos: descripción de la función, inicialización y bucle de mensajes.
a. Descripción de la función WinMain:
int WINAPI WinMain(HINSTANCE hInstance. , HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
Descripción del parámetro:
hInstance El identificador de instancia actual de la aplicación
hPrevInstance El identificador de instancia anterior, en 32 sistemas de bits Este parámetro siempre es NULL
Parámetros de línea de comando szCmdLine cuando el programa se está ejecutando
iCmdMostrar el modo de visualización cuando el programa se está ejecutando, como maximizar, minimizar, ocultar la visualización, etc. .
b. Inicialización
La inicialización incluye cuatro partes: definición de la clase de ventana, registro, creación de una instancia de ventana y visualización de la ventana.
Este es un formato fijo. Todos los programas de Windows son básicamente iguales. Sólo recuérdelo. Para obtener más detalles, consulte los comentarios sobre los ejemplos de programas a continuación.
2. Función de ventana
La función de ventana define la respuesta del programa Windows C a diferentes mensajes recibidos, lo que incluye el procesamiento por parte de la aplicación de varios mensajes que pueden recibirse. declaraciones de control de rama de procesamiento de mensajes. Por lo general, las funciones de ventana constan de una o más declaraciones de cambio. Cada declaración de caso corresponde a un mensaje. Cuando la aplicación recibe un mensaje, ejecutará el módulo de programa bajo la declaración de caso correspondiente para completar la función correspondiente.
Descripción de la función de ventana:
LRESULT CALLBACK WndProc (HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
Descripción del parámetro:
identificador de ventana hwnd
mensaje representa el valor del mensaje que se está procesando
wParam es el parámetro adicional del mensaje, que es más información del mensaje
lParam es el parámetro adicional del mensaje. Es más información sobre el mensaje.
Uso general:
LRESULT CALLBACK WndProc (HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam) p>
{
...
cambiar (mensaje)
{
caso constante 1:
...
caso constante 2:
...
...
caso WM_DESTROY:
PostQuitMessage (0) ; / /Insertar un mensaje de "salida" en la cola de mensajes
return 0 ;
}
return DefWindowProc (hwnd , message, wParam, lParam);// Ejecutar el procesamiento de mensajes predeterminado
}
El cuerpo principal de la función de ventana es la declaración de procesamiento de mensajes, que se compone de una serie de casos. declaraciones. Nuestros alumnos deben escribir los controladores correspondientes en la declaración del caso en función de los mensajes que la ventana puede recibir.
3. Un programa sencillo de Windows C: programa Hello World
#include
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM ); //Declaración de función de ventana
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) //Descripción de función WinMain
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ; // Identificador de ventana
MSG msg //Estructura del mensaje
WNDCLASS wndclass; ; //Estructura de clases de ventana
//La siguiente es la definición de clase de ventana
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //Carga el icono para uso del programa
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) //Carga el puntero del mouse para uso del programa
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//Obtiene un objeto gráfico; en este ejemplo, utiliza el pincel para dibujar el fondo de la ventana
wndclass.lpszMenuName = NULL;
wndclass. lpszClassName = szAppName ;
//A continuación se muestra el registro de la clase de ventana
if (!RegisterClass (&wndclass))//Registra la clase de ventana para el programa. ventana
{
return 0 ;
}
//Crea una ventana basada en la clase de ventana
hwnd = CreateWindow (szAppName, TEXT ("Un programa Win32 simple"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT ,
NULL,
NULL,
hInstance,
NULL
)
//Ventana de visualización
ShowWindow (hwnd, iCmdShow)
UpdateWindow (hwnd) //Indica a la ventana que se actualice sola
//Bucle de mensajes
while (GetMessage (&msg, NULL, 0) , 0 ))
{
TranslateMessage (&msg) //Convierte algunos mensajes del teclado
DispatchMessage (&msg) //Envía el mensaje a la ventana procedimiento
}
return msg.wParam;
}
//Función de ventana
LRESULT CALLBACK WndProc (HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
cambiar (mensaje)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps); dibujo
GetClientRect (hwnd, &rect); //Obtener el tamaño del área del cliente de la ventana
DrawText (hdc, TEXT ("¡Hola mundo!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER); //Mostrar Hola Mundo, puedes modificar el contenido que deseas mostrar en el programa
EndPaint (hwnd, &ps); dibujo
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) //Inserta un mensaje de "salida" en la cola de mensajes
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//Realizar el procesamiento de mensajes predeterminado
}
Consejos: este programa El código fuente se encuentra en "Ejemplos simples de programas introductorios"
Resumen
La estructura básica de todos los programas de Windows es igual o similar a la anterior. ejemplos (Nota: algunos programas son La esencia de sellar la clase de ventana y la ventana de la máquina de ventana en una función y llamarla es lo mismo. Recuerde un ejemplo y modifíquelo cuando escriba otros programas).
Nota: El programa anterior no tiene archivos de recursos. En "Ejemplo de programa de inicio simple", hay un código fuente del programa Bloc de notas con archivos de recursos y una interfaz de ejecución del programa.
Si aún no es suficiente, puedes ir a mi blog/hacker water mirror/blog