Newsgroup: it.comp.programmare.win32
Titolo: "Customizzare" WINDOWS (3)...Hooks... The Code

Ecco il codice incriminato... (l'HOOK installato è WH_CALLWNDPROC, ma ho
provato anche WH_GETMESSAGE)...
Please Help!
Mau...etc.etc.
// ****** Hook Proc **************************************
LRESULT CALLBACK HookProc(int nCode,                       /* hook code */
                                                            WPARAM wParam,
/* current-process flag */
                                                            LPARAM lParam
/* address of structure with message data*/ )
{
 if(nCode < 0)
/* Don't process the msg */
 return CallNextHookEx(NULL,nCode,wParam,lParam);
 CWPSTRUCT* WndProcStruct;
 WndProcStruct= (CWPSTRUCT*)lParam;
 UINT Msg;
 Msg= WndProcStruct->message;
 if(Msg==WM_NCPAINT)
 {
  HDC  WndDC;
  RECT WndRect;
  WndDC=GetWindowDC(WndProcStruct->hwnd);
  GetWindowRect(WndProcStruct->hwnd,&WndRect);
  WndRect.bottom=32;
  WndRect.right=WndRect.right-WndRect.left;
  WndRect.top=WndRect.left=0;
  FillRect(WndDC,&WndRect,(HBRUSH)WHITE_BRUSH);
  ReleaseDC(WndProcStruct->hwnd,WndDC);
 }
return 0;
/* Oppure  return CallNextHookEx(NULL,nCode,wParam,lParam); */
}

provato anche WH_GETMESSAGE)...
Ma perchè non provi come ti avevo detto io?? Intercetta WH_GETMESSAGE,
disegna l'area non client della finestra, e rendi innocuo il messaggio in
modo tale che la window procedure della finestra incriminata non vada a
disegnare sopra la caption appena disegnata da te.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

 disegnare sopra la caption appena disegnata da te.
Ho già provato!!!  ma per qualche strano motivo WH_GETMESSAGE non intercetta
WM_NCPAINT(...non chiedetemi perchè, le ho provate tutte, ma non ne ha
voluto sapere)!!
Ad ogni modo, WH_CALLWNDPROC NON mi impedisce il disegno!!!! il problema è
(credo) un altro...  la mia funzione non fa distinzione tra le molteplici
finestre che inviano WM_NCPAINT, per cui se il Desktop (o altre windows che
non c'azzeccano un tubo...eh eh)  ne fanno richiesta, ecco che il Rect e
relativa scritta (aggiunta da poco) appaiono nei "posti" più
impensati!!!(Desktop, menu, toolbars, SystemTray,etc.etc. un macello
insomma!)
SI tratta quindi (credo, I repeat...) di selezionare le finestre (quelle che
hanno una caption bar) che necessitano del "restyling"  ed escludere tutte
le altre... (e la cosa non si prospetta semplice...)
 Fatemi sapere che ne pensate!!!
Bye
Maurizio ;)

 voluto sapere)!!
Un comportamento ben strano dopo provo io...
--
Ciao , Ricardo Antonio Piana
(Rico per gli amici)
ricard...@tiscalinet.it
http://web.tiscalinet.it/ricardopiana

Bhe, Grazie a tutti (anche a Stefano) per la dritta!!! (c'ero quasi arrivato
da solo.. eh eh...(SCHERZO!)  ;))
Usando GetWindowLong e controllando lo Style del finestra posso selezionare
solo quelle con una Caption Bar (quello che volevo io!)...
...Ora implementerò (...che parolone) un controllo x NCACTIVATE e qualche
altre quisquilia...  :o
...naturalmente la DefWindowProc non viene eliminata... come nella
precedente app, io ci disegno sopra... per ora la cosa non mi turba, ma +
avanti...mah!
...(le seguenti righe sono da trattare con le molle... daltronde sono ancora
un "lattante" in campo Win32...)
Il problema con WH_GETMESSAGE è che WM_NCPAINT viene inviato alla windowproc
con SendMessage (che viene intercettato solo da WH_CALLWNDPROC)   di
conseguenza non viene rilevato!
...infatti, se uso WH_GETMESSAGE e "Post"-o il msg tutto funziona a dovere!
Spero di non avere male interpretato il MSDN.
Bye Boys! :))
Maurizio

Spero di non avere male interpretato il MSDN.
L'hai interpretato benissimo. Che stupido sono stato a non pensarci per
nulla :-(


Questa è la funzione che  ho usato per esaminare lo stile della finestra...
il problema è che non è poi tanto "precisa"!... non mi risulta, infatti, che
il Desktop abbia una Caption...  :(
Qualcuno può darmi una "luce"?
****************************************************************************
*********************************
bool IsCaption(HWND hWnd)
{
 BOOL Result;
 if((GetWindowLong(hWnd,GWL_STYLE) & WS_CAPTION) == WS_CAPTION) Result=TRUE;
 else Result=FALSE;
 return Result;
}
****************************************************************************
*********************************
Maurizio... ;)

strutturata..)
Le macro possono fare molto male, in C++ poi sono superate ed
al loro posto e` meglio usare le funzioni inline che si comportano come
le macro e non soffrono dei loro problemi.
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

ehm... devo dire che lo "stile" (leggi ottimizzazione...) non č proprio il
mio forte...
...purtroppo ho ancora mooolto da imparare... ;)
(e qualche "retaggio" di BASIC viene fuori...ogni tanto)...
Ad ogni modo, se la funz č corretta... devo essermi sicuramente "INCASINATO"
io da qualche altra parte! (anche xchč x une certo periodo, la suddetta funz
ha funzionato(!) a dovere... splif!)
...Comincio a pensare (come mi ha suggerito Carlo Lanzotti) che esista un
metodo piů SEMPLICE x ottenere sta' benedetta "Customizzazione"...
Saludos
Maurizio :)

Lo so , ma nel thread si parlava di C Standard ...( e l'appunto riguardo ai
puristi della programmazione riguardava appunto la pericolosità delle
macro...)
--
Ciao , Ricardo Antonio Piana
(Rico per gli amici)
ricard...@tiscalinet.it
______________________________________________
Tutti i miei racconti , alcune poesie ed altro nel mio sito
http://web.tiscalinet.it/ricardopiana
______________________________________________

 wrote in message
news:7ug3mt$ei1$1...@draco.tiscalinet.it...


| Volete scrivere prog simil-WindowsBlind->eFX ?
Esatto ! Maurizio vuole.. io sono un curioso...
