?>
                <p>Como podemos ver, esta clase tiene un miembro para crear el botón, un mimebro para asignar su texto, un miembro para obtener su texto, y un miembro privado que tendrá la funete del botón cargada en memoria.</p>
                <p>Veamos la función CrearButton :</p>
                <?php 
$Base->PintarCodigo->PintarArchivoC("IDCrearButton", "Archivo : ObjetoButton.cpp", "../Codigo/Tutoriales_WinAPI/Objetos Tutorial/ObjetoButton.cpp", "ObjetoButton::CrearButton");
?>
                <p>Lo primero que se hace es llamar a la función  ObjetoIniciarCommonControls::Iniciar. Esta función llama a la API  <a href="http://msdn.microsoft.com/en-us/library/bb775697(VS.85).aspx" target="_blank">InitCommonControlsEx</a> para iniciar los controles estándar de windows para  nuestra aplicación. Antiguamente en VC6 esto era necesario si queríamos  trabajar con controles estándar, pero ahora mismo a decir verdad ya no se si es  necesario, porque en mi maquina me funcionan igual los ejemplos tanto si llamo  a <a href="http://msdn.microsoft.com/en-us/library/bb775697(VS.85).aspx" target="_blank">InitCommonControlsEx</a> como si no… y en la MSDN no dice nada.. Por lo que prefiero mantener este codigo por si las moscas.</p>
                <p>Lo segundo que se hace es llamar a la API <a href="http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx" target="_blank">CreateWindowEx</a> con  el segundo parámetro &ldquo;BUTTON&rdquo; (que es el nombre de la clase). Esto hace que el control creado se convierta en un  BUTTON. Para ver más nombres de control mira este enlace de la MSDN : <a href="http://msdn.microsoft.com/en-us/library/ms632679(VS.85).aspx" target="_blank">CreateWindow</a> (Casi al final hay una tabla que muestra los nombres de classe mas comunes)</p>
                <p>Lo siguiente es llamar a la función _ConectarControl, que  re-emplazara el WindowProcedure del Button por el nuestro.</p>
                <p>Y por último creamos una fuente con la API <a href="http://msdn.microsoft.com/en-us/library/dd183499(VS.85).aspx" target="_blank">CreateFont</a> para el  button, y le mandamos el mensaje <a href="http://msdn.microsoft.com/en-us/library/ms632642(VS.85).aspx" target="_blank">WM_SETFONT</a> al button con la API <a href="http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx" target="_blank">SendMessage</a>,  cosa que le dirá al button que debe usar esa fuente.</p>
                <p>Ya solo nos queda ver las funciones ObtenerTexto y  AsignarTexto :</p>
                <?php 
$Base->PintarCodigo->PintarArchivoC("IDObtenerTexto", "Archivo : ObjetoButton.cpp", "../Codigo/Tutoriales_WinAPI/Objetos Tutorial/ObjetoButton.cpp", "ObjetoButton::ObtenerTexto");
?>
                <p>Para obtener el texto del button utilizamos la API  <a href="http://msdn.microsoft.com/en-us/library/ms645489(VS.85).aspx" target="_blank">GetDlgItemText</a>, y para asignarlo utilizamos la API <a href="http://msdn.microsoft.com/en-us/library/ms645521(VS.85).aspx" target="_blank">SetDlgItemText</a>. Además utilizamos la API <a href="http://msdn.microsoft.com/en-us/library/ms633585(VS.85).aspx" target="_blank">GetWindowLongPtr</a> para  obtener la ID del button que necesitamos a la hora de asignar / obtener su  texto.</p>
                <p>Ahora solo nos falta saber como responder cuando el usuario presione el boton. Para ello normalmente se tiene que mirar el mensaje <a href="http://msdn.microsoft.com/en-us/library/ms647591(VS.85).aspx" target="_blank">WM_COMMAND</a>, o en este caso como lo tenemos encapsulado lo recibiremos por Evento_Comando de su ventana padre. Observad el siguiente ejemplo :</p>
                <?php 
