Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - IDE Win32
Forum - C/C++ - IDE Win32

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 11:25
Sabato, 07/03/2009
Ho cercato su google ma non ho trovato niente e mi sembra strano.......possibile che non esista un ide per c++ che mi permetta(in windows) di disegnare interfacce grafiche senza usare wxwidgets e robe simili?

per spiegarmi meglio, vorrei un ide come visual basic 6 che mi generi codice di finetre win 32 puro, cioè con WndProc, WinMain etc....

conosco già come creare finestre e simili ma per lavorarci efficacemente non posso perdere tempo a misurare la finestra per sapere dove posizionare un bottone.

Qualcuno conosce qualche programma che fa al caso mio?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 12:11
Sabato, 07/03/2009
Non so se ti ho capito completamente, ma puoi usare Visual Studio ...

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 12:19
Sabato, 07/03/2009
In sostanza ti serve un IDE per sviluppare le interfacce grafiche in maniera rapida per dedicarti ad aspetti del programma più importanti della mera GUI. Giusto?

Comunque prova uno dei componenti di Visual Studo 2008, ossia Visual C++ 2008.
Ne esiste la versione gratuita, la Express, liberamente scaricabile dal sito microsoft .
Eccoti il link del download http://www.microsoft.com/express/download/.

Spero di esserti stato di aiuto ;)

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:23
Sabato, 07/03/2009
magari mi sbaglio, ma in visual studio se uso le winform non devo usare anche il NET?

io vorrei usare solo il c++ con le api di windows e i messaggi WM_DESTROY, etc...
Nel senso, per creare un bottono con le api si deve usare la funzione CreateWindow.
Io vorrei un ide che mi permetta di disegnare usando le api native del c++, non le form del NET.

Credo che con vs non sia possibile, giusto?

intendo un codice tipo questo, solo che questo l'ho dovuto scrivere a mano io.


Codice sorgente - presumibilmente C#

  1. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
  2. {
  3.         wndclass.style = CS_HREDRAW | CS_VREDRAW;
  4.         wndclass.lpfnWndProc = WndProc;
  5.         wndclass.hInstance = hInstance;
  6.         wndclass.cbClsExtra = 0;
  7.         wndclass.cbWndExtra = 0;
  8.         wndclass.hbrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
  9.         wndclass.hCursor = LoadCursor( hInstance , ( const char * )IDC_CURSOR1 );
  10.         wndclass.hIcon = LoadIcon( hInstance , ( const char * )IDI_ICON1 );
  11.         wndclass.lpszMenuName = ( const char * )IDR_MENU1;
  12.         wndclass.lpszClassName = szAppName;
  13.  
  14.         if( !RegisterClass( &wndclass ) )
  15.         {
  16.                 MessageBox( NULL , TEXT( "Errore nell'apertura del programma" ) , szAppName , MB_ICONERROR );
  17.                 return 0;
  18.         }
  19.  
  20.         hwnd = CreateWindow( ( const char * )szAppName, TEXT( "Window" ) , WS_OVERLAPPEDWINDOW ,
  21.                 CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL );
  22.  
  23.         ShowWindow( hwnd , SW_SHOWMAXIMIZED );
  24.         UpdateWindow( hwnd );
  25.  
  26.         for( ; ; )
  27.         {
  28.                 while( PeekMessage( &msg , NULL , 0 , 0 , PM_REMOVE ) )
  29.                 {
  30.                         if( msg.message == WM_QUIT )
  31.                         return TRUE;
  32.                        
  33.                         TranslateMessage( &msg );
  34.                     DispatchMessage( &msg );
  35.                 }
  36.         }
  37.  
  38.         return ( int )msg.wParam;
  39. }
  40. LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  41. {
  42. ....
  43. }


