programaciÓn multimedia programaciÓn en windows. programación multimediaprogramación en windows...
TRANSCRIPT
PROGRAMACIÓN MULTIMEDIA
PROGRAMACIÓN EN WINDOWS
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
2
Programación Multimedia Programación en Windows
Estructura de un programa Windows
Mensajes
Compilación de un programa Windows
Aportaciones de la programación en Windows
Ejemplos de mensajes
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
3
Programación Multimedia Programación en Windows
Diseño de interfaces
Transparencia
Multitarea
Aportaciones de la programación en Windows
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
4
Programación Multimedia Programación en Windows
Compilación de un programa Windows
- Diferencia los recursos (menús, iconos, diálogos, bitmaps) del código.
- Archivos implicados:*.rc , *.ico -> *.res*.c , *.h -> *.obj*.obj, *.res, *.def -> *.exe
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
5
Programación Multimedia Programación en Windows
Compilación de un programa Windows (2)
/* generic.h*/
#define IDM_DOIT 1#define IDM_QUIT 2
int ghInstance;char gszAppName[] = “generic”;
long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
6
Programación Multimedia Programación en Windows
Compilación de un programa Windows (3)
Archivos RC:
/*generic.rc */#include <windows.h>#include “generic.h”generic ICON generic.icogeneric MENU BEGIN
MENUITEM “&Do It!” IDM_DOITMENUITEM “&Quit”, IDM_QUIT
END
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
7
Programación Multimedia Programación en Windows
Compilación de un programa Windows (y 4)
Archivos DEF:
NAME GENERICDESCRIPTION ‘generic windows program’EXETYPE WINDOWSSTUB ‘WINSTUB.EXE’CODE PRELOAD MOVEABLEDATA PRELOAD MOVEABLE MULTIPLEHEAPSIZE 1024STACKSIZE 5120EXPORTS WndProc
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
8
Programación Multimedia Programación en Windows
Estructura de un programa Windows
La mayoría de los programas en Windows tienen dos funciones comunes:
- Winmain()- WndProc()
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
9
Programación Multimedia Programación en Windows
Estructura de un programa Windows (2)
WinMain() - Es el punto de entrada y salida del programa.
- Se encarga del aspecto de la ventana principal.
- Contiene el bucle de mensajes.
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
10
Programación Multimedia Programación en Windows
Estructura de un programa Windows (3)
WndProc() - Se la conoce como “función de procesado de mensajes”.
- En ella se escribe el código del programa.
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
11
Programación Multimedia Programación en Windows
Estructura de un programa Windows (4)
#include <windows.h>
long FAR PASCAL WndFunction (HWND, WORD, WORD, LONG);
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ static char szAppName[]= "GENERIC",
szTitleBar[]= "Title Bar";
HWND hwnd; WNDCLASS wndclass; MSG msg;
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
12
Programación Multimedia Programación en Windows
Estructura de un programa Windows (5)
if (! hPrevInstance) { wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndFunction; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground= GetStockObject (WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName= szAppName; RegisterClass (&wndclass);
}
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
13
Programación Multimedia Programación en Windows
Estructura de un programa Windows (6)
hwnd= CreateWindow (szAppName, szTitleBar, WS_OVERLAPPEDWINDOW, 0, /* x position for this window */ 0, /* y position for this window */ 320, /* window width is 320 dots */ 240, /* window height is 240 dots */ NULL, NULL, hInstance, NULL);
ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd);
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
14
Programación Multimedia Programación en Windows
Estructura de un programa Windows (7)
while (TRUE == GetMessage (&Message,0,0,0))
{TranslateMessage (&Message);DispatchMessage (&Message);
}
}
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
15
Programación Multimedia Programación en Windows
Estructura de un programa Windows (8)
long FAR PASCAL WndFunction (HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{ HDC hdc; PAINTSTRUCT ps; RECT rect;
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
16
Programación Multimedia Programación en Windows
Estructura de un programa Windows (y 9)
switch (wMsg) {
case WM_PAINT: hdc= BeginPaint (hWnd, &ps); GetClientRect (hWnd, &rect);
DrawText (hdc, "Application Window", -1, &rect, DT_SINGLELINE | DT_CENTER |
DT_VCENTER); EndPaint (hWnd, &ps); return (0);
break;
case WM_DESTROY: PostQuitMessage (0); return (0);
break; default: return (DefWindowProc (hWnd, wMsg, wParam,
lParam));}
}
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
17
Programación Multimedia Programación en Windows
MensajesInterrupciones
“Hardware”
Cola de mensajes
GetMessage()TranslateMessage()DispatchMessage()
WndProc()
DefWindowProc()
Hook()
Bucle de mensajes
Lógica y acciones del programa
Procesado de mensajes “por defecto”
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
18
Programación Multimedia Programación en Windows
Mensajes (2)
Cola de mensajes
Bucle de mensajes
WndProc()
Hardware
PostMessage()
TransMessage
SendMessage()
Otras aplicaciones. PostMessage()
Otras aplicaciones. SendMessage()
DispatchMessage()
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
19
Programación Multimedia Programación en Windows
Mensajes (3)/* Estructura mensaje*/
typedef struct tagMSG{
HWND hwnd;WORD message;WORD wparam;LONG lparam;DWORD time;POINT pt;
} MSG;
typedef MSG *PMSGtypedef MSG NEAR *NPMSGtypedef MSG FAR *LPMSG
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
20
Programación Multimedia Programación en Windows
Mensajes (y 4)
Funciones para controlar la prioridad de las aplicaciones:
- GetMessage()
- PeekMessage()
- WaitMessage()
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
21
Programación Multimedia Programación en Windows
Ejemplos de Mensajes
BM_ : Mensaje de botón.
BM_GETCHECKBM_SETCHECK
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
22
Programación Multimedia Programación en Windows
Ejemplos de Mensajes (2) CB_: Mensaje de “Combo Box”
CB_ADDSTRINGCB_FINDSTRINGCB_FINDSTRINGEXACT CB_GETCURSEL CB_GETLBTEXT CB_GETLBTEXTLENGTH CB_SELECTSTRING
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
23
Programación Multimedia Programación en Windows
Ejemplos de Mensajes (3) EM_: Mensaje de caja de texto EM_LIMITTEXT LB_: Mensaje de “List Box” LB_ADDSTRING LB_GETCURSEL LB_GETTEXT LB_GETTEXTLEN LB_INSERTSTRING
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
24
Programación Multimedia Programación en Windows
Ejemplos de Mensajes (4) SBM_: Mensaje de “Scroll Box” SBM_GETPOS SBM_GETRANGE SBM_GETSCROLLINFO SBM_SETPOS SBM_SETRANGE SBM_SETSCROLLINFO
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
25
Programación Multimedia Programación en Windows
WM_: Todos los demás mensajes WM_CHAR WM_KEYDOWN WM_KEYUP WM_CREATE WM_DEADCHAR
WM_GETMINMAXINFOWM_GETTEXTWM_GETTEXTLENGTH WM_INITDIALOG WM_DESTROY
Ejemplos de Mensajes (5)
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
26
Programación Multimedia Programación en Windows
Ejemplos de Mensajes (6)
WM_PAINT WM_QUIT
WM_HSCROLL WM_VSCROLL WM_SETTEXT WM_TIMER
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
27
Programación Multimedia Programación en Windows
Ejemplos de Mensajes (7)
Mensaje WM_PAINTDefinición:
Una aplicación envia un mensaje WM_PAINT cuando Windows u otra aplicación hace una petición para pintar una porción de la ventana de la aplicación. El mensaje es enviado cuando las funciones UpdateWindow o RedrawWindow son llamadas o por la función DispatchMessage cuando la aplicación obtiene un mensaje WM_PAINT tras el uso de las funciones GetMessage o PeekMessage.
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
28
Programación Multimedia Programación en Windows
Descripción:
Este mensaje no tiene parámetros.
Valor de retorno:
Una aplicación debe retornar con cero si procesa este mensaje.
Ejemplos de Mensajes (8)
© Carlos A. Lázaro Carrascosa. Laboratorio de Comunicación Oral R.W.N.
29
Programación Multimedia Programación en Windows
Acción por defecto:
La función DefWindowProc valida la región a actualizar. La función también enviará un mensaje WM_NCPAINT al procedimiento de ventana si el marco de la ventana ha de ser pintado y envía un mensaje WM_ERASEBKGND si el fondo de la ventana debe ser borrado.
Ejemplos de Mensajes (y 9)
PROGRAMACIÓN MULTIMEDIA
PROGRAMACIÓN EN WINDOWS