$Base->PintarCodigo->PintarArchivoC("IDEvento_Comando", "Archivo : 3.4 Tutorial crear ObjetoButton.cpp", "../Codigo/Tutoriales_WinAPI/3.04 Tutorial crear ObjetoButton/3.4 Tutorial crear ObjetoButton.cpp", "MiVentana::Evento_Comando");
?>
                <p>Como podeis ver, comparamos la ID con ID_BUTTON_CERRAR, y en caso de que la comparación sea positiva llamamos al Evento_Cerrar, que en esta ventana terminara la aplicación de ejemplo.</p>
                <p>Para mas información referente al control Button consulta el siguiente enlace de la MSDN : <a href="http://msdn.microsoft.com/en-us/library/bb775943(v=VS.85).aspx" target="_blank">Button Control</a>.</p>
                <p>Siguiente tutorial : <a href="/Blog/Tutorial_WINAPI_3_5"> 3.5 Creación del ObjetoComboBox</a>.</p>
    <div class='Centrado'>
                <a class="Boton-Normal" href="/Descargas/EjemplosWinAPI.zip" target="_blank">Descargar tutorial WinAPI completo</a>
    </div>

<?php 
$Base->FinBlog();
$Base->FinPlantilla();
?>
     
Esempio n. 2
0
    
            <h2>Obtener y modificar variables CSS desde JavaScript</h2>
            <p>Hasta ahora hemos visto como crear y utilizar variables en el CSS, pero que pasa si necesitamos mostrar o modificar una variable via JavaScript? Aquí la cosa se complica ya que nos va a tocar acceder a los estilos computados por el navegador.</p>
            <p>El siguiente ejemplo nos muestra como obtener una variable global desde los estilos computados por el navegador :</p>
            <?php 
$Web->PintarCodigo->PintarArchivoJS("obtenervariable", "Obtener una variable global del CSS", basename(__FILE__), 'obtenervariable');
?>
            
            <p>La función del ejemplo anterior nos devuelve el contenido de la variable <b>global</b> que especifiquemos.</p>
            <p>En la <linea cid='obtenervariable' l='2'>segunda línea</linea> obtengo los estilos computados con la función <code>window.getComputedStyle</code>, para después en la <linea cid='obtenervariable' l='3'>línea 3</linea> utilizar la función <code>getPropertyValue</code>, que nos devolverá el valor de la propiedad o en este caso variable especificada.</p>
            <div class='nota'>El problema de los estilos computados es que no podemos acceder al CSS de forma abstracta y solo disponemos del CSS que ha sido computado para cada elemento. Si queremos acceder a una variable que no esté en el ámbito global, vamos a tener que especificar en la función <linea cid='obtenervariable' l='2'>getComputedStyle</linea> una etiqueta bajo ese ámbito en vez del <linea cid='obtenervariable' l='2'>document.body</linea>.</div>  
            <p>Veamos como asignar un valor a una variable <b>global</b> del CSS :</p>            
            <?php 
$Web->PintarCodigo->PintarArchivoJS("asignarvariable", "Asignar un valor a una variable global del CSS", basename(__FILE__), 'asignarvariable');
?>
            <p>Como veis en el ejemplo anterior se utiliza la función <code>style.setProperty</code>, de un elemento que se encuentre dentro del ámbito de la variable. En este caso como la variable es global podemos utilizar <code>document.body</code> directamente.</p>
            <p>Por último os dejo un ejemplo que modifica vía JavaScript cuatro variables que contienen los colores de los cuatro marcos que tiene el ejemplo.</p>
            <?php 
devildrey33_Lab::CrearMiniLab(array("Ejemplos/VariablesCSS/javascript.html"));
?>
        
            

<?php 
$Web->FinBlog();
$Web->FinPlantilla();
?>


	
Esempio n. 3
0
                                <tr>
                                    <td style="background:purple; color:white"><b>Iso3</b></td>
                                    <td style="background:green; color:white"><b>Iso2</b></td>
                                    <td style="background:purple; color:white"><b>Iso3</b></td>
                                    <td></td><td></td><td></td><td></td><td></td>
                                </tr>
                            </table>
                        </li>
                    </ul>
                    <b>Que ha pasado?</b> Al eliminar la <span style='color:blue'><b>Iso1</b></span> que ocupaba 1Gb, ha quedado un espacio libre de 1Gb al principio del pendrive. Como el archivo <span style='color:purple'><b>Iso3</b></span> ocupa 2Gb el sistema operativo lo empieza a grabar al principio, y cuando ya no puede continuar porque se encuentra la <span style='color:green'><b>Iso2</b></span>, busca otra zona con espacio libre (para este ejemplo es justo después de la <span style='color:green'><b>Iso2</b></span>).<br /><br />
                    En este caso concreto la <span style='color:green'><b>Iso2</b></span> funcionaría perfectamente, pero con la <span style='color:purple'><b>Iso3</b></span> recibiríamos el Error 60.<br /><br />
                    <b>Conclusión</b> : la mejor manera de grabar todos los datos correctamente, es crear la estructura en el disco duro, es decir se crea la carpeta <code>/Isos/</code> y luego se van metiendo todas las isos que queremos con sus respectivos nombres y directorios. Una vez se tienen todas las isos allí se copia el directorio desde el disco al pendrive.
                </div>
                <br />
                <div class='nota'>Para los windows 8 debéis editar el menu.lst, buscar la parte del windows 8, y modificar la clave del producto con vuestra clave. La clave que he puesto es para versiones de prueba, y con ella no podréis activar el windows. <img src='../Web/Graficos/USBBootW8Key.png' style="margin-left:5px"> </div>

                <p>Ahora solo os quedara probar que todo funcione correctamente utilizando el USB para arrancar en alguna maquina o con algun emulador (WinSetupFromUSB trae el QEmu, que para probar los arranques de todo no va mal, PERO OJO que funcione en QEmu no quiere decir que luego en una maquina real funcione).</p>
                <h2>Notas finales</h2>
                <p>Todo esto lo he conseguido hacer mirando varios tutoriales, pero en especial me he basado en el siguiente : <a href="http://www.rmprepusb.com/tutorials/install-xp-and-win7-to-internal-hdd" target="_blank">Install XP and Win7 onto a computer from one USB flash drive</a>. Lo que en esa pagina utilizan su propio programa para crear pendrives que con windows xp a mi me dio muchos dolores de cabeza (sobre todo para cargar windows xp desde una iso e instalarlo).</p>
                <p>He evitado mostrar el funcionamiento de Grub4dos ya que a decir verdad hay muchas cosas que ni yo entiendo, por lo que si no sois muy hábiles con estas cosas os recomendaría no tocar el <b>"menu.lst"</b>. De todas formas he comentado el archivo menu.lst internamente para que os sea fácil editarlo si es que tenéis que llegar hasta tal punto.</p>
                <div class='nota'>Ultima actualización (08/01/2014), añadido gparted a la lista de utilidades y al <code>menu.lst</code>, gracias a <a href="http://m4cr0ss.wordpress.com" target="_blank">hunt3r25</a>.</div>
                
                <p>Y esto es todo por hoy, espero que este documento os sirva de ayuda.</p>



<?php 
$Base->FinBlog(false, true);
$Base->FinPlantilla();
?>
     
                    <td>&nbsp;</td>
                  </tr>
                  <tr>
                    <td>WMV</td>
                    <td>Windows Media Video </td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td><div class='Soportado'>soportado</div></td>
                  </tr>
                  <tr>
                    <td>XM</td>
                    <td>eXtended Module</td>
                    <td>&nbsp;</td>
                    <td><div class='Soportado'>soportado</div></td>
                    <td>&nbsp;</td>
                  </tr>
                  <tr>
                    <td>XVID</td>
                    <td>Libreria de codecs de video. </td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td><div class='Soportado'>soportado</div></td>
                  </tr>
                </table>
                <div class='Centrado'>
                    <a class="Boton-Normal" href="BubaTronik">Volver a la pagina principal de BubaTronik</a>
                </div>

<?php 
$Base->FinBlog(true);
$Base->FinPlantilla();