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++ - Come modificare colore di tutti i pixel della finestra?
Forum - C/C++ - Come modificare colore di tutti i pixel della finestra?

Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 8:28
Martedì, 07/08/2012
Ciao, volevo chiedervi, se io ho una finestra, e volessi rendere tutti i pixel rossi (per esempio) neri, come potrei fare? C'è qualche macro o funzione?
So che esiste SetPixel ma io ho bisogno di una funzione che cambi colore di TUTTI i pixel della finestra.
Grazie in anticipo.:k:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6385
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:52
Martedì, 07/08/2012
Detta così non si può rispondere (bisognerebbe essere maghi)

Devi indicare l'ambiente in cui operi, le librerie grafiche che utilizzi, che tipo di progetto hai impostato, di quale finestra parli e come l'hai creata.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 12:04
Martedì, 07/08/2012
Hai ragione,
Windows 7 Professional 32bit
Come compilatore uso sia Dev C++ che MSVisual (L'eseguibile di dev è più veloce ma il debug di MSV non lo upera nessuno)
Sto utilizzando le Api di Windows.

In pratica data questa fnestra principale creata con CreateWindowEx() vorrei trovare un modo per rendere neri tutti i pixel rossi (o di un altro colore che scelgo).
Ho provato già a fare la verifica uno per uno con GetPixel e poi Set Pixel, ma impiega tropo tempo....Per intenderci vorrei usare una funzione come SetLayeredWindowAttributes solo che invece di rendere invisibili i pixel di un determinato colore, li rendesse neri. Capito?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6385
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:46
Sabato, 11/08/2012
Visual C++ è veloce quanto altri compilatori. Ovviamente dovrai compilare in modalità Release e non Debug per fare un confronto. In quale modalità compili?

In secondo luogo, se mostri il codice che hai usato è meglio ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 14:46
Sabato, 11/08/2012
Compilo in Release perchè in debug mi dà un errore.
Comuque non è questo il punto. Ora posto il codice, ma vi avviso, per adesso è estremamente rudimeentale e scommentato.
Codice sorgente - presumibilmente C++

  1. /***************************************************
  2. ***********PAINT XY-Z-******************************
  3. ***********AUTORE:  DANY****************************
  4. ***********DATA:    17/07/12************************
  5. ***********ORE:    *****************************
  6. ***********VERSIONE:  1.1***************************/
  7.  
  8. //Dichiarazione Header
  9. #define _WIN32_WINNT 0x0500
  10. #include <windows.h>
  11. #include <Windowsx.h>
  12. #include <commctrl.h>
  13. #include <cmath>
  14. #include <ctime>
  15. #include <stack>  
  16. #include <fstream>
  17. #include <cstring>
  18. //Dichiarazione librerie:
  19. #include "funzioni.h"
  20. //Dichiarazioni per visual style (grafica win 7)
  21. #pragma comment( lib, "comctl32.lib")
  22. #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
  23. //Fine Dichiarazioni...                                                                                            //prima della p--> \
  24. //Namespace:
  25. using namespace std;
  26. //Dichiarazione variabili globali:
  27. //Class Name delle finestre
  28. static char g_szClassName[] = "Main",name2[]="System";
  29. static HINSTANCE g_hInst = NULL;
  30. //Timer per la WM_Timer nella mainWindows
  31. const UINT idTimer1 = 1;
  32. UINT nTimerDelay = 1;
  33. //Bitmap
  34. HBITMAP griglia,maskgri,griglia2,griglia3;
  35. BITMAP bm;
  36. //Coordinate Punto funzione
  37. int ballX, ballY;
  38. //Font dei Caratteri:
  39. RECT rect;
  40. HFONT hfont;
  41. LOGFONT lf;
  42. //Progress Bar in system windows
  43. HWND pro;
  44. //stringhe che in function window contiene le funzioni in notazione polacca inversa.
  45. string rpn="",rpn2="";
  46. //Variabile che indica se il pulsante disegna in function window è stato premuto.
  47. int funpress=0;
  48. //Point che contiene le posizioni dei punti che collegherà  la linea
  49. POINT pp[2];
  50. //Minimi e massimi delle equazioni dei sistemi
  51. float Mx=0,My=0,Mz=0;
  52. //Precisione
  53. int prec=0;
  54. //Se checkbox è checkata in filewindow
  55. int ckx;
  56. //Modulo per terminare processo
  57. HMODULE wmphandle;
  58. //Controlla se è il primo avvio:
  59. fstream f,g;
  60. string tex="";
  61.  
  62. //Dichiarazione della WndProc Della MainWindow
  63. LRESULT CALLBACK WndProc(HWND hwnd ,UINT Message, WPARAM wParam, LPARAM lParam);
  64. //Disegna la griglia di sfondo in assonometria monometrica metodo 2
  65. void DrawGriglia1(HDC hdc)
  66. {
  67.      HDC hdcMemory=0;
  68.      hdcMemory=CreateCompatibleDC(hdc);
  69.      
  70.          SelectObject(hdcMemory, maskgri);
  71.          BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCAND);
  72.          
  73.          SelectObject(hdcMemory, griglia);
  74.      BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCPAINT);
  75.      
  76.      DeleteDC(hdcMemory);
  77. }
  78. //Disegna la griglia di sfondo in assonometria cavaliera metodo 1
  79. void DrawGriglia2(HDC hdc)
  80. {
  81.      HDC hdcMemory=0;
  82.      hdcMemory=CreateCompatibleDC(hdc);
  83.      
  84.          SelectObject(hdcMemory, maskgri);
  85.          BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCAND);
  86.          
  87.          SelectObject(hdcMemory, griglia2);
  88.      BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCPAINT);
  89.      
  90.      DeleteDC(hdcMemory);
  91. }
  92. //Disegna la griglia di sfondo in assonometria monometrica metodo 1
  93. void DrawGriglia3(HDC hdc)
  94. {
  95.      HDC hdcMemory=0;
  96.      hdcMemory=CreateCompatibleDC(hdc);
  97.      
  98.          SelectObject(hdcMemory, maskgri);
  99.          BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCAND);
  100.          
  101.          SelectObject(hdcMemory, griglia3);
  102.      BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCPAINT);
  103.      
  104.      DeleteDC(hdcMemory);
  105. }
  106. /*************************************************************************************************************/
  107. //Dichiarazione variabili in WndProc
  108. //Variabili disegno funzione
  109. double x,y,z;
  110. double i,j,k;
  111. //Variabili Menu:
  112. HMENU file,hfile,info,hinfo,modifica,hmodifica,ruota,dire,visu,hvisu;
  113. int MENU_FILE_EXIT=0;  //Valore ritorno se si clicca su "Esci"
  114. int MENU_FILE_CURV=1;  //Valore ritorno se si clicca su "Disegna Equazione"
  115. int MENU_FILE_ABOU=3;  //Valore ritorno se si clicca su "Informazioni su "Paint XY"
  116. int MENU_FILE_DEST=8;  //Valore ritorno se si clicca su "Ruota a destra"
  117. int MENU_FILE_SINI=7;  //Valore ritorno se si clicca su "Ruota a sinistra"
  118. int MENU_FILE_HELP=4;  //Valore ritorno se si clicca su "HELP"
  119. int MENU_FILE_POSI=9;  //Valore ritorno se si clicca su "Positivo"
  120. int MENU_FILE_TUTT=10;  //Valore ritorno se si clicca su "Tutto"
  121. int MENU_FILE_CLEA=6;  //Valore ritorno se si clicca su "Pulisci"
  122.  
  123. /*result:*/
  124. float result,result2;
  125. //Sfondo
  126. int rot=300;
  127. //Visualizzazione grafico
  128. HWND all,pos;
  129. //HDC di -> hwnd
  130. HDC hdcWindow=NULL;
  131. //Penna
  132. HPEN penna;
  133.  
  134.  
  135.  
  136. /*WNDPROC DELLA MAIN*/
  137. LRESULT CALLBACK WndProc(HWND hwnd ,UINT Message, WPARAM wParam, LPARAM lParam)
  138. {  
  139.         InitCommonControls ();   //Applicazione visual style
  140.        
  141.    switch(Message)
  142.    {
  143.       case WM_CREATE:
  144.           f.open("Avvio.txt",ios::in);
  145.           f>>tex;
  146.           if (tex=="")
  147.           {
  148.              system("start Guida.txt");
  149.           }
  150.           f.close();
  151.           g.open("Avvio.txt",ios::out|ios::app);
  152.           if (tex=="")
  153.           {
  154.              g<<"a";
  155.           }
  156.           g.close();
  157.           SetLayeredWindowAttributes(hwnd, RGB(0, 0, 255), 255, LWA_COLORKEY | LWA_ALPHA);
  158.                   //Nella finestra principale:
  159.                   //Inizializzazione delle immagini BMP
  160.           griglia = LoadBitmap(g_hInst, "gri");
  161.           griglia2 = LoadBitmap(g_hInst, "gri2");
  162.           griglia3 = LoadBitmap(g_hInst, "gri3");
  163.                   maskgri = LoadBitmap(g_hInst, "maskgri");
  164.                   //Timer:
  165.           SetTimer(hwnd, idTimer1, nTimerDelay, NULL);
  166.                   //Menu:
  167.                   //Dichiarazione Menu:
  168.                   file=CreateMenu();
  169.                   hfile=CreatePopupMenu();
  170.                   hinfo=CreatePopupMenu();
  171.                   hmodifica=CreatePopupMenu();
  172.                   dire=CreatePopupMenu();
  173.                   hvisu=CreatePopupMenu();
  174.                   //Creazione Menu:
  175.                   /*File*/
  176.           AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hfile,TEXT("File"));
  177.           AppendMenu(hfile,MF_STRING,MENU_FILE_EXIT,TEXT("Esci"));
  178.                   /*Modifica*/
  179.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hmodifica,TEXT("Disegna"));
  180.           AppendMenu(hmodifica,MF_STRING,MENU_FILE_CURV,TEXT("Equazione"));
  181.                   AppendMenu(hmodifica,MF_STRING,MENU_FILE_CLEA,TEXT("Pulisci      CANC"));
  182.                   /*Ruota*/
  183.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) dire,TEXT("Ruota"));
  184.                   AppendMenu(dire,MF_STRING,MENU_FILE_DEST,TEXT("A Destra          Freccia destra"));
  185.                   AppendMenu(dire,MF_STRING,MENU_FILE_SINI,TEXT("A Sinistra          Freccia sinistra"));
  186.                   /*Visibilità*/
  187.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hvisu,TEXT("Rendi visibile..."));
  188.                   AppendMenu(hvisu,MF_STRING,MENU_FILE_POSI,TEXT("Spazio Positivo"));
  189.                   AppendMenu(hvisu,MF_STRING,MENU_FILE_TUTT,TEXT("Spazio Complessivo"));
  190.                   /*Info*/
  191.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hinfo,TEXT("Info"));
  192.                   AppendMenu(hinfo,MF_STRING,MENU_FILE_ABOU,TEXT("Informazioni su Paint XY"));
  193.                   AppendMenu(hinfo,MF_STRING,MENU_FILE_HELP,TEXT("Help"));
  194.                   //Rende visibile i menu
  195.                   SetMenu(hwnd,file);  
  196.           /*BARRA*/
  197.               pro=CreateWindowEx(NULL, PROGRESS_CLASS, NULL, WS_CHILD|WS_VISIBLE,5,2, 200, 25, hwnd, NULL, NULL, 0);
  198.           /*Visualizzazione del grafico*/
  199.           break;
  200.       case WM_TIMER:
  201.                   if (funpress>0)
  202.                   {
  203.               hdcWindow = GetDC(hwnd);
  204.                          
  205.                           for (k=-Mz;k<=Mz;k=k+2*Mz/prec)
  206.                           {
  207.                   SendMessage(pro, PBM_SETPOS, WPARAM(int((k+Mz)*100/(2*Mz)+1)), 0);
  208.                                   for (j=-My;j<=My;j=j+2*My/prec)
  209.                                   {
  210.                       for (i=-Mx;i<=Mx;i=i+2*Mx/prec)
  211.                       {
  212.                           result=SolveRPN(rpn,i,j,k);
  213.                           result2=SolveRPN(rpn2,i,j,k);
  214.                           if (fabs(result-result2)<Mx/100)
  215.                           {
  216.                                penna=CreatePen(PS_SOLID,3,RGB(fabs(k*255/Mz),fabs(k*255/Mz),255-fabs(k*255/Mz)));
  217.                                            SelectObject(hdcWindow,penna);
  218.                                if (rot%3==0)
  219.                                {
  220.                                   x=i/2;
  221.                                   y=j/1.4142135-k;
  222.                                   ballX=int(500-x*500/Mx);
  223.                                   ballY=int(500+y*500/My);
  224.                                   pp[1].x=ballX;
  225.                                                               pp[1].y=ballY;
  226.                                                               if ((pp[0].x>0)&&(pp[0].y>0)&&(dist(pp[1],pp[0])<350)&&(ckx==BST_CHECKED))
  227.                                                                 Polyline(hdcWindow,pp ,2);
  228.                                       pp[0].x=ballX;
  229.                                                               pp[0].y=ballY;
  230.                                                               if (ckx!=BST_CHECKED)
  231.                                                               {
  232.                                       if (((i<0)||(j<0)||(k<0))||((i<0)&&(j<0)&&(k<0)))
  233.                                       {
  234.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,255));  
  235.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,255));
  236.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,255));
  237.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,255));
  238.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,255));      
  239.                                       }
  240.                                       if ((i>0)&&(j>0)&&(k>0))
  241.                                       {
  242.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,0));  
  243.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,0));
  244.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,0));
  245.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,0));
  246.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,0));  
  247.                                       }
  248.                                   }
  249.                                }                        
  250.                                if (rot%3==1)
  251.                                {
  252.                                   x=(i-(j/1.73205))*1.73205/2;
  253.                                   y=(j*2/1.73205)+((i-(j/1.73205))/2)-k;
  254.                                   ballX=int(500-x*500/Mx);
  255.                                   ballY=int(500+y*500/My);
  256.                                   pp[1].x=ballX;
  257.                                                               pp[1].y=ballY;
  258.                                                               if ((pp[0].x>0)&&(pp[0].y>0)&&(dist(pp[1],pp[0])<350)&&(ckx==BST_CHECKED))
  259.                                                                 Polyline(hdcWindow,pp ,2);
  260.                                       pp[0].x=ballX;
  261.                                                               pp[0].y=ballY;
  262.                                                               if (ckx!=BST_CHECKED)
  263.                                                               {
  264.                                       if (((i<0)||(j<0)||(k<0))||((i<0)&&(j<0)&&(k<0)))
  265.                                       {
  266.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,255));  
  267.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,255));
  268.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,255));
  269.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,255));
  270.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,255));      
  271.                                       }
  272.                                       if ((i>0)&&(j>0)&&(k>0))
  273.                                       {
  274.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,0));  
  275.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,0));
  276.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,0));
  277.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,0));
  278.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,0));  
  279.                                       }
  280.                                   }
  281.                                }
  282.                                if (rot%3==2)
  283.                                {
  284.                                   x=(i-(j/2))/2;
  285.                                   y=(i-j/2)/(1.73205/2)+(2*j/1.73205)-k;
  286.  
  287.                                   ballX=int(500-x*500/Mx);
  288.                                   ballY=int(500+y*500/My);
  289.                                   pp[1].x=ballX;
  290.                                                               pp[1].y=ballY;
  291.                                                               if ((pp[0].x>0)&&(pp[0].y>0)&&(dist(pp[1],pp[0])<350)&&(ckx==BST_CHECKED))
  292.                                                                 Polyline(hdcWindow,pp ,2);
  293.                                       pp[0].x=ballX;
  294.                                                               pp[0].y=ballY;
  295.                                                               if (ckx!=BST_CHECKED)
  296.                                                               {
  297.                                       if (((i<0)||(j<0)||(k<0))||((i<0)&&(j<0)&&(k<0)))
  298.                                       {
  299.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,255));  
  300.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,255));
  301.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,255));
  302.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,255));
  303.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,255));      
  304.                                       }
  305.                                       if ((i>0)&&(j>0)&&(k>0))
  306.                                       {
  307.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,0));  
  308.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,0));
  309.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,0));
  310.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,0));
  311.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,0));  
  312.                                       }
  313.                                   }
  314.                               }
  315.                           }
  316.                       }
  317.                   }
  318.               }
  319.               pp[0].x=0;
  320.               pp[0].y=0;
  321.              
  322.               funpress=0;
  323.                   }
  324.           break;
  325.       case WM_COMMAND: /***************************************MENU*****************************************************/
  326.                    if (LOWORD(wParam)==MENU_FILE_EXIT)
  327.                    {
  328.                            DestroyWindow(hwnd);    //Chiudo la finestra
  329.                    }
  330.                    if (LOWORD(wParam)==MENU_FILE_ABOU)
  331.                    {
  332.                            MessageBox(hwnd,"Paint XY -Z- Versione 1.1","By Dany",MB_OK|MB_ICONINFORMATION);
  333.                    }
  334.                    if (LOWORD(wParam)==MENU_FILE_CLEA)
  335.                    {
  336.                
  337.                    ShowWindow(hwnd,0);
  338.                            ShowWindow(hwnd,1);
  339.                            Mx=0;My=0,Mz=0;
  340.                            rpn="";
  341.                            rpn2="";
  342.                            funpress=0;
  343.                    }
  344.                    if (LOWORD(wParam)==MENU_FILE_CURV)
  345.                    {
  346.                            //Crea e visualizza la finestra
  347.                            MSG messages5;
  348.                HWND hwnd5 = CreateWindowEx (0,name2,"Equazione:",WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE,400,400,400,320,hwnd, NULL, g_hInst,NULL);
  349.                            ShowWindow (hwnd5, 1);
  350.                            while (GetMessage (&messages5, NULL, 0, 0))
  351.                            {
  352.                        TranslateMessage(&messages5);
  353.                        DispatchMessage(&messages5);
  354.                            }
  355.                    }
  356.                    if (LOWORD(wParam)==MENU_FILE_HELP)
  357.                    {
  358.                system("Guida.txt");
  359.            }
  360.            if (LOWORD(wParam)==7)
  361.                    {
  362.                if (rpn!="")
  363.                funpress++;
  364.                rot--;
  365.                ShowWindow(hwnd,0);
  366.                ShowWindow(hwnd,1);
  367.            }
  368.            if (LOWORD(wParam)==8)
  369.                    {
  370.                if (rpn!="")
  371.                funpress++;
  372.                rot++;
  373.                ShowWindow(hwnd,0);
  374.                ShowWindow(hwnd,1);
  375.            }
  376.            if (LOWORD(wParam)==9)
  377.                    {  
  378.                SetLayeredWindowAttributes(hwnd, RGB(255, 0, 255), 255, LWA_COLORKEY | LWA_ALPHA);
  379.            }
  380.            if (LOWORD(wParam)==10)
  381.                    {
  382.                SetLayeredWindowAttributes(hwnd, RGB(0, 0, 255), 255, LWA_COLORKEY | LWA_ALPHA);
  383.            }
  384.            break;
  385.       case WM_PAINT:
  386.             PAINTSTRUCT ps;
  387.             HDC hdcWindow;
  388.             hdcWindow = BeginPaint(hwnd, &ps);
  389.            
  390.             if (rot%3==0)
  391.                DrawGriglia1(hdcWindow);
  392.                
  393.             if (rot%3==1)
  394.                DrawGriglia2(hdcWindow);
  395.                
  396.             if (rot%3==2)
  397.                DrawGriglia3(hdcWindow);
  398.             if (rpn!="")  
  399.                         funpress++;
  400.                        
  401.             EndPaint(hwnd, &ps);
  402.                  break;
  403.                 case WM_KEYDOWN:
  404.                          if (LOWORD(wParam)==VK_DELETE)   //Pulizia istantanea se si preme  CANC
  405.                          {
  406.                            ShowWindow(hwnd,0);
  407.                            ShowWindow(hwnd,1);
  408.                            Mx=0;My=0,Mz=0;
  409.                            rpn="";
  410.                            rpn2="";
  411.                            funpress=0;
  412.                          }
  413.                          if (LOWORD(wParam)==VK_LEFT)
  414.                          {
  415.                    if (rpn!="")
  416.                funpress++;
  417.                rot--;
  418.                ShowWindow(hwnd,0);
  419.                ShowWindow(hwnd,1);
  420.              }
  421.              if (LOWORD(wParam)==VK_RIGHT)
  422.                          {
  423.                      if (rpn!="")
  424.                funpress++;
  425.                rot++;
  426.                ShowWindow(hwnd,0);
  427.                ShowWindow(hwnd,1);                    
  428.              }
  429.                          break;
  430.       case WM_CLOSE:
  431.                   if(MessageBox(hwnd,"Vuoi davvero uscire?","Messaggio",MB_YESNO|MB_ICONQUESTION)==IDYES)
  432.          DestroyWindow(hwnd);
  433.          break;
  434.       case WM_DESTROY:
  435.            wmphandle = GetModuleHandle("PaintXY.exe");
  436.            DWORD       dwExitCode;
  437.            GetExitCodeProcess(wmphandle,  &dwExitCode );
  438.            ExitProcess( dwExitCode);
  439.          KillTimer(hwnd, idTimer1);
  440.          PostQuitMessage(0);
  441.          break;
  442.       default:
  443.          return DefWindowProc(hwnd, Message, wParam, lParam);
  444.    }
  445.    return 0;
  446. }
  447. //Function Window
  448. //HWND
  449. HWND edit,edit2,button,sbox;
  450. HWND maxx,maxy,maxz,acc;
  451. //Window Procedure della System Window
  452. LRESULT CALLBACK WindowProcedure3 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  453. {      
  454.         InitCommonControls ();     //Applicazione visual style
  455.         switch(message)
  456.         {
  457.                 case WM_CREATE:
  458.            
  459.                         /*CHECKBOX*/
  460.                         sbox=CreateWindow("Button","Collega con linee",WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX,170,132,150,25,hwnd,NULL,NULL,NULL);
  461.                        
  462.                         /*EDIT*/
  463.                     edit=CreateWindow("edit","<primo membro>",WS_VISIBLE|WS_CHILD|WS_BORDER|EM_GETLINE,10,40,150,20,hwnd,0,0,0);
  464.                         edit2=CreateWindow("edit","<secondo membro>",WS_VISIBLE|WS_CHILD|WS_BORDER|EM_GETLINE,174,40,150,20,hwnd,0,0,0);
  465.                         /*BUTTON*/
  466.                         button=CreateWindow("Button","CALCOLA!",WS_VISIBLE|WS_CHILD,4,220,385,50,hwnd,(HMENU)2,NULL,NULL);
  467.                         /*MIN E MAX X E Y E PRECISIONE*/
  468.                         maxx=CreateWindow("edit","10",WS_VISIBLE|WS_CHILD|WS_BORDER,80,80,60,20,hwnd,NULL,NULL,NULL);
  469.                         maxy=CreateWindow("edit","10",WS_VISIBLE|WS_CHILD|WS_BORDER,80,115,60,20,hwnd,NULL,NULL,NULL);
  470.                         maxz=CreateWindow("edit","10",WS_VISIBLE|WS_CHILD|WS_BORDER,80,150,60,20,hwnd,NULL,NULL,NULL);
  471.                         acc=CreateWindow("edit","70",WS_VISIBLE|WS_CHILD|WS_BORDER,250,92,50,20,hwnd,NULL,NULL,NULL);
  472.                         /****SETTO I CARATTERI DA UTILIZZARE: FONT, DIMENSIONI ECC...**/
  473.                         GetObject (GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf);
  474.                         hfont = CreateFont (20,0,0,0, 500, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
  475.             CLIP_DEFAULT_PRECIS, 5, VARIABLE_PITCH, TEXT ("Monotype Corsiva"));
  476.                         SendMessage (edit, WM_SETFONT, (WPARAM) hfont, true);
  477.                         SendMessage (edit2, WM_SETFONT, (WPARAM) hfont, true);
  478.                         SendMessage (button, WM_SETFONT, (WPARAM) hfont, true);
  479.                         SendMessage (maxx, WM_SETFONT, (WPARAM) hfont, true);
  480.                         SendMessage (maxy, WM_SETFONT, (WPARAM) hfont, true);
  481.                         SendMessage (maxz, WM_SETFONT, (WPARAM) hfont, true);
  482.                         SendMessage (acc, WM_SETFONT, (WPARAM) hfont, true);
  483.                         SendMessage (sbox, WM_SETFONT, (WPARAM) hfont, true);
  484.                 break;
  485.                 case WM_PAINT:
  486.                         PAINTSTRUCT ps;
  487.                         HDC hdcWindow;
  488.                         hdcWindow = BeginPaint(hwnd, &ps);
  489.                         /****SETTO I CARATTERI DA UTILIZZARE: FONT, DIMENSIONI ECC...**/
  490.                         hfont = CreateFont (20,0,0,0, 500, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
  491.             CLIP_DEFAULT_PRECIS, 5, VARIABLE_PITCH, TEXT ("Monotype Corsiva"));
  492.                         SelectObject (hdcWindow, hfont);
  493.                         SetRect (& rect, 100,100,700,200);
  494.             SetTextColor (hdcWindow, RGB (0,0,0));
  495.                         TextOut(hdcWindow,1,1,"Comporre l'equazione desiderata.",32);
  496.                         TextOut(hdcWindow,161,40,"=",1);
  497.                         TextOut(hdcWindow,10,80,"max x =",7);
  498.                         TextOut(hdcWindow,10,115,"max y =",7);
  499.                         TextOut(hdcWindow,10,150,"max z =",7);
  500.                         TextOut(hdcWindow,175,92,"precisione",10);
  501.                         EndPaint(hwnd,&ps);
  502.                         break;
  503.                 case WM_COMMAND:
  504.                         if (LOWORD(wParam)==2)
  505.                         {
  506.                                 funpress++;                //Indica che è stato premuto il tasto CALCOLA!
  507.                                 //Inizializzo gli array che contengono le espressioni
  508.                                 char in[100]="",in2[100]="";
  509.                                 //Prendo il testo negli edit e lo metto negli array
  510.                                 GetWindowText(edit,in,100);
  511.                                 GetWindowText(edit2,in2,100);
  512.                                 //Mi trovo la notazione polacca inversa (RPN)
  513.                                 rpn=FoundRPN(in);
  514.                                 rpn2=FoundRPN(in2);
  515.                                 //leggo i massimi e i minimi e la precisione:
  516.                 //ne inizializzo gli array
  517.                                 char maxix[6]="",maxiz[6]="",maxiy[6]="",accu[5]="";
  518.                                 //Li catturo dagli edit
  519.                                 GetWindowText(acc,accu,5);
  520.                                 GetWindowText(maxx,maxix,6);
  521.                                 GetWindowText(maxy,maxiy,6);
  522.                                 GetWindowText(maxz,maxiz,6);
  523.                                 //Converto le string in float.
  524.                                 Mx=atof(maxix);
  525.                                 My=atof(maxiy);
  526.                                 Mz=atof(maxiz);
  527.                                 prec=atoi(accu);
  528.                                 //Controllo lo stato della checkbox
  529.                                 ckx=SendMessage(sbox, BM_GETCHECK, 0,0);
  530.                         }
  531.                         break;
  532.                 case WM_DESTROY:
  533.                                 PostQuitMessage(0);
  534.                                 break;
  535.                 default:
  536.                         return DefWindowProc(hwnd,message,wParam,lParam);
  537.         }
  538.         return 0;
  539. }
  540.  
  541. //Creazione finestra principale/Dichiarazione di hinstance per le altre finestre.
  542. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
  543. {
  544.    InitCommonControls ();      //Applicazione visual style
  545.    WNDCLASSEX WndClass,WndClass3;
  546.    HWND hwnd;
  547.    MSG Msg;
  548.    
  549.    g_hInst = hInstance;
  550.    //Main Window
  551.    WndClass.cbSize        = sizeof(WNDCLASSEX);
  552.    WndClass.style         = 0;
  553.    WndClass.lpfnWndProc   = WndProc;
  554.    WndClass.cbClsExtra    = 0;
  555.    WndClass.cbWndExtra    = 0;
  556.    WndClass.hInstance     = g_hInst;
  557.    WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  558.    WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  559.    WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
  560.    WndClass.lpszMenuName  = NULL;
  561.    WndClass.lpszClassName = g_szClassName;
  562.    WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  563.    //SystemWindow
  564.    WndClass3.cbSize        = sizeof(WNDCLASSEX);
  565.    WndClass3.style         = 0;
  566.    WndClass3.lpfnWndProc   = WindowProcedure3;
  567.    WndClass3.cbClsExtra    = 0;
  568.    WndClass3.cbWndExtra    = 0;
  569.    WndClass3.hInstance     = hInstance;
  570.    WndClass3.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  571.    WndClass3.hCursor       = LoadCursor(NULL, IDC_ARROW);
  572.    WndClass3.hbrBackground = (HBRUSH)(15);
  573.    WndClass3.lpszMenuName  = NULL;
  574.    WndClass3.lpszClassName = name2;
  575.    WndClass3.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  576.  
  577.    //Main Window
  578.    if(!RegisterClassEx(&WndClass))
  579.    {
  580.       MessageBox(0, "Window1 Registration Failed!", "Error!",
  581.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  582.       return 0;
  583.    }
  584.    //System Window
  585.     if(!RegisterClassEx(&WndClass3))
  586.    {
  587.       MessageBox(0, "Window3 Registration Failed!", "Error!",
  588.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  589.       return 0;
  590.    }
  591.    //CREAZIONE:
  592.    //Main Window
  593.    hwnd = CreateWindowEx(
  594.    WS_EX_CLIENTEDGE|WS_EX_LAYERED,
  595.    g_szClassName,
  596.    "Paint XY-Z-",
  597.    WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE,
  598.    175, 0, 1009, 1000,
  599.    NULL, NULL, g_hInst, NULL);
  600.      
  601.     //incaso di errore
  602.    if (hwnd == NULL)
  603.    {
  604.       MessageBox(0, "Window Creation Failed!", "Error!",
  605.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  606.       return 0;
  607.    }
  608.    //Visualizza Main Window
  609.    ShowWindow(hwnd, nCmdShow);
  610.    UpdateWindow(hwnd);
  611.    //Messaggio da Main Window
  612.    while(GetMessage(&Msg, NULL, 0, 0))
  613.    {
  614.       TranslateMessage(&Msg);
  615.       DispatchMessage(&Msg);
  616.    }
  617.    return Msg.wParam;
  618. }






Inoltre vi è anche un file contenenti le funzioni ma sono riferite alla conversione in RPN, perciò quì non hano importanza.

PM Quote
Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 14:53
Sabato, 11/08/2012
Compilo in Release perchè in debug mi dà un errore.
Comuque non è questo il punto. Ora posto il codice, ma vi avviso, per adesso è estremamente rudimeentale e scommentato.
Codice sorgente - presumibilmente C++

  1. /***************************************************
  2. ***********PAINT XY-Z-******************************
  3. ***********AUTORE:  DANY****************************
  4. ***********DATA:    17/07/12************************
  5. ***********ORE:    *****************************
  6. ***********VERSIONE:  1.1***************************/
  7.  
  8. //Dichiarazione Header
  9. #define _WIN32_WINNT 0x0500
  10. #include <windows.h>
  11. #include <Windowsx.h>
  12. #include <commctrl.h>
  13. #include <cmath>
  14. #include <ctime>
  15. #include <stack>  
  16. #include <fstream>
  17. #include <cstring>
  18. //Dichiarazione librerie:
  19. #include "funzioni.h"
  20. //Dichiarazioni per visual style (grafica win 7)
  21. #pragma comment( lib, "comctl32.lib")
  22. #pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
  23. //Fine Dichiarazioni...                                                                                            //prima della p--> \
  24. //Namespace:
  25. using namespace std;
  26. //Dichiarazione variabili globali:
  27. //Class Name delle finestre
  28. static char g_szClassName[] = "Main",name2[]="System";
  29. static HINSTANCE g_hInst = NULL;
  30. //Timer per la WM_Timer nella mainWindows
  31. const UINT idTimer1 = 1;
  32. UINT nTimerDelay = 1;
  33. //Bitmap
  34. HBITMAP griglia,maskgri,griglia2,griglia3;
  35. BITMAP bm;
  36. //Coordinate Punto funzione
  37. int ballX, ballY;
  38. //Font dei Caratteri:
  39. RECT rect;
  40. HFONT hfont;
  41. LOGFONT lf;
  42. //Progress Bar in system windows
  43. HWND pro;
  44. //stringhe che in function window contiene le funzioni in notazione polacca inversa.
  45. string rpn="",rpn2="";
  46. //Variabile che indica se il pulsante disegna in function window è stato premuto.
  47. int funpress=0;
  48. //Point che contiene le posizioni dei punti che collegherà  la linea
  49. POINT pp[2];
  50. //Minimi e massimi delle equazioni dei sistemi
  51. float Mx=0,My=0,Mz=0;
  52. //Precisione
  53. int prec=0;
  54. //Se checkbox è checkata in filewindow
  55. int ckx;
  56. //Modulo per terminare processo
  57. HMODULE wmphandle;
  58. //Controlla se è il primo avvio:
  59. fstream f,g;
  60. string tex="";
  61.  
  62. //Dichiarazione della WndProc Della MainWindow
  63. LRESULT CALLBACK WndProc(HWND hwnd ,UINT Message, WPARAM wParam, LPARAM lParam);
  64. //Disegna la griglia di sfondo in assonometria monometrica metodo 2
  65. void DrawGriglia1(HDC hdc)
  66. {
  67.      HDC hdcMemory=0;
  68.      hdcMemory=CreateCompatibleDC(hdc);
  69.      
  70.          SelectObject(hdcMemory, maskgri);
  71.          BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCAND);
  72.          
  73.          SelectObject(hdcMemory, griglia);
  74.      BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCPAINT);
  75.      
  76.      DeleteDC(hdcMemory);
  77. }
  78. //Disegna la griglia di sfondo in assonometria cavaliera metodo 1
  79. void DrawGriglia2(HDC hdc)
  80. {
  81.      HDC hdcMemory=0;
  82.      hdcMemory=CreateCompatibleDC(hdc);
  83.      
  84.          SelectObject(hdcMemory, maskgri);
  85.          BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCAND);
  86.          
  87.          SelectObject(hdcMemory, griglia2);
  88.      BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCPAINT);
  89.      
  90.      DeleteDC(hdcMemory);
  91. }
  92. //Disegna la griglia di sfondo in assonometria monometrica metodo 1
  93. void DrawGriglia3(HDC hdc)
  94. {
  95.      HDC hdcMemory=0;
  96.      hdcMemory=CreateCompatibleDC(hdc);
  97.      
  98.          SelectObject(hdcMemory, maskgri);
  99.          BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCAND);
  100.          
  101.          SelectObject(hdcMemory, griglia3);
  102.      BitBlt(hdc, 0, 0, 1000, 1000, hdcMemory, 0, 0, SRCPAINT);
  103.      
  104.      DeleteDC(hdcMemory);
  105. }
  106. /*************************************************************************************************************/
  107. //Dichiarazione variabili in WndProc
  108. //Variabili disegno funzione
  109. double x,y,z;
  110. double i,j,k;
  111. //Variabili Menu:
  112. HMENU file,hfile,info,hinfo,modifica,hmodifica,ruota,dire,visu,hvisu;
  113. int MENU_FILE_EXIT=0;  //Valore ritorno se si clicca su "Esci"
  114. int MENU_FILE_CURV=1;  //Valore ritorno se si clicca su "Disegna Equazione"
  115. int MENU_FILE_ABOU=3;  //Valore ritorno se si clicca su "Informazioni su "Paint XY"
  116. int MENU_FILE_DEST=8;  //Valore ritorno se si clicca su "Ruota a destra"
  117. int MENU_FILE_SINI=7;  //Valore ritorno se si clicca su "Ruota a sinistra"
  118. int MENU_FILE_HELP=4;  //Valore ritorno se si clicca su "HELP"
  119. int MENU_FILE_POSI=9;  //Valore ritorno se si clicca su "Positivo"
  120. int MENU_FILE_TUTT=10;  //Valore ritorno se si clicca su "Tutto"
  121. int MENU_FILE_CLEA=6;  //Valore ritorno se si clicca su "Pulisci"
  122.  
  123. /*result:*/
  124. float result,result2;
  125. //Sfondo
  126. int rot=300;
  127. //Visualizzazione grafico
  128. HWND all,pos;
  129. //HDC di -> hwnd
  130. HDC hdcWindow=NULL;
  131. //Penna
  132. HPEN penna;
  133.  
  134.  
  135.  
  136. /*WNDPROC DELLA MAIN*/
  137. LRESULT CALLBACK WndProc(HWND hwnd ,UINT Message, WPARAM wParam, LPARAM lParam)
  138. {  
  139.         InitCommonControls ();   //Applicazione visual style
  140.        
  141.    switch(Message)
  142.    {
  143.       case WM_CREATE:
  144.           f.open("Avvio.txt",ios::in);
  145.           f>>tex;
  146.           if (tex=="")
  147.           {
  148.              system("start Guida.txt");
  149.           }
  150.           f.close();
  151.           g.open("Avvio.txt",ios::out|ios::app);
  152.           if (tex=="")
  153.           {
  154.              g<<"a";
  155.           }
  156.           g.close();
  157.           SetLayeredWindowAttributes(hwnd, RGB(0, 0, 255), 255, LWA_COLORKEY | LWA_ALPHA);
  158.                   //Nella finestra principale:
  159.                   //Inizializzazione delle immagini BMP
  160.           griglia = LoadBitmap(g_hInst, "gri");
  161.           griglia2 = LoadBitmap(g_hInst, "gri2");
  162.           griglia3 = LoadBitmap(g_hInst, "gri3");
  163.                   maskgri = LoadBitmap(g_hInst, "maskgri");
  164.                   //Timer:
  165.           SetTimer(hwnd, idTimer1, nTimerDelay, NULL);
  166.                   //Menu:
  167.                   //Dichiarazione Menu:
  168.                   file=CreateMenu();
  169.                   hfile=CreatePopupMenu();
  170.                   hinfo=CreatePopupMenu();
  171.                   hmodifica=CreatePopupMenu();
  172.                   dire=CreatePopupMenu();
  173.                   hvisu=CreatePopupMenu();
  174.                   //Creazione Menu:
  175.                   /*File*/
  176.           AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hfile,TEXT("File"));
  177.           AppendMenu(hfile,MF_STRING,MENU_FILE_EXIT,TEXT("Esci"));
  178.                   /*Modifica*/
  179.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hmodifica,TEXT("Disegna"));
  180.           AppendMenu(hmodifica,MF_STRING,MENU_FILE_CURV,TEXT("Equazione"));
  181.                   AppendMenu(hmodifica,MF_STRING,MENU_FILE_CLEA,TEXT("Pulisci      CANC"));
  182.                   /*Ruota*/
  183.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) dire,TEXT("Ruota"));
  184.                   AppendMenu(dire,MF_STRING,MENU_FILE_DEST,TEXT("A Destra          Freccia destra"));
  185.                   AppendMenu(dire,MF_STRING,MENU_FILE_SINI,TEXT("A Sinistra          Freccia sinistra"));
  186.                   /*Visibilità*/
  187.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hvisu,TEXT("Rendi visibile..."));
  188.                   AppendMenu(hvisu,MF_STRING,MENU_FILE_POSI,TEXT("Spazio Positivo"));
  189.                   AppendMenu(hvisu,MF_STRING,MENU_FILE_TUTT,TEXT("Spazio Complessivo"));
  190.                   /*Info*/
  191.                   AppendMenu(file,MF_STRING|MF_POPUP,(UINT_PTR) hinfo,TEXT("Info"));
  192.                   AppendMenu(hinfo,MF_STRING,MENU_FILE_ABOU,TEXT("Informazioni su Paint XY"));
  193.                   AppendMenu(hinfo,MF_STRING,MENU_FILE_HELP,TEXT("Help"));
  194.                   //Rende visibile i menu
  195.                   SetMenu(hwnd,file);  
  196.           /*BARRA*/
  197.               pro=CreateWindowEx(NULL, PROGRESS_CLASS, NULL, WS_CHILD|WS_VISIBLE,5,2, 200, 25, hwnd, NULL, NULL, 0);
  198.           /*Visualizzazione del grafico*/
  199.           break;
  200.       case WM_TIMER:
  201.                   if (funpress>0)
  202.                   {
  203.               hdcWindow = GetDC(hwnd);
  204.                          
  205.                           for (k=-Mz;k<=Mz;k=k+2*Mz/prec)
  206.                           {
  207.                   SendMessage(pro, PBM_SETPOS, WPARAM(int((k+Mz)*100/(2*Mz)+1)), 0);
  208.                                   for (j=-My;j<=My;j=j+2*My/prec)
  209.                                   {
  210.                       for (i=-Mx;i<=Mx;i=i+2*Mx/prec)
  211.                       {
  212.                           result=SolveRPN(rpn,i,j,k);
  213.                           result2=SolveRPN(rpn2,i,j,k);
  214.                           if (fabs(result-result2)<Mx/100)
  215.                           {
  216.                                penna=CreatePen(PS_SOLID,3,RGB(fabs(k*255/Mz),fabs(k*255/Mz),255-fabs(k*255/Mz)));
  217.                                            SelectObject(hdcWindow,penna);
  218.                                if (rot%3==0)
  219.                                {
  220.                                   x=i/2;
  221.                                   y=j/1.4142135-k;
  222.                                   ballX=int(500-x*500/Mx);
  223.                                   ballY=int(500+y*500/My);
  224.                                   pp[1].x=ballX;
  225.                                                               pp[1].y=ballY;
  226.                                                               if ((pp[0].x>0)&&(pp[0].y>0)&&(dist(pp[1],pp[0])<350)&&(ckx==BST_CHECKED))
  227.                                                                 Polyline(hdcWindow,pp ,2);
  228.                                       pp[0].x=ballX;
  229.                                                               pp[0].y=ballY;
  230.                                                               if (ckx!=BST_CHECKED)
  231.                                                               {
  232.                                       if (((i<0)||(j<0)||(k<0))||((i<0)&&(j<0)&&(k<0)))
  233.                                       {
  234.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,255));  
  235.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,255));
  236.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,255));
  237.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,255));
  238.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,255));      
  239.                                       }
  240.                                       if ((i>0)&&(j>0)&&(k>0))
  241.                                       {
  242.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,0));  
  243.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,0));
  244.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,0));
  245.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,0));
  246.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,0));  
  247.                                       }
  248.                                   }
  249.                                }                        
  250.                                if (rot%3==1)
  251.                                {
  252.                                   x=(i-(j/1.73205))*1.73205/2;
  253.                                   y=(j*2/1.73205)+((i-(j/1.73205))/2)-k;
  254.                                   ballX=int(500-x*500/Mx);
  255.                                   ballY=int(500+y*500/My);
  256.                                   pp[1].x=ballX;
  257.                                                               pp[1].y=ballY;
  258.                                                               if ((pp[0].x>0)&&(pp[0].y>0)&&(dist(pp[1],pp[0])<350)&&(ckx==BST_CHECKED))
  259.                                                                 Polyline(hdcWindow,pp ,2);
  260.                                       pp[0].x=ballX;
  261.                                                               pp[0].y=ballY;
  262.                                                               if (ckx!=BST_CHECKED)
  263.                                                               {
  264.                                       if (((i<0)||(j<0)||(k<0))||((i<0)&&(j<0)&&(k<0)))
  265.                                       {
  266.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,255));  
  267.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,255));
  268.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,255));
  269.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,255));
  270.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,255));      
  271.                                       }
  272.                                       if ((i>0)&&(j>0)&&(k>0))
  273.                                       {
  274.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,0));  
  275.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,0));
  276.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,0));
  277.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,0));
  278.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,0));  
  279.                                       }
  280.                                   }
  281.                                }
  282.                                if (rot%3==2)
  283.                                {
  284.                                   x=(i-(j/2))/2;
  285.                                   y=(i-j/2)/(1.73205/2)+(2*j/1.73205)-k;
  286.  
  287.                                   ballX=int(500-x*500/Mx);
  288.                                   ballY=int(500+y*500/My);
  289.                                   pp[1].x=ballX;
  290.                                                               pp[1].y=ballY;
  291.                                                               if ((pp[0].x>0)&&(pp[0].y>0)&&(dist(pp[1],pp[0])<350)&&(ckx==BST_CHECKED))
  292.                                                                 Polyline(hdcWindow,pp ,2);
  293.                                       pp[0].x=ballX;
  294.                                                               pp[0].y=ballY;
  295.                                                               if (ckx!=BST_CHECKED)
  296.                                                               {
  297.                                       if (((i<0)||(j<0)||(k<0))||((i<0)&&(j<0)&&(k<0)))
  298.                                       {
  299.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,255));  
  300.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,255));
  301.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,255));
  302.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,255));
  303.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,255));      
  304.                                       }
  305.                                       if ((i>0)&&(j>0)&&(k>0))
  306.                                       {
  307.                                           SetPixel(hdcWindow,ballX,ballY,RGB(255,0,0));  
  308.                                           SetPixel(hdcWindow,ballX+1,ballY,RGB(255,0,0));
  309.                                           SetPixel(hdcWindow,ballX-1,ballY,RGB(255,0,0));
  310.                                           SetPixel(hdcWindow,ballX,ballY+1,RGB(255,0,0));
  311.                                           SetPixel(hdcWindow,ballX,ballY-1,RGB(255,0,0));  
  312.                                       }
  313.                                   }
  314.                               }
  315.                           }
  316.                       }
  317.                   }
  318.               }
  319.               pp[0].x=0;
  320.               pp[0].y=0;
  321.              
  322.               funpress=0;
  323.                   }
  324.           break;
  325.       case WM_COMMAND: /***************************************MENU*****************************************************/
  326.                    if (LOWORD(wParam)==MENU_FILE_EXIT)
  327.                    {
  328.                            DestroyWindow(hwnd);    //Chiudo la finestra
  329.                    }
  330.                    if (LOWORD(wParam)==MENU_FILE_ABOU)
  331.                    {
  332.                            MessageBox(hwnd,"Paint XY -Z- Versione 1.1","By Dany",MB_OK|MB_ICONINFORMATION);
  333.                    }
  334.                    if (LOWORD(wParam)==MENU_FILE_CLEA)
  335.                    {
  336.                
  337.                    ShowWindow(hwnd,0);
  338.                            ShowWindow(hwnd,1);
  339.                            Mx=0;My=0,Mz=0;
  340.                            rpn="";
  341.                            rpn2="";
  342.                            funpress=0;
  343.                    }
  344.                    if (LOWORD(wParam)==MENU_FILE_CURV)
  345.                    {
  346.                            //Crea e visualizza la finestra
  347.                            MSG messages5;
  348.                HWND hwnd5 = CreateWindowEx (0,name2,"Equazione:",WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE,400,400,400,320,hwnd, NULL, g_hInst,NULL);
  349.                            ShowWindow (hwnd5, 1);
  350.                            while (GetMessage (&messages5, NULL, 0, 0))
  351.                            {
  352.                        TranslateMessage(&messages5);
  353.                        DispatchMessage(&messages5);
  354.                            }
  355.                    }
  356.                    if (LOWORD(wParam)==MENU_FILE_HELP)
  357.                    {
  358.                system("Guida.txt");
  359.            }
  360.            if (LOWORD(wParam)==7)
  361.                    {
  362.                if (rpn!="")
  363.                funpress++;
  364.                rot--;
  365.                ShowWindow(hwnd,0);
  366.                ShowWindow(hwnd,1);
  367.            }
  368.            if (LOWORD(wParam)==8)
  369.                    {
  370.                if (rpn!="")
  371.                funpress++;
  372.                rot++;
  373.                ShowWindow(hwnd,0);
  374.                ShowWindow(hwnd,1);
  375.            }
  376.            if (LOWORD(wParam)==9)
  377.                    {  
  378.                SetLayeredWindowAttributes(hwnd, RGB(255, 0, 255), 255, LWA_COLORKEY | LWA_ALPHA);
  379.            }
  380.            if (LOWORD(wParam)==10)
  381.                    {
  382.                SetLayeredWindowAttributes(hwnd, RGB(0, 0, 255), 255, LWA_COLORKEY | LWA_ALPHA);
  383.            }
  384.            break;
  385.       case WM_PAINT:
  386.             PAINTSTRUCT ps;
  387.             HDC hdcWindow;
  388.             hdcWindow = BeginPaint(hwnd, &ps);
  389.            
  390.             if (rot%3==0)
  391.                DrawGriglia1(hdcWindow);
  392.                
  393.             if (rot%3==1)
  394.                DrawGriglia2(hdcWindow);
  395.                
  396.             if (rot%3==2)
  397.                DrawGriglia3(hdcWindow);
  398.             if (rpn!="")  
  399.                         funpress++;
  400.                        
  401.             EndPaint(hwnd, &ps);
  402.                  break;
  403.                 case WM_KEYDOWN:
  404.                          if (LOWORD(wParam)==VK_DELETE)   //Pulizia istantanea se si preme  CANC
  405.                          {
  406.                            ShowWindow(hwnd,0);
  407.                            ShowWindow(hwnd,1);
  408.                            Mx=0;My=0,Mz=0;
  409.                            rpn="";
  410.                            rpn2="";
  411.                            funpress=0;
  412.                          }
  413.                          if (LOWORD(wParam)==VK_LEFT)
  414.                          {
  415.                    if (rpn!="")
  416.                funpress++;
  417.                rot--;
  418.                ShowWindow(hwnd,0);
  419.                ShowWindow(hwnd,1);
  420.              }
  421.              if (LOWORD(wParam)==VK_RIGHT)
  422.                          {
  423.                      if (rpn!="")
  424.                funpress++;
  425.                rot++;
  426.                ShowWindow(hwnd,0);
  427.                ShowWindow(hwnd,1);                    
  428.              }
  429.                          break;
  430.       case WM_CLOSE:
  431.                   if(MessageBox(hwnd,"Vuoi davvero uscire?","Messaggio",MB_YESNO|MB_ICONQUESTION)==IDYES)
  432.          DestroyWindow(hwnd);
  433.          break;
  434.       case WM_DESTROY:
  435.            wmphandle = GetModuleHandle("PaintXY.exe");
  436.            DWORD       dwExitCode;
  437.            GetExitCodeProcess(wmphandle,  &dwExitCode );
  438.            ExitProcess( dwExitCode);
  439.          KillTimer(hwnd, idTimer1);
  440.          PostQuitMessage(0);
  441.          break;
  442.       default:
  443.          return DefWindowProc(hwnd, Message, wParam, lParam);
  444.    }
  445.    return 0;
  446. }
  447. //Function Window
  448. //HWND
  449. HWND edit,edit2,button,sbox;
  450. HWND maxx,maxy,maxz,acc;
  451. //Window Procedure della System Window
  452. LRESULT CALLBACK WindowProcedure3 (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  453. {      
  454.         InitCommonControls ();     //Applicazione visual style
  455.         switch(message)
  456.         {
  457.                 case WM_CREATE:
  458.            
  459.                         /*CHECKBOX*/
  460.                         sbox=CreateWindow("Button","Collega con linee",WS_VISIBLE|WS_CHILD|BS_AUTOCHECKBOX,170,132,150,25,hwnd,NULL,NULL,NULL);
  461.                        
  462.                         /*EDIT*/
  463.                     edit=CreateWindow("edit","<primo membro>",WS_VISIBLE|WS_CHILD|WS_BORDER|EM_GETLINE,10,40,150,20,hwnd,0,0,0);
  464.                         edit2=CreateWindow("edit","<secondo membro>",WS_VISIBLE|WS_CHILD|WS_BORDER|EM_GETLINE,174,40,150,20,hwnd,0,0,0);
  465.                         /*BUTTON*/
  466.                         button=CreateWindow("Button","CALCOLA!",WS_VISIBLE|WS_CHILD,4,220,385,50,hwnd,(HMENU)2,NULL,NULL);
  467.                         /*MIN E MAX X E Y E PRECISIONE*/
  468.                         maxx=CreateWindow("edit","10",WS_VISIBLE|WS_CHILD|WS_BORDER,80,80,60,20,hwnd,NULL,NULL,NULL);
  469.                         maxy=CreateWindow("edit","10",WS_VISIBLE|WS_CHILD|WS_BORDER,80,115,60,20,hwnd,NULL,NULL,NULL);
  470.                         maxz=CreateWindow("edit","10",WS_VISIBLE|WS_CHILD|WS_BORDER,80,150,60,20,hwnd,NULL,NULL,NULL);
  471.                         acc=CreateWindow("edit","70",WS_VISIBLE|WS_CHILD|WS_BORDER,250,92,50,20,hwnd,NULL,NULL,NULL);
  472.                         /****SETTO I CARATTERI DA UTILIZZARE: FONT, DIMENSIONI ECC...**/
  473.                         GetObject (GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf);
  474.                         hfont = CreateFont (20,0,0,0, 500, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
  475.             CLIP_DEFAULT_PRECIS, 5, VARIABLE_PITCH, TEXT ("Monotype Corsiva"));
  476.                         SendMessage (edit, WM_SETFONT, (WPARAM) hfont, true);
  477.                         SendMessage (edit2, WM_SETFONT, (WPARAM) hfont, true);
  478.                         SendMessage (button, WM_SETFONT, (WPARAM) hfont, true);
  479.                         SendMessage (maxx, WM_SETFONT, (WPARAM) hfont, true);
  480.                         SendMessage (maxy, WM_SETFONT, (WPARAM) hfont, true);
  481.                         SendMessage (maxz, WM_SETFONT, (WPARAM) hfont, true);
  482.                         SendMessage (acc, WM_SETFONT, (WPARAM) hfont, true);
  483.                         SendMessage (sbox, WM_SETFONT, (WPARAM) hfont, true);
  484.                 break;
  485.                 case WM_PAINT:
  486.                         PAINTSTRUCT ps;
  487.                         HDC hdcWindow;
  488.                         hdcWindow = BeginPaint(hwnd, &ps);
  489.                         /****SETTO I CARATTERI DA UTILIZZARE: FONT, DIMENSIONI ECC...**/
  490.                         hfont = CreateFont (20,0,0,0, 500, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
  491.             CLIP_DEFAULT_PRECIS, 5, VARIABLE_PITCH, TEXT ("Monotype Corsiva"));
  492.                         SelectObject (hdcWindow, hfont);
  493.                         SetRect (& rect, 100,100,700,200);
  494.             SetTextColor (hdcWindow, RGB (0,0,0));
  495.                         TextOut(hdcWindow,1,1,"Comporre l'equazione desiderata.",32);
  496.                         TextOut(hdcWindow,161,40,"=",1);
  497.                         TextOut(hdcWindow,10,80,"max x =",7);
  498.                         TextOut(hdcWindow,10,115,"max y =",7);
  499.                         TextOut(hdcWindow,10,150,"max z =",7);
  500.                         TextOut(hdcWindow,175,92,"precisione",10);
  501.                         EndPaint(hwnd,&ps);
  502.                         break;
  503.                 case WM_COMMAND:
  504.                         if (LOWORD(wParam)==2)
  505.                         {
  506.                                 funpress++;                //Indica che è stato premuto il tasto CALCOLA!
  507.                                 //Inizializzo gli array che contengono le espressioni
  508.                                 char in[100]="",in2[100]="";
  509.                                 //Prendo il testo negli edit e lo metto negli array
  510.                                 GetWindowText(edit,in,100);
  511.                                 GetWindowText(edit2,in2,100);
  512.                                 //Mi trovo la notazione polacca inversa (RPN)
  513.                                 rpn=FoundRPN(in);
  514.                                 rpn2=FoundRPN(in2);
  515.                                 //leggo i massimi e i minimi e la precisione:
  516.                 //ne inizializzo gli array
  517.                                 char maxix[6]="",maxiz[6]="",maxiy[6]="",accu[5]="";
  518.                                 //Li catturo dagli edit
  519.                                 GetWindowText(acc,accu,5);
  520.                                 GetWindowText(maxx,maxix,6);
  521.                                 GetWindowText(maxy,maxiy,6);
  522.                                 GetWindowText(maxz,maxiz,6);
  523.                                 //Converto le string in float.
  524.                                 Mx=atof(maxix);
  525.                                 My=atof(maxiy);
  526.                                 Mz=atof(maxiz);
  527.                                 prec=atoi(accu);
  528.                                 //Controllo lo stato della checkbox
  529.                                 ckx=SendMessage(sbox, BM_GETCHECK, 0,0);
  530.                         }
  531.                         break;
  532.                 case WM_DESTROY:
  533.                                 PostQuitMessage(0);
  534.                                 break;
  535.                 default:
  536.                         return DefWindowProc(hwnd,message,wParam,lParam);
  537.         }
  538.         return 0;
  539. }
  540.  
  541. //Creazione finestra principale/Dichiarazione di hinstance per le altre finestre.
  542. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
  543. {
  544.    InitCommonControls ();      //Applicazione visual style
  545.    WNDCLASSEX WndClass,WndClass3;
  546.    HWND hwnd;
  547.    MSG Msg;
  548.    
  549.    g_hInst = hInstance;
  550.    //Main Window
  551.    WndClass.cbSize        = sizeof(WNDCLASSEX);
  552.    WndClass.style         = 0;
  553.    WndClass.lpfnWndProc   = WndProc;
  554.    WndClass.cbClsExtra    = 0;
  555.    WndClass.cbWndExtra    = 0;
  556.    WndClass.hInstance     = g_hInst;
  557.    WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  558.    WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  559.    WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
  560.    WndClass.lpszMenuName  = NULL;
  561.    WndClass.lpszClassName = g_szClassName;
  562.    WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  563.    //SystemWindow
  564.    WndClass3.cbSize        = sizeof(WNDCLASSEX);
  565.    WndClass3.style         = 0;
  566.    WndClass3.lpfnWndProc   = WindowProcedure3;
  567.    WndClass3.cbClsExtra    = 0;
  568.    WndClass3.cbWndExtra    = 0;
  569.    WndClass3.hInstance     = hInstance;
  570.    WndClass3.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  571.    WndClass3.hCursor       = LoadCursor(NULL, IDC_ARROW);
  572.    WndClass3.hbrBackground = (HBRUSH)(15);
  573.    WndClass3.lpszMenuName  = NULL;
  574.    WndClass3.lpszClassName = name2;
  575.    WndClass3.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  576.  
  577.    //Main Window
  578.    if(!RegisterClassEx(&WndClass))
  579.    {
  580.       MessageBox(0, "Window1 Registration Failed!", "Error!",
  581.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  582.       return 0;
  583.    }
  584.    //System Window
  585.     if(!RegisterClassEx(&WndClass3))
  586.    {
  587.       MessageBox(0, "Window3 Registration Failed!", "Error!",
  588.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  589.       return 0;
  590.    }
  591.    //CREAZIONE:
  592.    //Main Window
  593.    hwnd = CreateWindowEx(
  594.    WS_EX_CLIENTEDGE|WS_EX_LAYERED,
  595.    g_szClassName,
  596.    "Paint XY-Z-",
  597.    WS_SYSMENU|WS_MINIMIZEBOX|WS_VISIBLE,
  598.    175, 0, 1009, 1000,
  599.    NULL, NULL, g_hInst, NULL);
  600.      
  601.     //incaso di errore
  602.    if (hwnd == NULL)
  603.    {
  604.       MessageBox(0, "Window Creation Failed!", "Error!",
  605.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  606.       return 0;
  607.    }
  608.    //Visualizza Main Window
  609.    ShowWindow(hwnd, nCmdShow);
  610.    UpdateWindow(hwnd);
  611.    //Messaggio da Main Window
  612.    while(GetMessage(&Msg, NULL, 0, 0))
  613.    {
  614.       TranslateMessage(&Msg);
  615.       DispatchMessage(&Msg);
  616.    }
  617.    return Msg.wParam;
  618. }






Inoltre vi è anche un file contenenti le funzioni ma sono riferite alla conversione in RPN, perciò quì non hano importanza.

PM Quote