Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB 2005]Graphics.FromHdc

    Ciao,

    sono ancora quà a chiedere info su un metodo della GDI+.

    A cosa serve e come si usa FromHdc su VB 2005?

    Consultando la guida ho capito che permette di recuperare un oggetto Graphics dall'Handle di una periferica.

    Ma come si usa e su quali periferiche?

    Grazie a tutti.

  2. #2
    Serve per ottenere un oggetto Graphics da un handle ad un device context; un device context è più o meno l'equivalente dell'oggetto Graphics nelle GDI di Windows (in effetti l'oggetto Graphics credo che internamente lavori su un device context), ossia è un device astratto su cui operano le funzioni di disegno. Quel metodo può tornare utile se vuoi disegnare tramite GDI+ su un DC che hai ottenuto tramite qualche API di Windows.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Io ti ringrazio moltissimo per la spiegazione...

    ma detta in italiano cosa significa?

  4. #4
    Significa che se vuoi sapere cos'è un device context e quindi a cosa serve quel metodo ti devi studiare le API Windows GDI (link), altrimenti ti basti sapere sapere che questo metodo non ti serve.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Sto studiando la GDI+, come ho scritto nel post iniziale, e attraverso la MSDN ho trovato info su come usare il metodo FromHdc, ma non ci ho capito molto, e prima di proseguire nella lettura di questa interfaccia, vorrei capire come usarlo e in quale contesto.

    Ciao.

  6. #6
    Se usi solo GDI+ quel metodo non ti serve; ti serve semplicemente se vuoi disegnare su un device context (che, come ho già detto, è l'equivalente dell'oggetto Graphics di GDI+ nella libreria Windows GDI) tramite GDI+. Puoi aver bisogno di questo ad esempio se usi del codice unmanaged che ti restituisce un device context su cui disegnare; in situazioni "normali" non ti serve.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    scusa se approfitto della tua pazienza:

    Cos'è un Decive Context?

    E' chiaro che significa "contesto di periferica", ma di quale tipo di periferica stiamo parlando?

    Non devo realizzare alcuna applicazione ma voglio smplicemente capire a cosa mi può essere utile questo metodo.

    Tutti i manuali che ho consultato non lo spiegano, al max lo menzionano ma non danno alcuna informazioni sul suo utilizzo.

    Puoi fare un esempio o fornire un link esaustivo?

    Ciao.

  8. #8
    Un device context è un astrazione di dispositivo su cui disegnare. Di fatto può essere una stampante, lo schermo, l'area client o l'intera area di una finestra, una bitmap, qualunque cosa "disegnabile" (e ovviamente supportata dalle Windows GDI), ma per il tuo codice e per le funzioni GDI di Windows sarà sempre un device context; in questa maniera puoi disegnare su una stampante così come sullo schermo in maniera esattamente identica. Un esempio in C99/C++:
    codice:
    //presuppone che sia stato incluso windows.h
    //tutto il codice di controllo degli errori è stato omesso per semplicità
    //inizializzazione
    HDC dcScreen, dcBitmap;
    HBITMAP bmp;
    //ottiene un device context per lo schermo
    dcScreen = GetDC(NULL);
    //crea una bitmap compatibile con lo schermo (volendo poteva essere una bitmap di qualunque genere) 800x600
    bmp = CreateCompatibleBitmap(dcScreen,800,600);
    //crea un compatible dc in cui selezionare la bitmap
    dcBitmap = CreateCompatibleDC(dcScreen);
    //seleziona la bitmap nel DC
    SelectBitmap(dcBitmap,bmp);
    //disegno
    //seleziona in entrambi i DC una penna nera e un pennello grigio
    SelectPen(dcScreen,GetStockPen(BLACK_PEN));
    SelectPen(dcBitmap,GetStockPen(BLACK_PEN));
    SelectBrush(dcScreen,GetStockBrush(GRAY_BRUSH));
    SelectBrush(dcBitmap,GetStockBrush(GRAY_BRUSH));
    //disegna un rettangolo sui due DC
    Rectangle(dcScreen,10,10,50,50);
    Rectangle(dcBitmap,10,10,50,50);
    //cleanup
    ReleaseDC(NULL,dcScreen);
    DeleteDC(dcBitmap);
    DeleteBitmap(bmp);
    .
    Da questo esempio puoi vedere che, sebbene i due DC vengano creati ed eliminati in modi differenti, per il disegno si usano esattamente nella stessa maniera, ottenendo più o meno lo stesso risultato (che ovviamente può variare in funzione della risoluzione e delle altre caratteristiche del device reale).
    In questo senso intendevo dire che è l'analogo dell'oggetto Graphics: puoi ottenere un oggetto Graphics per disegnare su una bitmap, sullo schermo, su una finestra, ma comunque per disegnarci sopra userai sempre gli stessi metodi. In ogni caso tieni conto che avrai a che fare con il metodo FromHdc solamente se dovrai lavorare in situazioni miste managed-unmanaged; non è una funzione utile all'interno di GDI+, è piuttosto un ponte tra Windows GDI e GDI+.
    Per ulteriori informazioni consulta il link che ti ho dato prima, e in particolare questa sezione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    SEI FENOMENALE!!!!

    non avresti potuto spiegarlo meglio.

    Grazie Mille.

  10. #10
    Prego; ciao!
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.