elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejemplo WinApi32 GUI - conversor decimal a binario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejemplo WinApi32 GUI - conversor decimal a binario  (Leído 2,225 veces)
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Ejemplo WinApi32 GUI - conversor decimal a binario
« en: 7 Abril 2012, 06:45 am »

Hola, estaba probando mis funciones atol e ltoa personalizadas, y las puse a prueba con un programa win32 con GUI que es un convertidor básico de decimal a binario y viceversa. Voy a dejar el código del proyecto en MSVC++ 6.0 que incluye el .h con las funciones que dije.

Proyecto

y dejo el winmain.cpp a la vista para notar los cambios con mi anterior publicación para winapi32 GUI
Código:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//
// UTN FRGP
// 2012
// David Riedel
// EMAIL: david_bs@live.com
//

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//#define WINVER 0x0500 //WINVER as 0x0500 enables features specific to Win 98 and 2000
//#define VC_EXTRALEAN

#include <windows.h>
#include <stdio.h>
//gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

#include "ansii_conversions.h"
#include "convertir.h"

/////////////////////////
// Globales

HWND EditControl1;
//HWND EditControl2;
//HWND EditControl3;
HWND ListControl1;
HWND ListControl2;
HWND StaticControl1;
HWND CheckBoxControl1;
HWND CheckBoxControl2;

const int ID_EDIT1=1, ID_LIST1=2, ID_CHECK1=3, ID_CHECK2=4;
const int ID_OK = 6;
const int ID_CANCEL = 7;
const int ID_LABEL1 = 0;

/////////////////////////////

void getCentradoGlobal(int vXY[2], int h, int w);

///////////////
// Controles de ventana

void RegistrarControlesDeVentanaPrincipal(HWND hWin)
{
static char* t1 =  TEXT("Ingrese 1 número");

unsigned long EstiloHijo1 = WS_VISIBLE | WS_CHILD;
unsigned long EstiloHijo2 = WS_CHILD | WS_VISIBLE | WS_BORDER;
unsigned long EstiloHijo3 = WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON;
unsigned long EstiloHijo4 = WS_CHILD | WS_VISIBLE | LBS_NOTIFY | LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP;

unsigned long editstyle =WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP;
unsigned long liststyle =WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP| LBS_NOTIFY;

int offs = 30;
int X=20;
int Y=10;
int W=200;
int H=25;

StaticControl1 = CreateWindow( TEXT("static"),
                          t1,
  EstiloHijo1,
  20,10,180,20,
  hWin,
  (HMENU)ID_LABEL1,
  NULL,
  NULL);

EditControl1 = CreateWindow( TEXT("Edit"),
                        NULL,
editstyle,
X,
Y+20,
W+63,
H,
hWin,
(HMENU)ID_EDIT1,
NULL,
NULL);

ListControl1 = CreateWindow( TEXT("listbox"),
                        NULL,
liststyle,
X,
Y+20+(offs*1),
W+63,
H-5,
hWin,
(HMENU)ID_LIST1,
NULL,
NULL);

CheckBoxControl1 = CreateWindow( TEXT("button"),
                        "BinToDec",
WS_VISIBLE | WS_CHILD  | BS_CHECKBOX |BS_AUTOCHECKBOX,
X+160,90,84,20,
hWin,
(HMENU)ID_CHECK1,
NULL,
NULL);

CreateWindow( TEXT("button"),
         TEXT("Convertir"),
 EstiloHijo1,
 X,90,80,H,
 hWin,
 (HMENU) ID_OK,
 NULL,
 NULL);

CreateWindow( TEXT("button"),
         TEXT("Salir"),
 EstiloHijo1,
 X+100,90,50,H,
 hWin,
 (HMENU)ID_CANCEL,
 NULL,
 NULL);
}

//////////
// CallBack

INT_PTR CALLBACK WinProc(HWND hWin, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
{
RegistrarControlesDeVentanaPrincipal(hWin);

SetFocus(EditControl1);
}
break;

case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_OK:
{
char chBuffer1[128];
memset(chBuffer1,0,sizeof(chBuffer1));
GetDlgItemText( hWin,ID_EDIT1, chBuffer1, sizeof( chBuffer1 ) );
BOOL checked = IsDlgButtonChecked(hWin, ID_CHECK1);
int l=strlen(chBuffer1);
if( (checked&&!EsBin(chBuffer1))  ||  (!checked&&!EsDec(chBuffer1))) {
MessageBox(0,"Errores de ingreso!","Convertidor",0);
return FALSE;
}
if(l<1){
MessageBox(0,"Ingrese algo!","Convertidor",0);
return FALSE;
}
long l_res_pre;
l_res_pre = mi_atoi(chBuffer1);
long l_res;
if(!checked) l_res = Bin(l_res_pre,2,10);//dec a bin
else l_res = Bin(l_res_pre,10,2);//bin a dec
char* ch_res = mi_ltoa(l_res,ch_res);
SendDlgItemMessage(hWin, ID_LIST1, LB_RESETCONTENT, 0, 0);
int nNum=0;
char* buf1 = (char*)GlobalAlloc(GPTR,strlen(ch_res)+1);
strcpy(buf1, ch_res);
free(ch_res);
int index1 = SendDlgItemMessage(hWin, ID_LIST1, LB_ADDSTRING, 0, (LPARAM)buf1);
SendDlgItemMessage(hWin, ID_LIST1, LB_SETITEMDATA, (WPARAM)index1, (LPARAM)nNum);
GlobalFree((HANDLE)buf1);
}
break;

case ID_CANCEL:
{
SendMessage(hWin, WM_CLOSE, 0, 0);
return TRUE;
}
break;
}
}
break;

