Newsgroup: it.comp.programmare.win32
Titolo: size

ho bisogno ke la finestra abbia una larghezza multipla di 12, quindi ho
intercettato lParam nel messaggio WM_SIZE, l'ho diviso x 12 e rimoltiplicato
x 12,in modo da ottenere....(avrete capito no??)
ora, come faccio a ridisegnare la finestra?? pensavo ke in questo modo
venisse creata con la misura ke gli ho assegnato io, invece no, ha sempre le
stesse dimensioni!!!
devo mandare un messaggio WM_PAINT???
graaaaazie!!!
K

 wrote in message
zoej7.36883$%a4.13...@news.infostrada.it...

non so se funziona ma potresti provare con WM_SIZING  invece che WM_SIZE


si ma ke gli passo in lParam?? da quanto ho capito creo un rect e gli passo
la suddetta variabile, ma nn accetta!!!
cannot convert from 'struct tagRECT *' to 'long'

 la suddetta variabile, ma nn accetta!!!
No, il RECT esiste già ed è puntato da lParam; un'applicazione può
modificare i campi della struttura, ma senza allocarne un'altra:
case WM_SIZING:
{
    RECT *prect = reinterpret_cast<RECT*>(lParam);
    prect->right = ...
    prect->bottom = ...
}
Ricordati che le coordinate passate nel rect sono relative all'intero
schermo, quindi right e bottom non rappresentano la larghezza e l'altezza
della finestra; ti devi fare due calcoli, ad esempio:
larghezza = prect->right - prect->left + 1
altezza = prect->bottom - prect->top + 1
...e dopo averle elaborate:
prect->right = prect->left + larghezza - 1
prect->bottom = prect->top + altezza - 1
Ammetto di non aver provato , ma potrebbe funzionare così.
In alternativa potresti elaborare il messaggio WM_SIZE chiamando la funzione
SetWindowPos:
BOOL SetWindowPos(
        HWND hWnd,
        HWND hWndInsertAfter,
        int x,
        int y,
        int cx,
        int cy,
        UINT uFlags
);
La chiamata dovrebbe essere così:
case WM_SIZE:
    SetWindowPos(hWnd,NULL,0,0,larghezza,altezza,SWP_NOMOVE | SWP_NOZORDER);
Il flag SWP_NOMOVE ordina di ignorare i parametri x e y che possono quindi
essere azzerati; il flag SWP_NOZORDER ordina di ignorare il parametro
hWndInsertAfter che può essere impostato a NULL (credo).
Ad ogni modo il primo metodo mi sembra il più corretto, quindi se riesci a
far funzionare quello, è meglio.
Ciao,
Stefano.


ho provato a fare cosi,solo ke l'altezza e la larghezza ke gli passava non
era quella ke dicevo io!!!!
es:
case WM_SIZE:
   xMax=LOWORD(lParam);
   yMax=HIWORD(lParam);
   if((xMax%max!=0)||(yMax%max!=0))
   {
    xMax/=max;
    xMax*=max;
    yMax/=max;
    yMax*=max;
    SetWindowPos(hWnd,NULL,0,0,xMax,yMax,SWP_NOMOVE);
   }
  break;
in questo modo scopro (con il debug) ke dopo aver kiamato SetWindowPos(..)
rientra nel case wm_size e xMax è diverso dal precedente ed è sottratto di
8,in questo modo rientra nel "if" e ripete le stesse cose!!!ho risolto il
problema passandogli xMax+8 e yMax+10 (la y veniva passata sottratta di
10..) xò cosi non sono sicuro ke giri su qlsiasi pc, magari in altri la cosa
funziona... booo
xkè tutto ciò?????

 la y veniva passata sottratta di 10
Uhm, mi sembra un po' poco; la tua finestra ha una barra del titolo?
Ciao,
Stefano.

Uhm, mi sembra un po' poco; la tua finestra ha una barra del titolo?
no, infatti,hai ragione: mi pare ke la differenza sia sulla quarantina... io
ho preso il numero multiplo di 12 + vicino a quello e mi veniva -10
grazie 1000
K