2009-10-01 9 views
5

Abbiamo un'applicazione che funziona su workstation con monitor multipli XP64 e Vista64 e ha uno strano problema quando un singolo modulo nell'applicazione viene spostato su determinati monitor.Il cursore diventa un ridimensionamento diagonale quando la forma è sopra e sinistra del monitor principale

Se il modulo viene spostato su un monitor che si trova a sinistra e sopra il monitor principale (ha coordinate negative nella finestra di dialogo Impostazioni schermo), gli utenti otterranno un cursore di ridimensionamento diagonale quando si posiziona il cursore nel modulo (L'ho visto solo quando il cursore si trova nel cromo della finestra, ma gli utenti hanno segnalato che ciò accade all'interno dell'intera finestra).

Sono stato in grado di determinare che si verifica solo quando il cursore si trova sopra il monitor principale (rendendo il monitor secondario solo parzialmente sopra il monitor principale, il problema si verifica solo nella parte del modulo sopra il monitor principale).

Questo accade solo con un modulo in tutta la nostra applicazione, e questo non fa nulla di particolarmente elegante (non sovrascrive WndProc, ecc.) E tutti i controlli personalizzati utilizzati sono utilizzati anche in altre forme che don ' t visualizzare questo problema.

Cosa causerebbe la visualizzazione del cursore di ridimensionamento diagonale tutto il tempo?

risposta

6

Questo sembra essere un bug in Form.WmNCHitTest. Credo che il modo in cui sta determinando le coordinate xey non siano corretti (per ottenere il numero HIWORD((int)((long)lParam)), dove la documentazione dice di usare GET_Y_LPARAM che è definito come ((int)(short)HIWORD(lParam))).

Utilizza questo metodo solo se si dispone dell'impugnatura di ridimensionamento. La disattivazione dell'impugnatura delle dimensioni ignora questo codice e fa funzionare correttamente il modulo.

+0

Abbiamo saputo di questa soluzione alternativa per un po 'di tempo. Qualcuno ha ideato una correzione reale che permetta di mostrare la presa delle dimensioni? –

0

Ulteriori informazioni: Trovo che quando si imposta l'impostazione Form.SizeGripStyle su Show, che il comportamento dispari con il cursore diventi un cursore di ridimensionamento diagonale, sembra e funziona come se si ridimensionasse la finestra dall'angolo in basso a destra, viene visualizzato quando la finestra Form viene spostata su un monitor secondario. Quando si imposta Form.SizeGripStyle su Auto, il valore predefinito, questo problema scompare e i cursori e il ridimensionamento della finestra del modulo funzionano come dovrebbero (cursori corretti, ecc.).