"Ningún juego dura tanto hasta que te lo terminas como el que te programas tú mismo,
ninguno te absorbe tanto y ninguno te produce tanta satisfacción cuando lo has acabado"
Programacion de videojuegos
Inicio Curso de programación de juegos 2. El programa basico Windows
Domingo 22 de Octubre del 2017

Menu principal
Colaborar (con PayPal)

Para continuar con el trabajo de esta Web y poder pagar el hosting, viene bien la ayuda que sea. Gracias a todos.

Importe: 

Ultimas descargas
19.Jan

Clase que permite dibujar texto en OpenGL con mucha facilidad.Usa FreeType2.Para ver que hace y c...


2. El programa basico Windows Imprimir Correo electrónico
Videojuegos - Curso de Programación de juegos
Escrito por Vicengetorix   

El  programa basico con el que empezaremos a trabajar. Primero creamos un programa minimo al que ir añadiendo cosas
e ir compilando y viendo como queda. No es muy ortodoxo, pero no somos profesionales. ¡Al tema!...




Empezamos a codificar con el programa basico para windows, que sera el esqueleto sobre el que se 
sostendra nuestro programa.
Como en cualquier programa C o C++, primero incluimos los ficheros ".h" o ".hpp", definimos variables
globales y comienza la ejecucion con el contenido de la funcion "main" (en windows WinMain).

Merecen mencion tres partes definidas del programa.

Primero la funcion ProcesaMensajes que se puede llamar como queramos. Esta funcion es para tratar los
mensajes del sistema operativo como necesitemos. Por ahora solo tendremos encuenta la tecla ESC y la
destruccion de la ventana para evitar que no haya forma de salir de nuestro programa y tengamos que
cargarnoslo a lo bruto. Esta funcion se asociara mas tarde a la ventana que crearemos.

Las dos partes restantes estan dentro de la funcion WinMain, aunque podrian definirse en funciones
independientes y llamarlas desde WinMain; a gusto del programador.

La segunda define y crea una ventana asociada a nuestro programa. Esta ventana no hace ahora nada,
pero mas adelante sera usada como "pizarra de dibujo" con OpenGL. A esta ventana se asocia la funcion
ProcesaMensajes, de forma que intercepte los eventos del windows que tengan lugar en esta ventana.

La tercera parte es el bucle basico de un programa windows, ejecutandose continuamente y procesando
los mensajes hasta que recibe el mensaje de terminar el programa (lo lanzamos nosotros al destruir la
ventana con el comando PostQuitMessage(0);). Al salir de este bucle el programa termina.

El ejemplo de programa completo que no hace nada es este:


 

 

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
 
#include <windows.h> // Fichero de inclusion para programas Windows
 
 
HINSTANCE IdAplicacion; // Para guardar el identificador del programa
HWND IdVentana; // Para guardar el identificador de la ventana
 
//------------------------------------------------------------------
// Funcion para controlar lo que ocurre en la ventana segun los eventos
// que vienen de Windows. Mas tarde se asocia a la ventana que crearemos.
// De momento solo interceptamos la tecla ESC para poder salir del
// programa cuando queramos y el evento de destruccion de ventana con el
// que terminamos la aplicacion
LRESULT FAR PASCAL ProcesaMensajes(HWND Ventana, UINT Mensaje,
WPARAM wParam, LPARAM lParam)
{
switch(Mensaje) // Según el mensaje recibido
{
case WM_KEYDOWN: // Caso de mensaje de pulsación de una tecla
// y segun el contenido de la variable wParam
switch(wParam)
{
case VK_ESCAPE: // ESC causa la salida del programa
// Funcion para enviar mensaje de cerrado a la ventana
// y despues de la aplicacion
PostMessage(Ventana, WM_CLOSE, 0, 0);
break;
}
break;
 
// Mensaje de destrucción de la ventana (provocado por
// nosotros al pulsar ESC o cerrar la ventana.
case WM_DESTROY:
 
PostQuitMessage(0); // Funcion para salir del programa
break;
}
// Efectuar el proceso por defecto del mensaje (si viene
// cualquier mensaje que no hemos usado, querremos que haga
// lo que suele hacer)
return DefWindowProc(Ventana, Mensaje, wParam, lParam);
} // fin ProcesaMansajes
//------------------------------------------------------------------
 
 
//------------------------------------------------------------------
// Funcion principal de un programa Windows
// (como main en C normal, aqui WinMain)
// el programa empieza a ejecutarse a partir de esta funcion.
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
// Para que no moleste al compilar, no lo usamos.
UNREFERENCED_PARAMETER(lpszCmdLine);
// Guardo el identificador del programa, luego lo usamos.
IdAplicacion = hInstance;
 
// Declaramos un tipo de ventana, el nuestro.
WNDCLASS ClaseVentana;
 
//Definimos nuestro tipo de ventana...
 
// Se redibujara si cambia el tamaño de la ventana
// horizontal y verticalmente, y un solo DC (device context)
// para cada ventana (para cuando empezemos con OpenGL)
ClaseVentana.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
// La definimos antes para contolar
// los mensajes como los del teclado.
ClaseVentana.lpfnWndProc = ProcesaMensajes;
// Sin memoria extra para la clase.
ClaseVentana.cbClsExtra = 0;
// Sin memoria extra para la ventana.
ClaseVentana.cbWndExtra = 0;
// Identificador del programa para asociar
// esta ventana con este programa.
ClaseVentana.hInstance = IdAplicacion;
// De momento pasamos de icono.
ClaseVentana.hIcon = NULL;
// Flecha normal de raton.
ClaseVentana.hCursor = LoadCursor(NULL, IDC_ARROW);
// Por ahora ponemos el fondo blanco.
ClaseVentana.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
// Pasamos de menu.
ClaseVentana.lpszMenuName = NULL;
// Nombre de la clase (la "L" antes de la cadena es
// por que solo admite cadenas de caracteres
// unicode -LPCWSTR o TCHAR- y con la "L" se convierte).
ClaseVentana.lpszClassName = L"UnSitioWeb";
 
// Registramos nuestro tipo de ventana.
RegisterClass(&ClaseVentana);
 
// Funcion que crea la ventana. Guardamos el identificativo.
IdVentana = CreateWindowEx(
WS_EX_APPWINDOW, // estilo extendido de ventana
L"UnSitioWeb", // Nombre de la clase puesto antes
//(la "L" antes para convertir a UNICODE)
L"Un Sitio Web", // Titulo que aparecera en la ventana.
// Parametros de como sera la ventana,
// se pueden combinar varios.
WS_POPUPWINDOW|WS_CAPTION|WS_MINIMIZEBOX,
100, // Posicion Horizontal.
100, // Posicion Vertical.
600, // Ancho de la ventana.
450, // Alto de la ventana.
(HWND) NULL, // No depende de otra ventana.
// No le damos un menu diferente al de la clase
// (que es ninguno).
(HMENU) NULL,
// Identificador del programa al que pertenece
// la ventana. Al empezar lo guardamos en una
// variable para usarlo despues.
IdAplicacion,
// Puntero a "no se que" datos (pasamos del tema,
// es para aplicaciones MIDI).
(LPVOID) NULL );
 
 
 
ShowWindow(IdVentana, SW_SHOW); // Mostramos nuestra ventana.
// La actualizo para que muestre lo que tenga que
// mostrar (ahora nada).
UpdateWindow(IdVentana);
 
// Este es el bucle habitual de windows que se esta
// ejecutando continuamente hasta que recibe el mensaje
// de acabar (ya lo hemos preparado en la funcion
// "ProcesaMensajes" asociada a la ventana, tambien
// asociada a este programa atraves de su identificativo).
 
// Varible para contener los mensajes que van llegando.
MSG Mensaje;
while(TRUE) // Se ejecuta continuamente.
{
// Exploramos la cola de mensajes.
if(PeekMessage(&Mensaje, NULL, 0, 0, PM_NOREMOVE))
{// procesándolos adecuadamente
if(!GetMessage(&Mensaje, NULL, 0, 0))
// En este caso terminamos.
return (int)Mensaje.wParam;
 
TranslateMessage(&Mensaje);
DispatchMessage(&Mensaje);
}
// en caso contrario esperamos un mensaje.
else WaitMessage();
}
 
} // fin WinMain
//------------------------------------------------------------------
 
 

Seguiremos despues inicializando OpenGL en un programa Windows.