case WM_CLOSE:
{
DestroyWindow(hWin);
return TRUE;
}
/////////////////////////////
   case WM_DESTROY:
{
PostQuitMessage(0);
return TRUE;
}

default:
return DefWindowProc(hWin,uMsg,wParam,lParam);

}

return 0;
//return DefWindowProc(hWin,uMsg,wParam,lParam);
}


////////////
// Clase de ventana

void RegistrarClaseVentana(WNDCLASS* wc)
{
// HICON hIconImg = (HICON)LoadImage(NULL, "BS.ico", IMAGE_ICON, 542, 449, LR_LOADFROMFILE);
wc->lpszClassName = TEXT("Window");
wc->hInstance     = GetModuleHandle(NULL);
    //wc->hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc->hbrBackground =  (HBRUSH)(COLOR_BTNFACE+1);
    wc->lpfnWndProc   = (WNDPROC)WinProc;
wc->style         =  CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc->cbClsExtra    =  0;
    wc->cbWndExtra    =  0;
    wc->hIcon         =  LoadIcon(NULL,"IDI_ICON1");
// wc->hIcon         =  LoadIcon(NULL,"IDI_WINLOGO");
    wc->hCursor       =  LoadCursor(NULL,IDC_ARROW);
    wc->lpszMenuName  =  NULL;
RegisterClass((struct tagWNDCLASSA *)wc);
}

//////////////
// Punto de entrada ('WinMain' : must be '__stdcall')

int mb=0;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE h0, LPSTR lpCmdLine, int nCmdShow){

HWND hWin;
WNDCLASS wc = {0};

RegistrarClaseVentana(&wc);

int ancho=300;
int alto=156;
int dim[2];
getCentradoGlobal(dim, ancho, alto);

unsigned long Estilo1 = WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;

hWin = CreateWindow( wc.lpszClassName,
                "Convertidor a Binario",
Estilo1,
dim[0],
dim[1],
ancho,
alto,
NULL,
NULL,
hInst,
NULL);

// ShowWindow(hWin,nCmdShow);
ShowWindow(hWin, SW_SHOWDEFAULT);

//UpdateWindow(hWin);

MSG msg;
while(GetMessage(&msg, NULL, 0, 0)>0) {
if(!mb) {
 MessageBox(hWin, "By BS","Convertidor a Binario",MB_OK);
 mb=1;
}
if (!IsDialogMessage(hWin, &msg)) {
 TranslateMessage(&msg);
 DispatchMessage(&msg);

}
}

    return msg.wParam;
}

//===

void getCentradoGlobal(int vXY[2], int h, int w)
{
RECT rcP;
GetWindowRect(GetDesktopWindow(), &rcP);
int centerX = (rcP.right/2)-(w/2)-(w/4);
int centerY = (rcP.bottom/2)-(h/2)+(h/6);
vXY[0]=centerX;
vXY[1]=centerY;
}

//===

Prueben el convertidor XD aver si anda bien. La meta es hacerlo un convertidor de otros sistemas también, por ejemplo hexadecimal y octal. pero como se trata de algo didáctico para mi, me da lo mismo

por cierto la función conversora es esta, creo que en google aparece enseguida..
Código:
unsigned long Bin(unsigned long n1,int base1,int base2)
{
unsigned long alg,mult=1,n2=0;
while(n1 > 0) {
alg = n1 % base1;
n1 /= base1;
n2 += (alg*mult);
mult *= base2;
}
return n2;
}

Salu2


« Última modificación: 23 Abril 2013, 23:33 pm por david_BS » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ code=C++] Conversor binario-decimal-binario « 1 2 »
Programación C/C++
Chonk 11 23,584 Último mensaje 9 Julio 2010, 17:52 pm
por Debci
[Batch] Conversor de Decimal a Hexadecimal
Scripting
maxx93 0 2,904 Último mensaje 5 Agosto 2010, 06:08 am
por maxx93
Ejemplo de programa WinApi32 GUI
Programación C/C++
david_BS 0 2,702 Último mensaje 2 Abril 2012, 00:08 am
por david_BS
Conversor de numeros decimales a binario con punto decimal basico
Programación C/C++
ivanel93 0 2,339 Último mensaje 15 Septiembre 2013, 06:21 am
por ivanel93
No sé por qué no funciona (conversor decimal-binario)
Ejercicios
pablo256 6 3,950 Último mensaje 13 Abril 2015, 10:05 am
por pablo256
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines