Newsgroup: it.comp.lang.visual-basic
Titolo: [?] SetParent con tasto del menu Avvio

Salute a tutto il niusgrup!
avrei una questioncina da porvi:
perché se uso SetParent usando l'hWnd del bottone del menu avvio e quello di
una mia form (o di qualunque altra finestra, non credo che abbia importanza)
il bottone effettivamente si sposta sulla mia finestra ma se poi ci clicco
resta premuto e non mi appare il menu?
ora che ci penso... non è che il messaggio venga elaborato dalla "finestra
madre" originale e quindi non se ne fa nulla?
grazie in anticipo per ogni spunto, suggerimento, o qualunque altra cosa
legata a questo fatto vogliate dirmi
Faber

Alcuni controlli (fra i quali i pulsanti e i text) non si comportano bene
quando vengono inclusi in una window diversa con SetParent (dipende dal
codice, comunque molto spesso questi controlli non gestiscono i messaggi ma
li gestisce per loro il parent).
----------------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------------

Ringrazio sia Stefano che Roal per l'aiuto, faccio delle prove e poi vi
faccio sapere
Grazie ancora
Faber




 perché se uso SetParent usando l'hWnd del bottone del menu avvio e quello
di
[...]

> Ma come lo recuperi l'handle del pulsante Start?
Le dichiarazioni delle API e delle relative
costanti dovresti trovarle facilmente
nell'API Viewer...
Private Function TaskbarHwnd() As Long
    Dim MainHwnd As Long, CHwnd As Long
    Dim CLS_NM As String * 14
    MainHwnd = GetDesktopWindow
    CHwnd = GetWindow(MainHwnd, GW_CHILD)
    Do While CHwnd <> 0
        GetClassName CHwnd, CLS_NM, 14
        If Left(CLS_NM, 13) = "Shell_TrayWnd" Then
            TaskbarHwnd = CHwnd
            Exit Function
        End If
        CHwnd = GetWindow(CHwnd, GW_NEXT)
    Loop
End Function
'Lo recupero con questa property
'(da me sta in un modulo di classe)
Property Get hwnd() As Long
    Dim MainHwnd As Long, CHwnd As Long
    Dim CLS_NM As String * 7
    MainHwnd = TaskbarHwnd
    CHwnd = GetWindow(MainHwnd, GW_CHILD)
    Do While CHwnd <> 0
        GetClassName CHwnd, CLS_NM, 7
        If Left(CLS_NM, 6) = "Button" Then
            hwnd = CHwnd
            Exit Property
        End If
        CHwnd = GetWindow(CHwnd, GW_NEXT)
    Loop
End Property

 titolo "Program Manager", basta un FindWindow)
ok... a questo punto potrei avere l'hWnd del desktop... e poi?! nel senso...
che ci faccio? serve a risolvere il mio problema?
grazzzz
Faber

Manager", basta un FindWindow)
Ma l'hWnd del desktop non si può ottenere con GetDesktopWindow()?
Ciao

Quale dei tanti desktop ti restituisce con GetDesktopWindow()? I desktop sono
due (anche tre), di cui uno composto da tre-quattro finestre una dentro l'altra


due (anche tre), di cui uno composto da tre-quattro finestre una dentro
l'altra
Come sono due o tre?
Se non sbaglio la GDW restituisce l'handle del desktop (area che copre
l'intero schermo) del monitor principale.
Quali sono gli altri desktop?
Ciao

A parte che su NT, dovrebbe essercene 1 (altrimenti non si capisce l'uso di
GetDesktopWindow). Se poi questa ha dei children, è un'altra questione.


 GetDesktopWindow). Se poi questa ha dei children, è un'altra questione.
per quello che ne so io (magari faccio confusione, però...) di Desktop ce ne
sono almeno due:
- quello a cui è riferito GetDesktopWindow è un hWnd che rappresenta la
finestra di *tutto* ciò che c'è sullo schermo, infatti mi pare che lavorando
sull'hDc di quest'ultimo con BitBlt si lavora effettivamente su un'immagine
che è proprio come quella che si ottiene col tasto Print
- il Desktop "effettivo", cioè quello su cui sono posizionate le icone tipo
IExplore, Risorse di Rete ecc...
prego chiunque abbia da fare precisazioni, commenti o correzioni su ciò che
ho detto di farsi avanti, perché forse sono stato troppo approssimativo
Faber

Ecco quello che so io sui tanti desktop:
- una classe #32768 (menu standard???) su cui viene disegnato lo sfondo. Una
finestra assolutamente inutile. Non riceve o invia messaggi, non risponde
agli input, non può nemmeno ricevere il fuoco. L'handle di questa finestra,
sul mio computer, risulta essere sempre e comunque 128 (&H80). Ed è anche
l'handle che mi viene restituito da GetDesktopWindow()
- una classe Progman, posizionata sopra il primo strato, di cui "ruba" lo
sfondo ogni volta che viene ridisegnata. Questa viene aggiunta da Esplora
risorse
- una classe SHELLDLL_DefView, contenuta dal Progman
- una classe SysListView32 con le icone del desktop, contenuta dalla
SHELLDLL_DefView (se non ci fosse quest'ultima, le icone sarebbero
immobili - ve lo dico per esperienza)
- una classe InternetExplorerServer, che viene messa all'interno della
SHELLDLL_DefView e "sotto" la SysListView32 quando il desktop è visualizzato
come pagina web per coprire lo sfondo "vero"

A parte la finestra ritornata da GetDesktopWindow(), le altre sono storie
messe su da explorer.exe e dal desktop html di 98 (che non ho ma mi sono
sempre chiesto se sia possibile rimuovere, come si poteva fare con quello di
95, cioč senza quell'orribile explorer in html), che poi credo sia una
variante di explorer.exe. Se non lanci explorer.exe tutta questa roba se ne
va. Quindi quello che serviva, forse, qui non era il desktop ma qualcosa
riguardante l'explorer - in particolare la barra delle applicazioni, che č
una delle tante finestre di explorer.exe. Molte di queste cose fanno parte
della shell di Windows e sono manipolabili a livello di automazione.


della shell di Windows e sono manipolabili a livello di automazione.
Infatti anche a me risulta così: una cosa è il desktop, un'altra sono tutte
le porcherie che win ci mette sopra, quelle sono altre finestre, ma non
certo il desktop.
Lo stesso per quello che dice Faber: una cosa è l'hWnd del desktop e
un'altra è il suo hDC.
Tutte e due fanno riferimento allo stesso oggetto ma sono due cose diverse!
Ciao

Tutte e due fanno riferimento allo stesso oggetto ma sono due cose diverse!
non intendevo dire che l'hWnd e l'hDc sono la stessa cosa!!!
Faber

Tutte e due fanno riferimento allo stesso oggetto ma sono due cose diverse!
Beh, come in tutte le finestre, del resto.. no?
--
C'ya, 
  |
  |
'/|\'
\\O//
//"\\
'\ /'
________________________________________TagLine___
"Quanti Angeli danzano sulla punta di uno spillo?"