Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++ WIN 32] vs [C++ CRL]

    Ragazzi non capisco!!!
    Perchè esiste questo [C++ CRL] ?
    E' meglio il win 32 classico con procedure e tutto il resto o è meglio il secondo con le classi e tutte quelle robe lì???

    Chiedo questo perchè quando con visual studio voglio creare una finestra divento matto con tutte le misure dei form, box etc....
    invece per la classe CRL è molto più facile.....basta usare la "Windows form application"mi viene da pensare che il WIN32 sia deprecato!!!

    Che dite a proposito?

    C'è un modo con visual studio di utilizzare l'editor grafico anche per le applicazioni scritte in WIN 32 classico?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    CLR Common Language Runtime ... non CRL ...

    Come al solito, per domande del genere, non c'è un qualcosa di "meglio" ...

    Il C++ CLR prevede l'uso del Framework .NET (anche per il sistema in cui girerà l'eseguibile), un po' come il Java.

    Il C++ "nativo" non usa librerie e quindi è, ovviamente, tutto molto più complesso se vuoi lavorare con le finestre. In quel caso userai delle librerie apposite, "native", a partire da MFC, ATL e simili.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ma quindi....

    ma quindi io che faccio finestre con le vecchie procedure etc.....tipo questa:

    codice:
    #include <windows.h>
    #include "res.h" //Non lo posto perchè tanto è solo un esempio
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("SysMets3") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
         
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
         
         if (!RegisterClass (&wndclass)) 
         {
              MessageBox (NULL, TEXT ("Program requires Windows NT!"), 
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
    
         hwnd = CreateWindow (szAppName, TEXT ("Get System Metrics No. 3"),
                              WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
    
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
         
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int  cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth ;
         HDC         hdc ;
         int         i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd ;
         PAINTSTRUCT ps ;
         SCROLLINFO  si ;
         TCHAR       szBuffer[10] ;
         TEXTMETRIC  tm ;
         
         switch (message)
         {
         case WM_CREATE:
              hdc = GetDC (hwnd) ;
              
              GetTextMetrics (hdc, &tm) ;
              cxChar = tm.tmAveCharWidth ;
              cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
              cyChar = tm.tmHeight + tm.tmExternalLeading ;
              
              ReleaseDC (hwnd, hdc) ;
    
                   // Save the width of the three columns
              
              iMaxWidth = 40 * cxChar + 22 * cxCaps ;
              return 0 ;
    
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
    
                   // Set vertical scroll bar range and page size
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_RANGE | SIF_PAGE ;
              si.nMin   = 0 ;
              si.nMax   = NUMLINES - 1 ;
              si.nPage  = cyClient / cyChar ;
              SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
    
                   // Set horizontal scroll bar range and page size
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_RANGE | SIF_PAGE ;
              si.nMin   = 0 ;
              si.nMax   = 2 + iMaxWidth / cxChar ;
              si.nPage  = cxClient / cxChar ;
              SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
              return 0 ;
              
         case WM_VSCROLL:
                   // Get all the vertical scroll bar information
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_ALL ;
              GetScrollInfo (hwnd, SB_VERT, &si) ;
    
                   // Save the position for comparison later on
    
              iVertPos = si.nPos ;
    
              switch (LOWORD (wParam))
              {
              case SB_TOP:
                   si.nPos = si.nMin ;
                   break ;
                   
              case SB_BOTTOM:
                   si.nPos = si.nMax ;
                   break ;
                   
              case SB_LINEUP:
                   si.nPos -= 1 ;
                   break ;
                   
              case SB_LINEDOWN:
                   si.nPos += 1 ;
                   break ;
                   
              case SB_PAGEUP:
                   si.nPos -= si.nPage ;
                   break ;
    
              case SB_PAGEDOWN:
                   si.nPos += si.nPage ;
                   break ;
                   
              case SB_THUMBTRACK:
                   si.nPos = si.nTrackPos ;
                   break ;
                   
              default:
                   break ;         
              }
                   // Set the position and then retrieve it.  Due to adjustments
                   //   by Windows it may not be the same as the value set.
    
              si.fMask = SIF_POS ;
              SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
              GetScrollInfo (hwnd, SB_VERT, &si) ;
    
                   // If the position has changed, scroll the window and update it
    
              if (si.nPos != iVertPos)
              {                    
                   
                   ScrollWindow (hwnd, 0, cyChar * (iVertPos - si.nPos), 
                                     NULL, NULL) ;
                   UpdateWindow (hwnd) ;
              }
              return 0 ;
              
         case WM_HSCROLL:
                   // Get all the vertical scroll bar information
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_ALL ;
    
                   // Save the position for comparison later on
    
              GetScrollInfo (hwnd, SB_HORZ, &si) ;
              iHorzPos = si.nPos ;
    
              switch (LOWORD (wParam))
              {
              case SB_LINELEFT:
                   si.nPos -= 1 ;
                   break ;
                   
              case SB_LINERIGHT:
                   si.nPos += 1 ;
                   break ;
                   
              case SB_PAGELEFT:
                   si.nPos -= si.nPage ;
                   break ;
                   
              case SB_PAGERIGHT:
                   si.nPos += si.nPage ;
                   break ;
                   
              case SB_THUMBPOSITION:
                   si.nPos = si.nTrackPos ;
                   break ;
                   
              default :
                   break ;
              }
                   // Set the position and then retrieve it.  Due to adjustments
                   //   by Windows it may not be the same as the value set.
    
              si.fMask = SIF_POS ;
              SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
              GetScrollInfo (hwnd, SB_HORZ, &si) ;
              
                   // If the position has changed, scroll the window 
    
              if (si.nPos != iHorzPos)
              {
                   ScrollWindow (hwnd, cxChar * (iHorzPos - si.nPos), 0, 
                                 NULL, NULL) ;
              }
              return 0 ;
    
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
    
                   // Get vertical scroll bar position
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_POS ;
              GetScrollInfo (hwnd, SB_VERT, &si) ;
              iVertPos = si.nPos ;
    
                   // Get horizontal scroll bar position
              GetScrollInfo (hwnd, SB_HORZ, &si) ;
              iHorzPos = si.nPos ;
    
                   // Find painting limits
    
              iPaintBeg = max (0, iVertPos + ps.rcPaint.top / cyChar) ;
              iPaintEnd = min (NUMLINES - 1,
                               iVertPos + ps.rcPaint.bottom / cyChar) ;
              
              for (i = iPaintBeg ; i <= iPaintEnd ; i++)
              {
                   x = cxChar * (1 - iHorzPos) ;
                   y = cyChar * (i - iVertPos) ;
                   
                   TextOut (hdc, x, y,
                            sysmetrics[i].szLabel,
                            lstrlen (sysmetrics[i].szLabel)) ;
                   
                   TextOut (hdc, x + 22 * cxCaps, y,
                            sysmetrics[i].szDesc,
                            lstrlen (sysmetrics[i].szDesc)) ;
                   
                   SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;
                   
                   TextOut (hdc, x + 22 * cxCaps + 40 * cxChar, y, szBuffer,
                            wsprintf (szBuffer, TEXT ("%5d"),
                                 GetSystemMetrics (sysmetrics[i].iIndex))) ;
    
                   SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
              }
    
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }

    dovrei passare a CLR o ATL???

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dovresti passare alle librerie native ... MFC, ATL, anche

    WTL
    http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx

    o anche le più famose

    GTK+
    http://www.gtk.org/

    wxWidgets
    http://www.wxwidgets.org/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Mi permetto di sconsigliare MFC, al giorno d'oggi sarebbero da evitare per nuovi progetti.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    mmm

    ma quindi mi state praticamente dicendo che scrivere il codice di una finestra in codice nativo è ASSURDO ai giorni d'oggi?
    e io che sto familiarizzando col petzold....

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: mmm

    Originariamente inviato da kirakira93
    ma quindi mi state praticamente dicendo che scrivere il codice di una finestra in codice nativo è ASSURDO ai giorni d'oggi?
    e io che sto familiarizzando col petzold....
    Fai attenzione a non fare confusione ... il codice "nativo" non dipende dall'uso di librerie o meno.

    Quello che è poco consigliato è scrivere applicazioni GUI facendo uso *unicamente* delle API.

    Le librerie che ti sono state indicate, facilitano la scrittura di applicazioni GUI ma *restano* sempre codice "nativo".

    Quelle che non sono considerate native, sono le applicazioni che usano il .NET Framework, appunto perchè sono compilate usando un codice intermedio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Inoltre, a mio avviso, sapere come funzionano "sotto il cofano" i vari toolkit grafici è di fondamentale importanza per sapere come cavarsela quando si cerca di fare qualcosa che va al di là delle offerte del toolkit e quando ci sono bug nel toolkit, oltreché per cultura personale. Un po' come le stringhe C: di fatto non bisognerebbe mai usarle, ma sapere come funzionano e come usarle torna spesso comodo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Concordo con MItaly, aggiungendo che, per esperienza personale, sapere come funziona il sistema "sotto il cofano", molte volte aiuta a trovare la soluzione, la strada migliore, per risolvere un problema con il massimo dell'efficienza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    :)

    ma quindi se io faccio una finestra con ATL per esempio, poi posso srivere un normale:
    ShowWindow() ?
    Allora un'ultima domanda....mi consigliate ATL, WTL, GTK+ o wxWidgets.....?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.