¡Sólo los usuarios registrados pueden escribir comentarios!
+/- Comentarios
Buscar
Anónimo  - re: Error   |95.39.46.xxx |20-10-2012 15:54:22
Jesús escribió:
Hola, al copiar el código que habeís puesto, no me da ningún error de
compilación, pero la ventana vacía que deveria aparecer, no lo hace
y en la pantalla de resultados del Visual studio c++ aparece este
mensaje repetidas veces:

Cannot find or open the PDB file

Hay alguna
solución para este problema
Muchas gracias,
SALUDOS,
Jesús


Lo siento, indagando un poco mas, me he dado cuenta de que es un error
del Linker que no reconoce el winmain, he visto que le comentabas
a alguien como cambiarlo, pero no lo he encontrado en las propiedades
del proyecto en visual studio 2010
Muchas gracias de nuevo ^^
Vicengetorix   |87.221.180.xxx |21-10-2012 18:12:48
En las propiedades del proyecto, en el apartado "vinculador", el
parametro "subsistema" se debe poner "windows"(la opcion del
despleglable.
Todo esto es en VC2008.
Otra opcion es bajar el proyecto de
ejemplo de la zona de descargas y abrirlo con el VC2010. Lo mas probable es que
lo convierta automaticamente.
Jesús  - Error   |95.39.46.xxx |20-10-2012 00:30:01
Hola, al copiar el código que habeís puesto, no me da ningún error de
compilación, pero la ventana vacía que deveria aparecer, no lo hace y en la
pantalla de resultados del Visual studio c++ aparece este mensaje repetidas
veces:

Cannot find or open the PDB file

Hay alguna solución para este
problema
Muchas gracias,
SALUDOS,
Jesús
Nezumiwriter  - Ventana indefinida   |83.165.242.xxx |23-05-2012 15:05:02
Buenos días
Encontré hoy esta página buscando información para iniciarme con
OpenGl. El problema es que tras haber leído esta página y intentar crear mi
propia ventana esta no se crea.

Mas info del problema:
Uso windows7
El proceso
se crea y consume toda la CPU
Aparece la tarea en la barra de tareas
La ventana
no se crea, es invisible

Código del programa:
http://pastebin.ca/2152782
(lo
subi a pastebin para no saturar los comentarios con un código de
programa)

Agradecería que me ayudara
Gracias por su atención
Vicengetorix   |87.221.218.xxx |23-05-2012 19:39:34
A bote pronto faltan cosas (que estan en el capitulo).
En la funcion de
procesado de mensajes no se tiene cuidado de hacer nada para poder cerrar la
aplicacion ni se procesan los mensajes por defecto.
Al crear la ventana falta
registrarla en windows "RegisterClass(&ClaseVentana)".
Nezumiwriter  - Duda y solucionado   |83.165.242.xxx |23-05-2012 21:28:33
Si, tienes razón, me faltaba parte del procesado de mensajes, ahora mismo lo
añado.

Y ya usara "RegisterClass(&ClaseVentana)" linea
49.

¡FUNCIONA! -> Conclusión: Lo que faltaba era el procesado de mensajes.


Duda: Pero no entiendo por que era tan importante el procesador de mensajes
como para que no se ejecutara la aplicación. Yo creía que el procesado de
mensajes solo era para tener en cuenta interrupciones creadas por el usuario
para que la aplicación actuara de una u otra forma, ya veo que no es
así.

Gracias por la ayuda... y buena página para aprender a usar OpenGL :)
Vicengetorix   |87.221.218.xxx |23-05-2012 22:10:43
¿Quien sabe que pasa en las interioridades de windows?
Supongo que el
procesado por defecto (DefWindowProc) realiza tareas importantes como el pintado
de la ventana (evento que pide pintar)
Jonathan   |Registered |10-01-2012 23:22:13
Disculpen ! es una genialidad esta pagina :D! me parece muy bien la idea de un
tutorial asi en castellano.. aunque se mucho ingles y lo entiende de 10 aun
asi.. es mucho esfuerzo de su parte :D ! voy a empezar a hacerlo.. usaba VB.. y
me dieron ganas de usar C·· .. el tema es que. no se usar bien el compilador y
como que creo que no es tan novato el tutorial :P !
jaja :P .. no entendi como
teng oq hacer para empezar
abro u nuevo proyeecto pero tengo muchas opciones y
etc.. consola w32 aplicacion win 32 xD ... supuse q era AP w32 clickie y ya me
apareci un proyecto BASE.. osea abian muchas cosas ya escritas en el code Y NO
ENTENDI NAD
borre todo puse tu codigo y no compila -.-" espero qm ep uedan
ayudar: D gracias
Vicengetorix   |SAdministrator |13-01-2012 20:09:26
Para que veas un proyecto sin tanta... cosa rara te sugiero que te bajes el
proyecto de VC2005 que hay en la zona de descargas (el VC mas moderno lo
convierte sin problemas al abrirlo).
En todo caso si entiendes ingles en la
pagina de Microsoft o en la ayuda del VC encontraras buenas explicaciones de las
opciones.
Anubiz  - Me da un Error     |190.142.60.xxx |23-06-2010 00:18:34
buenas =) primero ke nada agradesco por realizar este tutorial.. y dedicarle
tiempo a enseñar y realizar manuales para personas que quieran inicarse a esto
ke es la programacion...en especial de videojuegos... weno mi pregunta es ke
por ke me da un error en la linea:

