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.