Código fuente en lenguaje C de la interfaz de Windows
Pruébalo, no sé si se puede ejecutar en BORLAND C.
#include
LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance, p>
p>
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName []="MainWClass ";
WNDCLASSEX wndclass;
// Rellena la estructura WNDCLASSEX con parámetros que describen la ventana principal
wndclass.cbSize=sizeof(wndclass ); // Tamaño estructural
wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_OWNDC; // Especificar el rediseño si el tamaño cambia
wndclass.lpfnWndProc=MainWndProc; // Puntero de función de ventana
wndclass.cbClsExtra=0; // Sin memoria de clase adicional
wndclass.cbWndExtra=0; // Sin memoria de ventana externa
wndclass.hInstance=hInstance; // Identificador de instancia
wndclass.hIcon=::LoadIcon(NULL,IDI_APPLICATION); // Usar iconos predefinidos
wndclass.hCursor=::LoadCursor(NULL,IDC_ARROW); / Usar cursor predefinido
wndclass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH); // Usar pincel de fondo blanco
wndclass.lpszMenuName=NULL; /p>
wndclass.lpszClassName=szClassName; // Nombre de la clase de ventana
wndclass.hIconSm=NULL; // Icono pequeño sin clase
// Registro de esta clase de ventana
::RegisterClassEx(&wndclass);
// Crea la ventana principal
HWND hwnd=::CreateWindowEx(
0, // dwExStyle, estilo extendido
szClassName, // lpClassName, nombre de clase
"Ventana", // lpWindowName, título
WS_OVERLAPPEDWINDOW, // dwStyle, estilo de ventana
CW_USEDEFAULT,
// Altura
NULL, // hWndParent, identificador de ventana principal
NULL, // hMenu, identificador de menú
hInstance, // hInstance, identificador de instancia de programa
p>NULL); // lpParam, datos del usuario
if(hwnd==NULL)
{
::MessageBox (NULL," ¡Error al crear la ventana!","Error",MB_OK);
return -1;
}
// Muestra la ventana y actualiza el área del cliente de la ventana
p>::ShowWindow(hwnd,nCmdShow);
::UpdateWindow(hwnd);
// Elimina el mensaje del cola de mensajes y entréguelo a la función de ventana para su procesamiento Hasta que GetMessage devuelva FALSO, finalice el bucle de mensajes
MSG msg;
while(::GetMessage(&msg,NULL,0). ,0))
{ p>
//Convertir mensaje de teclado
::TranslateMessage(&msg);
//Enviar el mensaje a la función de ventana correspondiente
:: DispatchMessage(&msg);
}
// El programa finaliza cuando GetMessage devuelve FALSE
return msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hwnd, mensaje UINT, WPARAM wParam, LPARAM lParam)
{
char szText[]="¡El programa de ventana más simple!" ;
switch(message)
{
case WM_PAINT:
{
HDC hdc;
p>PAINTSTRUCT ps;
hdc=::BeginPaint(hwnd,&ps);
:: EndPaint(hwnd,&ps);
retorno 0;
}
caso WM_DESTROY:
::PostQuitMessage(0);
devuelve 0;
}
devuelve ::DefWindowProc(hwnd,message,wParam,lParam);
}