Ejemplo de programa WinApi32 GUI

Iniciado por david_BS, 2 Abril 2012, 00:08 AM

0 Miembros y 1 Visitante están viendo este tema.

david_BS

Un proyecto de un programa básico con interfáz gráfica de Windows. Está hecho con MSVC++ 6.0

proyecto
http://www.mediafire.com/?yd4vpb42j4p1pi6

winmain.cpp

//
// UTN FRGP
// 2011
// david_BS
// 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>
//gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib


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


HWND EditControl1;
HWND EditControl2;
HWND EditControl3;
HWND StaticControl1;


const int ID_EDIT1=1, ID_EDIT2=2, ID_EDIT3=3, ID_EDIT4=4, ID_EDIT5=5;
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 3 numeros");
   


   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;


   long editstyle =WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP;//|ES_AUTOHSCROLL;//|WS_TABSTOP;


   int offs = 30;
   int X=20;
   int Y=10;
   int W=80;
   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,
                                H,
                                hWin,
                                (HMENU)ID_EDIT1,
                                NULL,
                                NULL);


   EditControl2 = CreateWindow( TEXT("Edit"),
                                NULL,
                                editstyle,
                                X,
                                Y+20+(offs*1),
                                W,
                                H,
                                hWin,
                                (HMENU)ID_EDIT2,
                                NULL,
                                NULL);


   EditControl2 = CreateWindow( TEXT("Edit"),
                                NULL,
                                editstyle,
                                X,
                                Y+20+(offs*2),
                                W,
                                H,
                                hWin,
                                (HMENU)ID_EDIT3,
                                NULL,
                                NULL);




   CreateWindow( TEXT("button"),
                 TEXT("Sumar"),
                 EstiloHijo1,
                 X,130,60,H,
                 hWin,
                 (HMENU) ID_OK,
                 NULL,
                 NULL);


   CreateWindow( TEXT("button"),
                 TEXT("Salir"),
                 EstiloHijo1,
                 X+70,130,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);
       }
       break;


       case WM_KEYDOWN:
       {
           if(wParam==VK_TAB){
           }
       }
       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 ) );
                   char chBuffer2[128];
                   memset(chBuffer2,0,sizeof(chBuffer2));
                   GetDlgItemText( hWin,ID_EDIT2, chBuffer2, sizeof( chBuffer2 ) );
                   int i_res = atoi(chBuffer1)+atoi(chBuffer2);
                   char ch_res[128];
                   itoa(i_res,ch_res,10);
                   HWND Edit3 =  GetDlgItem(hWin,ID_EDIT3);
                   SendMessage(Edit3 , WM_SETTEXT, 0, (LPARAM)ch_res);
               }
               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 WINAPI WinMain(HINSTANCE hInst, HINSTANCE h0, LPSTR lpCmdLine, int nCmdShow){




   HWND hWin;
   WNDCLASS wc = {0};


   RegistrarClaseVentana(&wc);


   int ancho=250;
   int alto=200;
   int dim[2];
   getCentradoGlobal(dim, ancho, alto);


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




   hWin = CreateWindow( wc.lpszClassName,
                        "GUI32",
                        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) {
         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;
}