ClaseVentana.lpszClassName =
L"UnSitioWeb";

no se si tenga ke ver ke uso otro compilador.. pero no
deveria funcionar? :/ el compilador me da error y no me permite continuar la
ejecucion del programa. spero ke me digan...

weno gracias nuevamente....
Vicengetorix   |194.179.126.xxx |23-06-2010 19:40:45
Este tema se trata un poco más arriba.
En todo caso, si estas con otro
compilador, lo más normal es que tengas que quitar la "L" de delante de
la cadena de caracteres.
Usando otro compilador estas cosas son lo normal, que
haya que hacer algunos cambios para que funcione. Más adelante encontraras que
las librerías que se usan en VC no funcionan en otros compiladores.
volos  - fatal error C1010   |186.81.102.xxx |07-08-2011 04:56:53
Hola esta muy buo el contenido de la web, tengo windowas 7 64, y visual c++ 2008
express. Copio y pego el codigo tal cual, y me da el siguiente error:

fatal
error C1010: final de archivo inesperado al buscar la directiva de encabezado
precompilado. Compruebe si olvidó agregar '#include "stdafx.h"' al
código fuente?

Si me podira indicar que debo corregir lo agradeceria.

Gracias
Vicengetorix   |85.53.217.xxx |09-08-2011 13:15:31
Supongo que el problema es que tienes añadido al proyecto el fichero stdafx.cpp
y no has incluido el encabezamiento.
Simplemente elimina los dos del proyecto y
olvidate de ellos.
Tomas  - Problema en una parte del codigo.     |201.246.136.xxx |30-04-2010 00:43:15
Hola, siguiendo al pie de la letra el curso, he copiado y pegado lo que has
escrito, y me ha dado el siguiente error: "cannot convert `const wchar_t*'
to `const CHAR*' for argument `2' to `HWND__* CreateWindowExA(DWORD, const
CHAR*, const CHAR*, DWORD, int, int, int, int, HWND__*, HMENU__*, HINSTANCE__*,
void*)'

Me salta el error en la línea 116.

¿Alguna idea?

Gracias!
Vicengetorix   |194.179.126.xxx |30-04-2010 12:14:07
He vuelto a compilar el codigo copiandolo de la web en vc2005 y no me da
problemas.

¿No habras quitado una "L" que estaba puesta delante de las
comillas de la cadena de caracteres?

Si no es asi, puede ser algo de la
configuracion del proyecto. Puedes bajarte el proyecto VC de ejemplo de la zona
de descargas y usarlo o, por lo menos, ver las opciones.

Por favor, en el foro
me resulta mas comodo contestar.
Vicengetorix   |194.179.126.xxx |30-04-2010 12:32:29
... o bien pensado, mejor prueba a quitar la "L". Por alguna razon tu VC
convierte la funcion CreateWindowEx a CreateWindowExA, que es una version sin
unicode.
Tomas  - Probando     |201.246.169.xxx |01-05-2010 07:24:12
En primera instancia me dió un error con "ClaseVentana.lpszClassName =
L"UnSitioWeb";". Le quité la "L" y paso el error. Luego me
arrojó el que te escribí hace poco.

