Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   WinApi32 GUI example program - DecToBin converter (http://www.go4expert.com/forums/winapi32-gui-example-program-dectobin-t28158/)

david_BS 10Apr2012 04:05

WinApi32 GUI example program - DecToBin converter
 
1 Attachment(s)
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;
}



All times are GMT +5.5. The time now is 09:01.