Videate Nascoste ma attive

di il
6 risposte

Videate Nascoste ma attive

Buongiorno,

sono nuovo del forum, spero di inserire e fare tutto correttamente.

Nella nostra azienda abbiamo una sorta di framework MFC (VS2010). Per la UI abbiamo utilizzato la base BCGSoft con delle nostre personalizzazioni.

Nei nostri prodotti vengono aperte una serie di finestre modali (CFrameWnd) una sull'altra, a volte però capita che una di queste finestre non venga disegnata.
E' completamente creata, ha il fuoco, ma non si vede. Utilizzando lo Spy++ questa viene intercettata e si può notare che tutti i suoi componenti interni sono stati correttamente creati con le giuste dimensioni. Lo stile, ovviamente, è WS_VISIBLE.

Non si riesce ad uscire da questa situazione finchè a tentoni non si riesce a cliccare il rettangolo corretto di uno dei pulsanti di uscita.

Utilizzando un programma simile allo spy (WinSpy++) dove possiamo modificare lo stile della finestra, abbiamo tolto il WS_VISIBLE e poi l'abbiamo reimpostato, risultato la videata compare correttamente.

Abbiamo notato che capita più soventemente quando è attiva una connessione VNC o quando vi è un proiettore attivo e non si è mantenuta la risoluzione consigliata.

Vi siete mai imbattuti in un problema di questo tipo ?
Avete consigli ?

6 Risposte

  • Re: Videate Nascoste ma attive

    Mettere un InvalidateRect a finestra già esposta non risolve?
    A quanto pare non viene ridisegnata la finesta dopo il ShowWindow quindi con InvalidateRect dovresti forzare il ridisegno.
  • Re: Videate Nascoste ma attive

    Prima di tutto grazie skynet per la risposta,

    Ma se fosse semplicemente un problema di ridisegno, non basterebbe ridurre ad icona il programma e ripristinarlo ? oppure metterci una videata sopra e toglierla ?
    In quel caso deve venir richiamato sempre il WM_PAINT.

    E già in quel caso non si ottiene niente, la videata rimane nascosta. Appena riesco posso anche fare la prova con l'invalidateRect, ma mi sembra,a priori, di fare un buco nell'acqua.

    Io sto continuando a pacioccare con il WinSpy17 ed è allucinante come richiamando il ridisegno diretto non faccia niente, ma se la nascondo e la rendo visibile compaia come per magia.
    In quel modo per viene modificato lo stile, e quando la nascondo vedo che il VISIBLE sparisce e viene ripristinato. All'avvio però il VISIBLE c'è ma la videata no

    Andrea
  • Re: Videate Nascoste ma attive

    Hai per caso cambiato le proprietà della finestra in PreCreateWindow?
    Puoi elencare gli stili che sta finestra ha con Spy? Magari c'è ne qualcuno incompatibile con un altro.
  • Re: Videate Nascoste ma attive

    Eccoli:
    (inizialmente pensavo mancasse WS_CLIPCHILDREN ma anche in quel caso nulla di fatto)

    WS_DLGFRAME
    WS_POPUP
    WS_VISIBLE
    WS_CLIPSBLINGS
    WS_SYSMENU
    WS_THICKFRAME
    WS_MINIMIZEBOX
    WS_MAZIMAZEBOX

    WS_EX_LEFT
    WS_EX_LTRREADING
    WS_EX_RIGHTSCROLLBAR
    WS_EX_WINDOWEDGE


    gli stili li cambiamo solo nella Create, nella precreate mi limito a questo:

    BOOL SiWOBCGMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CBCGPFrameWnd::PreCreateWindow(cs) )
    return FALSE;

    CRect rectScreen;
    SystemParametersInfo(SPI_GETWORKAREA, NULL, (LPRECT)&rectScreen, 0);

    cs.cx = rectScreen.Width();
    cs.cy = rectScreen.Height();


    return
    }
  • Re: Videate Nascoste ma attive

    WS_CLIPSIBLINGS Clips child windows relative to each other; that is, when a particular child window receives a paint message, the WS_CLIPSIBLINGS style clips all other overlapped child windows out of the region of the child window to be updated. (If WS_CLIPSIBLINGS is not given and child windows overlap, when you draw within the client area of a child window, it is possible to draw within the client area of a neighboring child window.) For use with the WS_CHILD style only.
    Da usare solo con WS_CHILD.
    WS_SYSMENU Creates a window that has a Control-menu box in its title bar. Used only for windows with title bars.
    Ma
    WS_DLGFRAME Creates a window with a double border but no title.
    Non crea un SYSMENU.

    Insomma ci sono delle incogruenze.

  • Re: Videate Nascoste ma attive

    In effetti hai ragione, faccio due prove e ti aggiorno.
    Più che altro è il CLIPSBLINGS che mi puzza un po'.

    la cosa particolare è che fino a qualche mese fa il nostro ambiente si appoggiava direttamente agli oggetti base di MFC.
    Oggi invece abbiamo inserito di mezzo lo strato BCGSoft, è l'unico stile che è cambiato è solamente il DLGFRAME.

    Prima di BCG non avevamo mai avuto di questi problemi.

    Grazie mille per l'aiuto
Devi accedere o registrarti per scrivere nel forum
6 risposte