Ultima modifica effettuata da lorenzo il 07/03/2009 alle 12:26
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 12:39
Sabato, 07/03/2009
Se vuoi usare la CreateWindow (ovvero solo le API di Windows) non ha senso chiedere un IDE con cui creare i form, in quanto tu li crei "dinamicamente" (ecco perche' non ne hai trovato!).

Per farlo con il supporto dell'IDE, ti devi appoggiare ad una libreria di classi che "incapsuli" le API e tutto quello che serve per creare le finestre cosi' come le imposti nell'IDE stesso.

Con Visual Studio lo puoi fare se usi il Framework .NET per un'applicazione managed, ma se vuoi creare un'applicazione NATIVA WIN32, puoi invece creare un'applicazione che usa le librerie MFC o le ATL.

Per renderti conto, prova a creare una "applicazione windows MFC" ed ad usare l'editor di risorse ...

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:58
Sabato, 07/03/2009
non è che ami molto le mfc, mentre non ho mai usato le atl, proverò a documentarmi su quelle......

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 13:19
Sabato, 07/03/2009
Quanto posto di seguito è un esempio creato con Visual C++ 2008
So che sarà lungo, ma voglio capire se è ciò che ti serve.
Nel caso, quando crei il progetto è sufficiente creare una applicazione Win32

Codice sorgente - presumibilmente C++

  1. // zil.cpp : definisce il punto di ingresso dell'applicazione.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "zil.h"
  6.  
  7. #define MAX_LOADSTRING 100
  8.  
  9. // Variabili globali:
  10. HINSTANCE hInst;                                                                // istanza corrente
  11. TCHAR szTitle[MAX_LOADSTRING];                                  // Testo della barra del titolo
  12. TCHAR szWindowClass[MAX_LOADSTRING];                    // nome della classe di finestre principale
  13.  
  14. // Dichiarazioni con prototipo delle funzioni incluse in questo modulo di codice:
  15. ATOM                            MyRegisterClass(HINSTANCE hInstance);
  16. BOOL                            InitInstance(HINSTANCE, int);
  17. LRESULT CALLBACK        WndProc(HWND, UINT, WPARAM, LPARAM);
  18. INT_PTR CALLBACK        About(HWND, UINT, WPARAM, LPARAM);
  19.  
  20. int APIENTRY _tWinMain(HINSTANCE hInstance,
  21.                      HINSTANCE hPrevInstance,
  22.                      LPTSTR    lpCmdLine,
  23.                      int       nCmdShow)
  24. {
  25.         UNREFERENCED_PARAMETER(hPrevInstance);
  26.         UNREFERENCED_PARAMETER(lpCmdLine);
  27.  
  28.         // TODO: inserire qui il codice.
  29.         MSG msg;
  30.         HACCEL hAccelTable;
  31.  
  32.         // Inizializzare le stringhe globali
  33.         LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  34.         LoadString(hInstance, IDC_ZIL, szWindowClass, MAX_LOADSTRING);
  35.         MyRegisterClass(hInstance);
  36.  
  37.         // Eseguire l'inizializzazione dall'applicazione:
  38.         if (!InitInstance (hInstance, nCmdShow))
  39.         {
  40.                 return FALSE;
  41.         }
  42.  
  43.         hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_ZIL));
  44.  
  45.         // Ciclo di messaggi principale:
  46.         while (GetMessage(&msg, NULL, 0, 0))
  47.         {
  48.                 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  49.                 {
  50.                         TranslateMessage(&msg);
  51.                         DispatchMessage(&msg);
  52.                 }
  53.         }
  54.  
  55.         return (int) msg.wParam;
  56. }
  57.  
  58.  
  59.  
  60. //
  61. //  FUNZIONE: MyRegisterClass()
  62. //
  63. //  SCOPO: registra la classe di finestre.
  64. //
  65. //  COMMENTI:
  66. //
  67. //    Questa funzione e il relativo utilizzo sono necessari solo se si desidera che il codice
  68. //    sia compatibile con i sistemi Win32 precedenti alla funzione 'RegisterClassEx'
  69. //    aggiunta a Windows 95. È importante chiamare questa funzione
  70. //    in modo da ottenere piccole icone in formato corretto associate
  71. //    all'applicazione.
  72. //
  73. ATOM MyRegisterClass(HINSTANCE hInstance)
  74. {
  75.         WNDCLASSEX wcex;
  76.  
  77.         wcex.cbSize = sizeof(WNDCLASSEX);
  78.  
  79.         wcex.style                      = CS_HREDRAW | CS_VREDRAW;
  80.         wcex.lpfnWndProc        = WndProc;
  81.         wcex.cbClsExtra         = 0;
  82.         wcex.cbWndExtra         = 0;
  83.         wcex.hInstance          = hInstance;
  84.         wcex.hIcon                      = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ZIL));
  85.         wcex.hCursor            = LoadCursor(NULL, IDC_ARROW);
  86.         wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+1);
  87.         wcex.lpszMenuName       = MAKEINTRESOURCE(IDC_ZIL);
  88.         wcex.lpszClassName      = szWindowClass;
  89.         wcex.hIconSm            = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  90.  
  91.         return RegisterClassEx(&wcex);
  92. }
  93.  
  94. //
  95. //   FUNZIONE: InitInstance(HINSTANCE, int)
  96. //
  97. //   SCOPO: salva l'handle di istanza e crea la finestra principale
  98. //
  99. //   COMMENTI:
  100. //
  101. //        In questa funzione l'handle di istanza viene salvato in una variabile globale e
  102. //        la finestra di programma principale viene creata e visualizzata.
  103. //
  104. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  105. {
  106.    HWND hWnd;
  107.  
  108.    hInst = hInstance; // Memorizzare l'handle di istanza nella variabile globale
  109.  
  110.    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  111.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  112.  
  113.    if (!hWnd)
  114.    {
  115.       return FALSE;
  116.    }
  117.  
  118.    ShowWindow(hWnd, nCmdShow);
  119.    UpdateWindow(hWnd);
  120.  
  121.    return TRUE;
  122. }
  123.  
  124. //
  125. //  FUNZIONE: WndProc(HWND, UINT, WPARAM, LPARAM)
  126. //
  127. //  SCOPO:  elabora i messaggi per la finestra principale.
  128. //
  129. //  WM_COMMAND  - elabora il menu dell'applicazione
  130. //  WM_PAINT    - disegna la finestra principale
  131. //  WM_DESTROY  - inserisce un messaggio di uscita e restituisce un risultato
  132. //
  133. //
  134. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  135. {
  136.         int wmId, wmEvent;
  137.         PAINTSTRUCT ps;
  138.         HDC hdc;
  139.  
  140.         switch (message)
  141.         {
  142.         case WM_COMMAND:
  143.                 wmId    = LOWORD(wParam);
  144.                 wmEvent = HIWORD(wParam);
  145.                 // Analizzare le selezioni di menu:
  146.                 switch (wmId)
  147.                 {
  148.                 case IDM_ABOUT:
  149.                         DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  150.                         break;
  151.                 case IDM_EXIT:
  152.                         DestroyWindow(hWnd);
  153.                         break;
  154.                 default:
  155.                         return DefWindowProc(hWnd, message, wParam, lParam);
  156.                 }
  157.                 break;
  158.         case WM_PAINT:
  159.                 hdc = BeginPaint(hWnd, &ps);
  160.                 // TODO: aggiungere qui il codice per il disegno...
  161.                 EndPaint(hWnd, &ps);
  162.                 break;
  163.         case WM_DESTROY:
  164.                 PostQuitMessage(0);
  165.                 break;
  166.         default:
  167.                 return DefWindowProc(hWnd, message, wParam, lParam);
  168.         }
  169.         return 0;
  170. }
  171.  
  172. // Gestore dei messaggi della finestra Informazioni su.
  173. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  174. {
  175.         UNREFERENCED_PARAMETER(lParam);
  176.         switch (message)
  177.         {
  178.         case WM_INITDIALOG:
  179.                 return (INT_PTR)TRUE;
  180.  
  181.         case WM_COMMAND:
  182.                 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  183.                 {
  184.                         EndDialog(hDlg, LOWORD(wParam));
  185.                         return (INT_PTR)TRUE;
  186.                 }
  187.                 break;
  188.         }
  189.         return (INT_PTR)FALSE;
  190. }


PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 13:22
Sabato, 07/03/2009
gli ho dato un'occhiata e anche se qualche istruzione è differente, dovrebbe essere quello che voglio io. Di solito uso vc++6.0 e scrivo da me tutto il codice....

però anche in vs non posso disegnare a mano la finestra

Ultima modifica effettuata da lorenzo il 07/03/2009 alle 13:26
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 13:23
Sabato, 07/03/2009
Scusa Andrea, ma il problema di Lorenzo non credo sia centrato sul codice da scrivere.

Lui vuole un IDE tramite il quale creare/modificare le window (o le dialog) che usera' nel codice stesso.


PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo