Domanda

Attualmente sto cercando di fare una GUI per alcuni software e sto avendo problemi con alcuni controlli statici. Nella mia procedura finestre ho il messaggio WM_CTLCOLORSTATIC per quando i controlli statici sono da trarre. All'interno del messaggio, ho un'istruzione IF ELSE in cui mette a confronto le maniglie di una finestra a quella che deve essere disegnati e funzioni Esegue finestre di conseguenza. Uno è un controllo di testo statico che ha il set di colori di sfondo quando viene disegnata, mentre l'altro è quello di disegnare i confini di un controllo statico.

    case WM_CTLCOLORSTATIC:
    {
        if (hwnd = ANNwindow->settingsborder)
        {
            SetBkMode((HDC)wParam, TRANSPARENT);
            return (LRESULT)ANNwindow->backgroundbrush;
        }
        else if (hwnd = ANNwindow->settingstext)
        {
            DrawEdge((HDC)wParam, &ANNwindow->rect, EDGE_ETCHED, BF_BOTTOMRIGHT);
            return (LRESULT)ANNwindow->backgroundbrush;
        }

    }

Il settingsborder e settingstext sono maniglie delle finestre nella mia classe per la creazione di GUI.

Se io invertire l'ordine dei se else, lo fa solo il primo, non importa in che ordine. Se cambiare il colore di sfondo è sotto l'IF, lo fa. Se il disegno il confine è sotto la SE, allora lo fa, ma mai che cosa è sotto la parte altra cosa. Si tratta di un semplice errore nella utilizzando il linguaggio C ++ come non riesco a trovare il problema. Si prega di aiuto, grazie.

P.S. Per la parte DrawEdge, ho creare un bordo controllo statico, quindi utilizzare il DrawEdge su questo, devo fare in un altro modo? Grazie.

È stato utile?

Soluzione

Ecco il problema.

if (hwnd = ANNwindow->settingsborder)

dovrebbe essere

if (hwnd == ANNwindow->settingsborder)
//       ^^

e lo stesso per la dichiarazione else if.

Si sta assegnando il contenuto del ANNwindow->settingsborder al tuo hwnd, operazione che quasi sempre i rendimenti true invece di fare un test di uguaglianza.

Altri suggerimenti

  1. Attiva avvisi nel vostro compilatore.
  2. Si noti che in entrambe le condizioni si utilizza le assegnazioni (=) invece di confronti (==).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top