Newsgroup: it.comp.programmare.win32
Titolo: ottenere l'hWnd di una finestra

in un'applicazione Dialog-based dove ho creato a design-time i controlli
(bottoni, ecc...), durante l'esecuzione come faccio a ottenere l'handle
(hWnd) sapendo solamente l'id (es.: IDC_BUTTON4 = 130)?
--
ciao
xAERO


hWnd=GetDlgItem(hwndMain, ID);
dove ID e' quello del controllo, hwndMain e' quello della finestra
parent del controllo.
Ciao,
Lorenzo
--
Visitate 
http://go.to/KingdomAmiga
Sito dedicato al miglior computer di sempre

grazie!
senti un'altra cosa, mi puoi fare un esempio di come si usa SetWindowLong e
GetWindowLong?
vorrei sapere come fare se io voglio cambiare (aggiungere) un solo attributo
senza togliere gli altri
di nuovo grazie
--
ciao
xAERO

GetWindowLong?
Guarda, io ho iniziato a programmare in windows da una settimana e non
ho idea di cosa facciano.
Qua ti serve l'aiuto di qualcuno piu' esperto...


anche io da poco...
conosco il C (standard) e poco le API perchè le ho sempre usate solo in VB
...
// hEdit1 e l'hWnd di un edit nel dialog
// dichiarato a livello di modulo (si dice così?)
// non ha border (WS_VISIBLE|WS_TABSTOP)
....{
long hOldStyle, long hNewStyle;
hOldStyle = GetWindowLong(hEdit1, GWL_STYLE);
hNewStyle = hOldStyle | WS_BORDER;
SetWindowLong(hWnd, GWL_STYLE, hNewStyle);
non funziona :(((
l'unica cosa che sono riuscito a fare è stata quello di impostargli
l'attributo ES_NUMBER
    hNewStyle = hOldStyle | ES_NUMBER;
    SetWindowLong(...);
poi c'è un'altro problema:
voglio gestire gli eventi mousehover e mouseleave di acuni oggetti
quindi nel message loop metto:
    case WM_MOUSEHOVER:
        // ...
        return 0;
ma il compilatore mi dice:
test.cpp(81) : error C2065: 'WM_MOUSEHOVER' : undeclared identifier
perchè???? questa costante non c'è nemmeno in WIN32.HLP, ma cel'ho nel
visualizzatore API di VB
come devo fare?
grazie a tutti
--
ciao
xAERO

 test.cpp(81) : error C2065: 'WM_MOUSEHOVER' : undeclared identifier
dimenticavo: uso VC++ 6.0 (senza MFC)
--
ciao
xAERO

 GetWindowLong?


     Marco.
non ci riesco
ho un campo edit con gli attributi WS_VISIBLE|WS_TABSTOP|WS_BORDER
gli devo togliere il WS_BORDER e mettere il WS_EX_STATICEDGE
devo usare 2 volte il SetWindowLong(), una per lo style normale e una per lo
style esteso
non funziona!
ho provato anche ad aggiungere semplicemente WS_EX_STATICEDGE, ma non va
ho piazzato MessageBox() ovunque per vedere se l'errore non era lì, invece
funziona, anche perchè se provo a dargli l'attributo ES_NUMBER (con
l'operatore or '|') funziona
help!
--
ciao
xAERO

gli devo togliere il WS_BORDER e mettere il WS_EX_STATICEDGE
Puoi usare tranquillamente il "-" o mettere a AND con il NOT degli
attributi.
--
Andrea Laforgia (ICQ 87230455)
------------------------------ 
#exclude <windows.h>

dimenticavo: uso VC++ 6.0 (senza MFC)
WM_MOUSEOVER





 esempio, la finestra non verrà ridotta ad icona e quindi ripristinata...
ops! forse era solo questo il problema!!!
come si fa il refresh del controllo?
grazie
sai, programmo da pochi giorni con il c e win32
le api le ho sempre usate solo in VB e tutto era più semplice... ^_^
grazie di nuovo
--
ciao
xAERO

 WM_MOUSEOVER
stessa cosa:
test.cpp(80) : error C2065: 'WM_MOUSEOVER' : undeclared identifier
per caso devo includere qualche header particolare???
su Win32.HLP purtroppo non c'è scritto in quali header sono le costanti
ho incluso solo windows.h
--
ciao
xAERO

ho incluso solo windows.h
E difatti non esiste WM_MOUSEOVER !...


 wrote in message
news:8set1r$kd027$1...@ID-51253.news.cis.dfn.de...



RedrawWindow()
ciao
g0

va bene HOVER :)
The WM_MOUSEHOVER message is posted to a window when the cursor hovers
over the client area of the window for the period of time specified in
a prior call to TrackMouseEvent. 
xo' devi considerare questo:
Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98: Requires Windows 98.
Header: Declared in Winuser.h; include Windows.h.
fammi sapere se era giusto :)
ciao
                    g0

 ha scritto nel messaggio
news:qdvlusc7mpisvstoh...@4ax.com...


no, già provato
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam,
LPARAM lParam)
{
    switch (msg) {
    case WM_INITDIALOG:
        InitializeApp(hwndDlg,wParam,lParam);
        return 0;
// ...[cut]...
    case WM_CLOSE:
  EndDialog(hwndDlg, 0);
        return 0;
 case WM_MOUSEHOVER:
  MessageBox(hwndDlg, "WM_MOUSEHOVER", "Message:",
MB_OK|MB_ICONINFORMATION);
  return 0;
    }
 return 0;
}
qualsiasi altro messaggio funziona
ho incluso <windows.h>
ho provato a includere anche <winuser.h> anche se non serve, ma non cambia
ho aperto il file winuser.h col notepad e ho cercato la costante:
#if(_WIN32_WINNT >= 0x0400)
#define WM_MOUSEHOVER                   0x02A1
#define WM_MOUSELEAVE                   0x02A3
#endif /* _WIN32_WINNT >= 0x0400 */
lavoro con Windows 2000 Pro Italiano - Service Pack 1
è forse un bug?!?
--
ciao
xAERO
"garph0" <gar...@garph0.0rg> ha scritto nel messaggio
news:39eb0446...@news.inwind.it...


 }
