Newsgroup: it.comp.lang.visual-basic
Titolo: [?] SetWindowRgn in W98

Salve a tutti,
   volevo sapere se qualcuno sa come mai la splendidameravigliosasublime API
SetWindowRgn mi funziona benissimo sotto W95 e WNT, mentre sotto W98 non va
proprio per nulla... particolare importante è che io la uso su finestre che
non appartengono al mio processo (vedi GetForegroundWindow...), e che se la
utilizzo con mie form va tutto benissimo su qualsiasi Uindous (anche '98)
   ho guardato sull'emmeessedienne ma non mi dice nulla in riferimento a
questo problema... aggiungo inoltre che la chiamata la faccio normalmente,
nel senso dopo aver creato la mia bella regione (ed essermi assicurato che
sia diversa da zero), chiamo SetWindowRgn con l'hWnd (diverso da zero ed
effettivamente relativo ad una finestra), l'handle alla regione, e True come
terzo parametro per "updatare" la finestra.
   questo metodo va benissimo, come ho detto, sotto W95 e WNT, sotto W98 non
funziona primo perchè SetWindowRgn mi restituisce 0 (che non è bello),
secondo perchè non mi cambia la forma alla finestra eheheh
   Dopo questa interessantissima (per me, non so per voi ma non credo...)
digressione su quest'API che ha fatto la fortuna di programmi come Sonique e
[non me ne vengono in mente altri], vi saluto con un CIAOOOOOOOOOOOOOOO e
con il classico "spero che qualcuno sappia come risolvere questo problema,
sono disperato, oddio che fame che ho, aiutatemi voi raga, vi ringrazio in
anticipo"
^__^   Faber

Già visto. Mi sono capitate altre funzioni grafiche che sotto W98 non
funzionano per niente (su NT sì). Sui due piedi non me ne viene in mente una
più furba di quella che si usa per il mask di un'immagine allo scopo di
renderla 'disattiva' (talmente importante che non mi ricordo manco come si
chiama - DrawState??). Tuttavia i programmi di MS che le usano sembrano
funzionare, quindi mi sa di problemillo con gli handle (hai mica provato a
duplicarlo?)
Se vuoi, comunque, ti scrivo un programmino personalizzato ... (non siete un
po' troppo cattivelli?)
----------------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------------

 (non siete un po' troppo cattivelli?)
beh io scherzavo...
Salutissimi
Faber

Sì, prova a fare un DuplicateHandle degli handle che passi/ricevi (così, un
po' a casaccio). Siccome 98 ha del 95 e di NT, chissà che non abbiano
mischiato la gestione degli handle di 95 con gli pseudo-handle di NT (è
agghiacciante, lo so, ma tentare non nuoce).


agghiacciante, lo so, ma tentare non nuoce).
a me va sia sotto 95 che NT, ho guardato l'MSDN sotto DuplicateHandle e ho
anche fatto delle prove, ma proprio non ho idea di come si usi questa
funzione... hai (o anche qualcun altro) un esempio?
fai conto che io becco l'handle della finestra attiva con
GetForegroundWindow, poi lo passo a questa funzione:
Sub FinestraRound(CurrentHwnd As Long)
    Dim MyRect As RECT
    Dim Regno As Long
    GetWindowRect CurrentHwnd, MyRect
    Regno = CreateRoundRectRgn(0, 0, MyRect.Right - MyRect.Left,
MyRect.Bottom - MyRect.Top, 50, 50)
    SetWindowRgn CurrentHwnd, Regno, True
End Sub
il regno lo crea perfettamente (<> 0), l'hWnd pure è <> 0... sotto W95 e NT
va benissimo, sotto W98 la chiamata a SetWindowRgn ritorna 0, e la finestra
è sempre bella rettangolare...
come faccio buuuuuuaaaaaaaaaaahhhhhhhhh era così carino....
se qualcuno mi aiuta a risolvere questo [per me] GROSSO problema gli mando
il programmino che ci sto sviluppando, è veramente favoloso a me esalta
tantissimo      :-))))))
Saluti e... tenk iù in advans
Faber

 funzione... hai (o anche qualcun altro) un esempio?
Prova un po' cosě:
Dim lngWidth As Long
Dim lngHeight As Long
Dim lngValue as Long
Dim lngRet As Long
    lngValue = 500  '=> Form circolare
    Load Form1
    'Dimensione in pixel
    lngWidth = Form1.Width / Screen.TwipsPerPixelX
    lngHeight = Form1.Height / Screen.TwipsPerPixelY
    'Crea un form con gli angoli arrotondati
    lngRet = CreateRoundRectRgn(0, 0, lngWidth, lngHeight, lngValue, lngValue)
    lngRet = SetWindowRgn(Form1.hwnd, lngRet, False)
    Form1.Show

    Form1.Show
grazie mille per il tuo aiuto Jimi, volevo dirti che cmq il codice che avevo
scritto io va bene, funziona, l'unico piccolo insignificante problema č che
io lo voglio applicare ad una finestra che non appartiene al mio programma!
nel senso... se applico il mio o il tuo codice ad una mia form va bene (in
qualunque Windows), se lo applico a una finestra che non appartiene al mio
processo (trovandone l'handle per es. con GetForegroundWindow) funziona sia
in W95 che in WNT, ma *NON* in Windows 98...
...ed č proprio questo che mi sfugge: perchč?! come posso fare ad ovviare a
questo [terribile] difetto?
(e poi mi piacerebbe anche sapere se č colpa mia oppure č W98 che se ne
frega di quello che gli dico di fare... fatto sta che non va niente!!!)
Faber

 in W95 che in WNT, ma *NON* in Windows 98...
Non so che dirti. Ho provato a modificare la Region di
Outlook Express (già che era qui) e funziona normalmente.
Io non ho usato GetForegroundWindow perché ho inserito
il codice nel _click di un pulsante, quindi per premerlo il mio
programmino doveva essere la foreground window.
Mi sono invece servito di FindWindowEx. Ma l'handle che
ritornano le due funzioni è chiaramente lo stesso.
Potrebbe essere il "contesto" in cui stai lavorando tu.
Fai sapere.

Fai sapere.
mmmmm stranissima faccenda... tu hai W98 vero? e cmq si, l'hWnd è
chiaramente lo stesso sia che lo pigli con FindWindowEx sia che lo pigli con
GetForegroudWindow o qualsiasi altro metodo del genere, l'handle è buono
anche perchè GetWindowText e altre cose funzionano alla perfezione... solo
non capisco perchè diavolo a me non va, la funzione è quella della mia mail
precedente...
cosa intendi per "contesto" ?
come hai fatto a modificare la regione di Autlukke? (il codice, intendo...)
Faber
P.S.: grazie mille dell'interessamento, mi viene un nervoso pensando a 'sto
codice che va benissimo sotto 95 e NT e sotto 98 non ne vuol sapere...

 come hai fatto a modificare la regione di Autlukke? (il codice, intendo...)
Ho ricavato l'handle con FindWindow e l'ho passato
alla routine precedente. La domanda mi sembra strana; tu che
window stai cercando di modificare ? Che sia Outlook o un
altro programma, che differenza fa ?

 altro programma, che differenza fa ?
appunto, non fa nessuna differenza... nel senso che io vorrei modificare la
regione di tutte le finestre di Windows, prendendo l'hWnd di quella in primo
piano con GetForegroundWindow e un Timer... ma ce ne fosse una con cui
funzioni!!! ah, si, scusa, con una va... quella del mio programma  :(
Comunque ti ringrazio per l'aiuto che mi stai dando, ne ho proprio
bisogno... lunedě provo in ufficio con lo Spy, poi ti faccio sapere
Ciao!
Faber
P.S.: se ti serve qualche funzione e/o classe e/o qualcos'altro (magari
anche un caffč o una birra :)   ) dimmelo che te lo posto al volo!!!