Newsgroup: it.comp.programmare.win32
Titolo: Plottare un singolo pixel sotto win32

Avrei la necessita di plottare grafici.
Abituato al c++ 3.0 Borlanb, (bastavano poche righe in asm) rimango
parecchio spiazzato, nel non trovare negli help un modo per disegnare un
singolo pixel.
Utilizzo il Builder v 1.0.
A dire la verita, ho trovato un qualcosa che si chiama Pixels[int X][int Y],
che centra qualcosa con qualcosaltro che si chiama TCanvas; il guaio e che
in fase di compilazione mi arriva secco un "Undefined symbol 'Pixels'".
#include <vcl/graphics.hpp> non risolve.
In definitiva, avrei bisogno di colorare i pixel di un form, ma presumo che
analogamente si possano manipolare anche quelli delle altre finestre, o del
desktop.
Qualcuno riesce a darmi una mano? Mi vanno bene sia funzioni specifiche, sia
api di Windoze; anche se prediligerei qualcosa di 'veloce', anche in asm,
essendo i grafici che faro molto pesanti.
Grazie.

 essendo i grafici che faro molto pesanti.
Usare l'ASM per scrivere programmi Windows e` inutile, dato che devi
comunque passare per le chiamate di sistema e tutto il tempo si perde
li` (a meno che uno non voglia scavalcare Windows e scrivere
direttamente nella memoria video, ma in quel caso dovresti scrivere un
driver).
D'altra parte SetPixel() e` molto lenta, anche se per blittare qualche
grafico e` ancora adatta. La procedura piu` veloce (ma anche piuttosto
complessa) e` quella di creare un bitmap, "disegnarci dentro"
modificando direttamente il suo buffer in memoria anziche` passare per i
DC e infine "blittare" il contenuto di tale bitmap nel DC.
... Sorry, I don't date outside my species.
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

 - Sito Web

Grazie per l'interessamento.
Prima di tutto mi dai una brutta notizia, ma l'mmaginavo:
questo deve essere una degli aspetti negativi di wincozza, infatti piů di
una volta ho ricevuto il fastidioso "Access violation at add. ecc..." mentre
tenti per esempio di andare direttamente sugli ind. di memoria delle porte
ecc...
Comunque, mi sono detto: proviamo questa SetPixel.
Poi mi sono detto anche : chi si accontenta gode.
Ed ho scritto:
HANDLE hFinestra;
hFinestra=FindWindow("","FormGraf");
SetPixel(hFinestra,10,10,clBlack);
Niente. Allora mi sono detto: Diamine, questa 800x600 che pixel piccoli. Ed
ho provato cosě:
HANDLE hFinestra;
int x,y;
hFinestra=FindWindow("","FormGraf");
for (x=0;x<50;x++)
   {
   for (y=0;y<50;y++)
      {
      SetPixel(hFinestra,x+10,y+10,clBlack);
      }
   }
Ed ho pensato: Qui c'č qualcosa che non va.
(Per la cronaca non plotta gnente)

 SetPixel(hFinestra,10,10,clBlack);
Errore, e se tu usassi #define STRICT prima di includere gli header
di Windows il tuo compilatore te lo direbbe!  Il primo argomento di
SetPixel e` un HDC (handle di Device Context), *NON* un'HWND
(handle di Window).
Il modo canonico di disegnare in Windows e` gestire il messaggio
WM_PAINT: con BeginPaint otterrai in esso l'HDC su cui disegnare
(con SetPixel o con altre chiamate), ricorda ovviamente l'EndPaint
alla fine.  Ci sono altri modi (ad esempio ottenere un HDC transitorio
per disegnare cose che vogliono essere temporanei "echi" di tipo
interattivo), ma e` importante anzitutto capire bene quello canonico.
[Se la finestra su cui vuoi disegnare non e` "tua", il problema e`
ovviamente piu` delicato.  Il subclassing non e` una risposta del
tutto soddisfacente, perche` BeginPaint non va chiamata piu`
volte in risposta ad un singolo WM_PAINT (su alcune delle varie
implementazioni di Windows funzionerebbe anche cosi`, ma non
su tutte).  In pratica la soluzione "meno peggio" puo` essere
quella di "incollare" una tua finestra (trasparente) sopra quella
su cui vuoi disegnare, e disegnare in realta` sulla tua finestra
trasparente invece che su quella sottostante]
Alex