Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80

    [C++] Problema con applicazione Win32

    Ciao a tutti, premetto che sono alle prime armi con la programmazione in Win32.

    Sto provando a fare una piccola applicazione ma è sorto un problema: in questa pagina c'è scritto che per creare una dialogbox preimpostata per poter caricare/salvare files, basta usare la struttura OPENFILENAME. Se io dichiaro nel mio progetto una variabile di tipo OPENFILENAME come nel tutorial, il visual c++ dice che OPENFILENAME non è definita.

    Sarà una banalità, ma devo includere qualche libreria per farla funzionare??

    Poi: è possibile cambiare lo stile della finestra e di tutti i suoi componenti? Perchè ora la grafica è quella di windows 98 e fa pena D: vorrei quella di windows vista / 7 se possibile si può cambiarla? Se sì, come?

    Help

  2. #2
    per OPENFILENAME è strano, dovrebbe bastarti includere windows.h.

    Per la veste grafica dai un'occhiata Qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Allora la libreria windows.h l'ho già inclusa... Non ho proprio idea del perchè non funzioni!

    Poi per la grafica: per creare un file manifest basta solo che per esempio apra il blocco note, scriva il codice XML e poi lo salvi in formato manifest? Non ho ben capito come fare! E ho provato a inserire la libreria commctrl.h e a richiamare la funzione InitCommControls() nella WinMain ma l'errore che mi viene dato è in fase di runtime ed è il seguente:

    "Impossibile avviare l'applicazione specificata. La configurazione dell'applicazione non è corretta."


    EDIT: Sarò senza PC per circa una settimana, causa cambio della scheda madre e tutti i suoi componenti appena cambiato tutto potrò rispondere a questo topic

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Sart
    Allora la libreria windows.h l'ho già inclusa...
    I file .h non sono librerie ma semplici include.

    Qual è l'esatto messaggio d'errore che hai?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    L'errore è il seguente:

    Error: identifier "OPENFILENAME" is undefined.

    Riguardo alla grafica: avevo richiamato la funzione InitCommonControls() nel punto sbagliato ora funziona

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Puoi mostrare tutto il codice sorgente? Con quale strumento compili?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Io uso Visual C++ 2010 Express (a giorni dovrei riuscire ad avere Visual Studio 2010 completo).

    Ecco il codice:

    codice:
    #include "stdafx.h"
    #include "GL files creator.h"
    #include <windows.h>
    #include <iostream>
    #include <string.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include <gl/glaux.h>
    
    #pragma comment(lib, "OpenGL32.lib")
    #pragma comment(lib, "GLu32.lib")
    #pragma comment(lib, "GLaux.lib")
    
    #include "loader.cpp"
    
    #pragma comment( lib, "comctl32.lib")
    #include <commctrl.h>
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    
    HWND toolbar=NULL, listbox=NULL, edit=NULL, button=NULL, label=NULL;
    HINSTANCE hInstanceM;
    
    int length, init;
    
    int type=NULL;
    
    BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
    	switch(Message){
    		case WM_INITDIALOG:
    
    		return TRUE;
    		case WM_COMMAND:
    			switch(LOWORD(wParam)){
    			case IDOK:
    				EndDialog(hwnd, IDOK);
    				break;
    			}
    		break;
    		default:
    		return FALSE;
    	}
    	return TRUE;
    }
    
    BOOL CALLBACK InsProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
    	switch(msg){
    		case WM_INITDIALOG:
    
    			return TRUE;
    
    		case WM_COMMAND:
    			switch(LOWORD(wParam)){
    				case IDOK:
    					//INCOMPLETO
    					EndDialog(hwnd, IDOK);
    					break;
    			}
    			break;
    
    		default:
    
    			return FALSE;
    	}
    	return TRUE;
    }
    
    BOOL CALLBACK toolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
    	switch (Message){
    		case WM_COMMAND:
    			switch(LOWORD(wParam)){
    				case ID_ADD:{
    					int nome=DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_INSERT), hwnd, InsProc);//INCOMPLETO
    				}
    					
    				case ID_INS:
    					//INCOMPLETO
    					break;
    
    				case ID_CANC:
    					//INCOMPLETO
    					break;
    			}
    			break;
    		default:
    			return FALSE;
    	}
    
    	return TRUE;
    }
    
    BOOL CALLBACK initProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
    	switch(msg){
    		case WM_INITDIALOG:
    
    		return TRUE;
    
    		case WM_COMMAND:
    			switch(LOWORD(wParam)){
    				case IDOK:
    					if(type!=NULL) EndDialog(hwnd, IDOK);
    					else MessageBox(NULL, "Specificare una tipologia di file!", "Attenzione", MB_OK | MB_ICONEXCLAMATION);
    					break;
    
    				case IDCANCEL:
    					EndDialog(hwnd, IDCANCEL);
    					PostQuitMessage(0);
    					break;
    
    				case ID_MODEL:
    					type=ID_MODEL;
    					break;
    
    				case ID_TEXTURE:
    					type=ID_TEXTURE;
    					break;
    
    				case ID_MP3:
    					type=ID_MP3;
    					break;
    			}
    		default:
    			return FALSE;
    	}
    
    	return TRUE;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
    	switch(msg){
    		case WM_COMMAND:
    			switch(LOWORD(wParam)){
    				case IDI_FILE_EXIT:
    					DestroyWindow(hwnd); break;
    				case IDI_STUFF_GO:{
    					int ret= DialogBox (GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
    				}
    
    				case IDI_SHOW_T:
    					ShowWindow(toolbar, SW_SHOW);
    					break;
    				case IDI_HIDE_T:
    					ShowWindow(toolbar, SW_HIDE);
    					break;
    				case ID_MIOBOTT:
    					length = GetWindowTextLength(edit);
    					if(length > 0){
    						char* buf;
    						buf = (char*) GlobalAlloc(GPTR, length + 1);
    						GetDlgItemText(hwnd, ID_EDIT, buf, length+1);
    						SendMessage(listbox, (UINT) LB_ADDSTRING, (WPARAM) wParam, (LPARAM) buf);
    					}else MessageBox(NULL, "Inserire del testo!", "Attenzione", MB_OK | MB_ICONEXCLAMATION);
    
    
    					break;
    			}
    			break;
    		case WM_CREATE: 
    			init = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_START), hwnd, initProc);
    			toolbar=CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_TOOLBAR), hwnd, toolDlgProc);
    			if(toolbar != NULL){
    				ShowWindow(toolbar, SW_SHOW);
    			}else{
    				MessageBox(NULL, "Errore nella toolbar", "Errore", MB_OK | MB_ICONERROR);
    			}
    			listbox = CreateWindow("LISTBOX", NULL, WS_CHILD | WS_BORDER | WS_VSCROLL | WS_VISIBLE, 10, 20, 100, 300, hwnd, (HMENU) ID_LISTA, hInstanceM, 0);
    			edit = CreateWindow("EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 150, 20, 200, 30, hwnd, (HMENU) ID_EDIT, hInstanceM, 0);
    			button = CreateWindow("BUTTON", "OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 150, 70, 50, 30, hwnd, (HMENU) ID_MIOBOTT, hInstanceM, 0);
    			label = CreateWindow("STATIC", NULL, WS_CHILD | WS_BORDER | WS_VISIBLE, 150, 130, 80, 30, hwnd, (HMENU) ID_LABEL, hInstanceM, 0);
    			
    			break;
    		case WM_CLOSE:
    			DestroyWindow(hwnd); break;
    		case WM_DESTROY:
    			DestroyWindow(toolbar);
    			PostQuitMessage(0); break;
    		default:
    			return DefWindowProc(hwnd, msg, wParam, lParam);
    	}
    
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    	InitCommonControls();
    	
    	HWND hwnd;
    	WNDCLASSEX wc;
    	MSG msg;
    
    	wc.cbSize=sizeof(WNDCLASSEX);
    	wc.style=0;
    	wc.lpfnWndProc=WndProc;
    	wc.cbClsExtra=0;
    	wc.cbWndExtra=0;
    	wc.hInstance=hInstanceM;
    	wc.hIcon=LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
    	wc.hCursor=LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground= (HBRUSH)(COLOR_WINDOW);
    	wc.lpszMenuName=MAKEINTRESOURCE(IDR_MYMENU);
    	wc.lpszClassName="myclass";
    	wc.hIconSm=(HICON)(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
    
    	if(!RegisterClassEx(&wc)){
    		MessageBox(NULL, "Registrazione classe fallita.", "Errore", MB_OK | MB_ICONERROR);
    		return 0;
    	}
    
    	hwnd=CreateWindowEx(WS_EX_STATICEDGE, "myclass", "Prova finestra", WS_OVERLAPPEDWINDOW, 200, 75, 500, 500, NULL, NULL, hInstance, NULL);
    
    	if(hwnd==NULL){
    		MessageBox(NULL, "Creazione della finestra fallita", "Errore", MB_OK | MB_ICONEXCLAMATION);
    		return 0;
    	}
    
    	ShowWindow(hwnd, nCmdShow);
    	UpdateWindow(hwnd);
    
    	while(GetMessage(&msg, NULL, 0, 0) > 0){
    		if(!IsDialogMessage(toolbar, &msg)){
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    
    	return msg.wParam;
    }
    Le librerie di OpenGL sono incluse perchè devo creare una classe in cui salvare tutte le coordinate di un modello 3D e poi salvarla in un file. La classe ha anche la funzione per disegnare il modello e per questo mi servono le OpenGL.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma in questo codice che hai mostrato dove sta la OPENFILENAME ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Ah già scusami l'avevo tolta

    comunque l'avevo inserita all'inizio:

    codice:
    #include "stdafx.h"
    #include "GL files creator.h"
    #include <windows.h>
    #include <iostream>
    #include <string.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include <gl/glaux.h>
    
    #pragma comment(lib, "OpenGL32.lib")
    #pragma comment(lib, "GLu32.lib")
    #pragma comment(lib, "GLaux.lib")
    
    #include "loader.cpp"
    
    #pragma comment( lib, "comctl32.lib")
    #include <commctrl.h>
    #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    
    HWND toolbar=NULL, listbox=NULL, edit=NULL, button=NULL, label=NULL;
    HINSTANCE hInstanceM;
    
    int length, init;
    
    int type=NULL;
    
    OPENFILENAME prova;
    
    BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
    	switch(Message){
    		case WM_INITDIALOG:
        ........

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Utilizza l'include

    #include <commdlg.h>
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.