Como me decías traté de quitar la L en
las cadenas que estaban dentro de la funcion CreateWindowEx y funcionó, no me
arroja el error. Sin embargo, ahora se presenta este error "undefined
reference to `_GetStockObject@4'|".

Ahora, como dato aparte, te cuento
que estoy usando la utlima versión de Code::Blocks (8.02), no si te ayuda en
algo eso.
Vicengetorix   |194.179.126.xxx |01-05-2010 13:06:24
Claro, eso lo cambia todo, sobre todo el compilador que uses.
El codigo del
curso esta probado en VC2005
En DEV-C (MinGW) funciona con pocas modificaciones
y por lo que veo con el compilador que usas tu tambien.
El error es de linkaje.
Ya ha complilado el codigo pero cuando lo quiere enlazar no encuentra la funcion
en ninguna libreria. Es un tema de las librerias que enlaces al proyecto. Debes
enlazar las necesarias para windows con gdi32.
Tomas  - ¡Ha resultado!     |201.246.130.xxx |01-05-2010 17:52:49
Siguiendo tus indicaciones he conseguido hacer funcionar el código agregando
las librerías, que trae el MinGW, a las opciones del Linker, he hecho click a
Build and Run, y ha generado una ventana sin errores en el build log.

Las
librerías que agregué estan en la dirección
"CodeBlocks\MinGW\lib\" y con solo agregar
"libgdi32.a" me ha funcionado a la primera.

¡Gracias!

PD: Lo siento,
la proxima vez usaré el foro.
Pablo  - Far Pascal   |190.190.191.xxx |04-01-2010 18:16:03
Tengo una duda, que hace el far pascal? por que en vez de ponerle function se
pone LRESULT FAR PASCAL?,
Desde ya muchas gracias
Vicengetorix   |194.179.126.xxx |08-01-2010 23:15:14
Son modificadores de como se llama a la funcion.
LRESULT es el tipo de dato que
devuelve.
FAR es la forma de llamar al procedimiento, el tipo de puntero usado
para llamarlo. En realidad no creo que haga falta ponerlo pero se pone por
costumbre.
PASCAL es la convencion de llamada, la forma en como se pasan los
parametros a la funcion.
Estas cosas estan bien saberlas pero normalmente pones
la funcion como se ve en los ejemplos y funciona. Es buena la curiosidad.

Por
favor, para estas dudas es mejor el foro que es mas visible por la gente y tus
dudas le sirven a otros.
Fabiansn  - re: Error   |85.53.197.xxx |23-11-2011 19:19:00
Armando escribió:
Buena pagina!!!

Yo tengo el siguiente error
en runtime:

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved
external symbol _main referenced in function
___tmainCRTStartup

Que es lo que esta pasando??

Gracias de antemano


Me parece que tiene que ver con esto:
Cita:

Actualice el archivo corewin_express.vsprops (que se encuentra
en %VSINSTALLDIR%\\VC\\VCProjectDefau lts) y cambie la
cadena siguiente:

AdditionalDependencies=\"ker nel32.lib
2;"

a:

AdditionalDependencie s=\"kernel32.lib user32.lib
gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.lib uuid.lib\"


Convendría que mires este articulo:
http://unsitioweb.com/noticias-opiniones-y-mas/...
Miguel  - Errores   |190.25.65.xxx |23-09-2009 02:11:29
Corro este codigo en vc++ 2008 pero la version profesional.
Y me bota estos
errores.


Error 1 error LNK2019: símbolo externo _main sin resolver al que se
hace referencia en la función
___tmainCRTStartup MSVCRTD.lib Window


Error 2 fa tal error LNK1120: 1 externos
sin resolver E:\Mis documentos\Visual Studio
2008\Projects\Window\Debug\Window. exe 1 Window
Vicengetorix   |194.179.2.xxx |25-09-2009 06:38:09
Ya en un comentario anterior pasaba lo mismo. Asegurate, en las propiedades del
proyecto, de que es para windows.
Si no te funciona, no hay mas remedio que
jugar con las opciones del proyecto y, a veces, excluir del proyecto alguna
libreria como MSVCRT.lib o libc.lib.
Te sugiero tambien que pruebes a compilar
y ejecutar la version \"Release\" en vez de la
\"Debug\".
Cuentanos como va.
pepe   |189.179.27.xxx |11-07-2009 08:36:47
Hola, puedes poner los codigos descargables?
Muchas gracias por la web, me ha
sido de mucha ayuda
Vicengetorix   |85.53.221.xxx |11-07-2009 17:43:41
A partir del capitulo 4, al final de todos los capitulos hay un enlace con el
codigo completo.
Los capitulos 2 y 3 tienen el codigo completo en el capitulo,
un simple copy/paste basta.
Armando  - Error   |201.137.71.xxx |12-07-2009 07:52:46
Buena pagina!!!

Yo tengo el siguiente error en
runtime:

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol
_main referenced in function ___tmainCRTStartup

Que es lo que esta
pasando??

Gracias de antemano
Vecengetorix   |85.53.193.xxx |12-07-2009 14:35:11
Creo que tienes mal la configuracion del proyecto.
En las propedades de
proyecto, opcion LINKER apartado SISTEMA (o SYSTEM), hay una
opcion llamada SUBSYSTEM (o SUBSISTEMA)deberia poner "Windows
(/SUBSYSTEM:WINDOWS)" para que reconozca el WinMain.
En todo caso mira
este enlace:http://social.msdn.microsoft.com/Forums/en-US/v...

Te recomiendo tambien el articulo de intalacion de VC++ de esta pagina en
la parte de habilitar proyectos win32:
http://unsitioweb.com/noticias-opiniones-y-mas/...
Fabian Martinez  - 1, 2, 3 Probando     |85.53.197.xxx |23-11-2011 19:20:38
Hola de nuevo, estuve probando el primer ejercicio y si bien el modo de
pantalla completo debe ser muy distinto a esto que hice, creo que puede
ser una forma de ir probando, modifique y toquetee un poco el ejemplo
para simular una pantalla completa.

Primero modifiqué esta linea
para que el fondo sea color negro:

Cita:
ClaseVentana.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH)


Luego modifiqué los parametros cuando creo la ventana.
Basicamente le
puse las coordenadas de posicion a 0,0 y el tamaño a 1024x768 (si
tu definicion de pantalla actual es 800x600 esa es la que se debe
colocar) dejo la porcion modificada:

Cita:
IdVentana = CreateWindowEx( // Funcion que crea la ventana. Guardamos
el identificativo.
WS_EX_APPWINDOW, // estilo extendido
de ventana
L\"UnSitioWeb\", // Nombre de la clase
puesto antes
...
Vicengetorix   |85.53.206.xxx |08-07-2009 13:30:01
¡Heee! vas bien encaminado.

Solo te falta la forma de que el sistema te diga
la resolucion actual para poner la correcta siempre, cambiar tu mismo la
resolucion de pantalla desde el programa y al guna cosa mas.

Ahora estoy liado,
apunto de publicar la version 3D del juego Rompe Ladrillos con codigo.

Despues
hare la pantalla completa y la seleccion de objetos con el raton, no se si en el
mismo articulo o separados.
tigladd  - Error con el codigo en Borland   |201.252.71.xxx |30-06-2009 05:26:21
Hola, estoy muy interesado en la programacion de juegos y me parecio super
util esta web.
Probe este codigo en el Borland C++ y me tira
los siguientes errores:

Código:
Info
:Compiling D:\PROGRAMACION\C++\TATETI\noname0 0.cpp
Er
ror: noname00.cpp(65,30):Cannot convert 'wchar_t *' to 'const char
*'
Error:  noname00.cpp(86,20):Cannot convert 'wchar_t *' to 'const
char *'
Error: noname00.cpp(86,20):Type mismatch in parameter
'lpClassName' in call to '__stdcall CreateWindowExA(unsigned
long,const char *,const char *,unsigned long,int,int,int,int,void
*,void *,void *,void *)'
Error: noname00.cpp(86,20):Cannot
convert 'wchar_t *' to 'const char *'
Error:  noname00.cpp(86,20):Type
mismatch in parameter 'lpWindowName' in call to
'__stdcall CreateWindowExA(unsigned long,const char *,const char
*,unsigned long,int,i...
Vicengetorix   |85.53.216.xxx |30-06-2009 23:37:45
Tu problema es por usar un tipo de caracter diferente al que usa la funcion.
Si
usas simplemente char* a lo mejor no da error.
En todo caso si usas codigo
pensado para VC++ en BC++ tendras bastantes mas problemas como este.
En el
primer capitulo aclaro el tema del compilador que usar.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 


Banner
Spanish Chinese (Simplified) English French German Japanese Portuguese Russian