I want to share my little program src. it uses winapi32 GUI but it is a simple base converter. decimal to binary and vice versa

Code:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//
// 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;
					if(l==1) l_res_pre = atol_char(chBuffer1[0]);
					else l_res_pre = atol_string(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 = ltoa_string(l_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;
}
To make the conversion
Code:
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;
}
Attached Files
File Type: rar conver_base.rar (46.1 KB, 4 views)