Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C - Windows] Stampare pixel su schermo

    Salve,
    esiste un modo semplice per far aprire una finestra bianca di dimensioni prestabilite (es: 640x480 pixel) e poi stampare un pixel alla volta in questa finestra?
    Il tutto sotto windows.

    Grazie a tutti.

    Ciao

  2. #2
    Hai mai scritto applicazioni per Windows in C?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Un modo semplice ... ?

    Conosci quello complesso ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    esiste un modo semplice per far aprire una finestra bianca di dimensioni prestabilite (es: 640x480 pixel)
    Potresti iniziare con il dire quale compilatore usi, che tipo di progetto hai creato e se hai una minima padronanza della Windows API o del framework utilizzato.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  5. #5
    Mi sarei aspettato delle risposte un po' diverse ma vabe'...

    Le sole api di windows che abbia mai usato sono quelle per l'apertura e la gestione di un thread e il controllo del cursore nella console di windows.
    Solitamente programmo con le librerie ANSI C, e poi integro con quelle di cui ho bisogno di volta in volta (per l'ultimo progetto ho usato le mpich).
    Il compilatore che uso solitamente è il gcc che si installa con il dev-c++.

    Sarebbe troppo lungo spiegare che cosa devo fare nel dettaglio. Diciamo, per darvi un'idea, che devo stampare a schermo un bitmap.

    Grazie, ciao

    P.S. Se "il metodo semplice per" vi pare un'espressione brutta, ditemi pure i metodi complessi...

  6. #6
    Originariamente inviato da MonsterMash
    Sarebbe troppo lungo spiegare che cosa devo fare nel dettaglio. Diciamo, per darvi un'idea, che devo stampare a schermo un bitmap.
    Meglio: diciamo che devo poter costruire sullo schermo una immagine stampando un pixel alla volta dopo aver deciso quale valore dargli.

  7. #7
    Originariamente inviato da MonsterMash
    P.S. Se "il metodo semplice per" vi pare un'espressione brutta, ditemi pure i metodi complessi...
    Il problema qui è che le applicazioni Windows in vanilla C sono un gran casino... questo il codice per far apparire la tua finestra vuota:
    codice:
    #include <windows.h>
    HINSTANCE ghInstance; /* hInstance dell'applicazione */
    LRESULT CALLBACK MainWndProc( HWND, UINT, WPARAM, LPARAM );
    
    /********************************************************************\
    *  Function: int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)  *
    *                                                                    *
    *   Purpose: Initializes Application                                 *
    *                                                                    *
    *  Comments: Register window class, create and display the main      *
    *            window, and enter message loop.                         *
    *                                                                    *
    *                                                                    *
    \********************************************************************/
    
    int CALLBACK WinMain( HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpszCmdLine,
        int nCmdShow )
    {
       WNDCLASS wc;
       MSG msg;
       HWND hWnd;
       BOOL bRet;
    
       if( !hPrevInstance )
       {
          wc.lpszClassName = TEXT("MonsterMash_MainWindowClass"); /* occhio che deve essere un ID unico */
          wc.lpfnWndProc = MainWndProc;
          wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
          wc.hInstance = hInstance;
          wc.hIcon = NULL;
          wc.hCursor = LoadCursor( NULL, IDC_ARROW );
          wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
          wc.lpszMenuName = NULL;
          wc.cbClsExtra = 0;
          wc.cbWndExtra = 0;
    
          RegisterClass( &wc );
       }
    
       ghInstance = hInstance;
    
       hWnd = CreateWindow( TEXT("MonsterMash_MainWindowClass"),
          TEXT("Una finestra vuota"),
          WS_OVERLAPPEDWINDOW,
          0,
          0,
          CW_USEDEFAULT,
          CW_USEDEFAULT,
          NULL,
          NULL,
          hInstance,
          NULL
       );
    
       ShowWindow( hWnd, nCmdShow );
    
       while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 ) 
       {
          if (bRet == -1)
          {
             // handle the error and possibly exit
          }
          else
          {
             TranslateMessage( &msg );
             DispatchMessage( &msg );
          }
       }
    
       return (int)msg.wParam;
    }
    
    /********************************************************************\
    * Function: LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM) *
    *                                                                    *
    *  Purpose: Processes Application Messages                           *
    *                                                                    *
    * Comments: The following messages are processed                     *
    *                                                                    *
    *           WM_PAINT                                                 *
    *           WM_DESTROY                                               *
    *                                                                    *
    *                                                                    *
    \********************************************************************/
    
    LRESULT CALLBACK MainWndProc( 
       HWND hWnd, 
       UINT msg, 
       WPARAM wParam,
       LPARAM lParam )
    {
       PAINTSTRUCT ps;
       HDC hDC;
    
       switch( msg ) {
    
    /**************************************************************\
    *     WM_PAINT:                                                *
    \**************************************************************/
    
          case WM_PAINT:
             hDC = BeginPaint( hWnd, &ps );
    
             /* qui puoi disegnare sulla finestra tramite il device context hDC */
    
             EndPaint( hWnd, &ps );
             break;
    
    /**************************************************************\
    *     WM_DESTROY: PostQuitMessage() is called                  *
    \**************************************************************/
    
          case WM_DESTROY:
             PostQuitMessage( 0 );
             break;
    
    /**************************************************************\
    *     Let the default window proc handle all other messages    *
    \**************************************************************/
    
          default:
             return( DefWindowProc( hWnd, msg, wParam, lParam ));
       }
    
       return 0;
    }
    .
    Comunque se davvero hai intenzione di proseguire sulla strada di scrivere applicazioni Windows in C procurati un buon libro (ho acquistato di recente a poco prezzo su Amazon questo, prendendolo usato).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Mi sarei aspettato delle risposte un po' diverse ma vabe'...
    Le risposte sono adeguate per la tua domanda estrememente generica. Se sei un utente del Borland C++ Builder probabilmente userai la VCL, framework molto diverso rispetto a wxWidgets, MFC, (DirectX), framebuffer virtuali vari o alla GDI offerta dalla Windows API. Non hai inoltre specificato quali siano le tue attuali conoscenze, non sapendo se volevi fare tutto a mano con la Windows API o meno cosa avremmo dovuto rispondere?!

    E' un po' come dire: "Come posso raggiungere Casablanca?". Se non specifichi il tuo budget, il/i mezzo/i con cui intendi viaggiare e le altre informazioni utili non si può stabilire il percorso.

    L'accesso ai device context grafici dipende molto dal framework utilizzato, solo una volta fissato (da te) sarà possibile darti qualche consiglio valido.

    PS. Sei vincolato al linguaggio C o va bene anche il C++?
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  9. #9
    Dunque, intanto grazie per le risposte.

    Dopo le vostre prime risposte mi son messo a cercare per la rete una guida introduttiva alle API di windows, e ho trovato questa:
    http://www.aleax.it/TutWin32/

    Sembra ben fatta, e comincia dalle basi.

    L'idea sarebbe quella di fare tutto a mano con le windows api, e di usare solo il C.

  10. #10
    Al solito propendo per i libri piuttosto che per le guide online.
    Originariamente inviato da MItaly
    Comunque se davvero hai intenzione di proseguire sulla strada di scrivere applicazioni Windows in C procurati un buon libro (ho acquistato di recente a poco prezzo su Amazon questo, prendendolo usato).
    Amaro C++, il gusto pieno dell'undefined behavior.

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.