cazzo! ho inserito le costanti a mano nello stesso file (test.cpp):
#define WM_MOUSEHOVER                   0x02A1
#define WM_MOUSELEAVE                   0x02A3
e mi da sempre lo stesso errore Undeclared identifier
le ho tolte, ho messo queste: (c'è una z in +)
#define WM_MOUSEHOVERz                   0x02A1
#define WM_MOUSELEAVEz                   0x02A3
//....
case WM_MOUSEHOVERz:
//....
ancora quel dannato errore!!!!!!
test.cpp(83) : error C2065: 'WM_MOUSEHOVERz' : undeclared identifier
:'''(
--
ciao
xAERO


Ciò mi stupisce abbastanza, allora qualsiasi #define fallisce !!!!!
Porlock.

xAERO
e se sostituisci direttamente 0x02A1 a WM_MOUSEHOVER ?
cosa succede ?
cia' :)
g0

 cosa succede ?
non mi caga per niente :(
 case 0x02A1:
  MessageBox(hwndDlg, "bla bla bla","WM_MOUSEOVER",MB_OK);
  return 0;

 wrote in message
8sk79q$k74on$1...@ID-51253.news.cis.dfn.de...

La gestione dei messaggi WM_MOUSEHOVER e WM_MOUSELEAVE (ed anche
WM_NCMOUSEHOVER e WM_NCMOUSELEAVE) è quanto mai bizzarra.
In effetti non vengono gestiti automaticamente da Windows bensì occorre che
tu informi il sistema
che intendi gestirli.
A questo scopo c'è l'API:
BOOL TrackMouseEvent(
  LPTRACKMOUSEEVENT lpEventTrack  // tracking information
);
Tanto per complicare le cose quest'API e disponibile solo in Windows 98.
In alternativa è disponibile da Windows95 con IE 3.0 _TrackMouseEvent che a
quanto dice la documentazione....
"The _TrackMouseEvent function posts messages when the mouse pointer leaves
a window or hovers over a window for a specified amount of time. This
function calls TrackMouseEvent if it exists, otherwise it emulates it."
Tanto per complicare ulteriormente le cose i messagge WM_MOUSEHOVER e
WM_MOUSELEAVE sono "one-shot": vengono inviati una sola volta. Per poterli
gestire nuovamente dive chiamare nuovamente la funzione TrackMouseEvent (o
_TrackMouseEvent).
Queste informazioni le ho beccate qua e là spulciando in MSDN.
C'è anche un sample chiamato mouseinfo (che a mio parere non funziona
neanche tanto bene, anzi non funziona affatto).
In bocca al lupo
Porlock.

 che intendi gestirli.
[cut]
e con MFC non c'è verso???
:(((
non è possibile!!! sono convinto che se uso un altro compilatore funziona...
forse è VC++ che è bastardo... :)
tanto per la cronaca, ieri smanettando ho visto che dà lo stesso errore con:
 AnimateWindow(GetDlgItem(IDD_MY132_DIALOG), 2000, AW_BLEND);
:(((((((((((((((((((((((((((((
--
ciao
xAERO


Ecco un altra cosa interessante, la documentazione (MSDN) dichiara che
AnimateWindow è disponibile da Windows98 e Windows2000.
Nel file header Winuser.h invece c'è un #ifdef WINVER 0x0500 (equivalente a
versione 5) che racchiude la dichiarazione dell'API e delle sue costanti.
WINVER 0x0500 esclude Windows95/98 (che hanno versione 4), la versione 5 è
di Windows 2000 (non so per Windows ME). Quindi di fatto VC++ ti fa usare
l'API solo su Windows 2000.
Potresti tentare di ottenere il puntatore alla funzione AnimateWindow, e
vedere se ti ritorna qualcosa.
Porlcok

 vedere se ti ritorna qualcosa.
non saprei come...
grazie
--
ciao
xAERO


Ora che mi ricordo io l'AnimateWindow() sotto 98 l'avevo usato :)
quello che devi fare e' un bel 
#define WINVER 0x0500
in cima allo stdafx.h :)
ottieni un warning del compilatore che ti dice di stare attento a che
funzioni usi, ma tutto va a posto :)
ciao
g0

si, ci sono riuscito
solo che win2000 mi dà un errore di protezione della memoria... :(
--
ciao
xAERO


xAERO
? dovuto ad AnimateWindow() e fratellini vari ?
___
g0

si
"garph0" <gar...@garph0.0rg> ha scritto nel messaggio
news:39f32749...@news.inwind.it...
