Comboboxes in normalen Fenster



  • Du musst die Nachrichten im Parent empfangen!

    LRESULT CALLBACK CExporter::InitProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch( message )
        {
        case WM_CTLCOLORLISTBOX:
        ...
    


  • Aha, vielen Dank.

    Hat ja auch JeanLeBon geschrieben. (Wer lesen kann, ist bei solchen Sachen deutchlich bevorteiligt! 🙂 ) Leider funktioniert es so immer noch nicht...

    Ich mache das so:

    case WM_CTLCOLORLISTBOX:
    	case WM_CTLCOLORBTN:
    
    		if(SetBkMode(GetDC(CB1), TRANSPARENT)==CLR_INVALID)
    			ERROR_WINAPI("SetBkMode", -1);		
    		if(SetBkMode(GetDC(CB2), TRANSPARENT)==CLR_INVALID)
    			ERROR_WINAPI("SetBkMode", -1);
    		if(SetBkMode(GetDC(CB3), TRANSPARENT)==CLR_INVALID)
    			ERROR_WINAPI("SetBkMode", -1);
    
    		return reinterpret_cast<LRESULT>(GetStockObject(WHITE_BRUSH)); 
    
    	break;
    

    Fehler gibt es aber nicht!!!

    Vielen Dank nochmals...



  • Na, du musst aber schon den DC aus dem wParam nehmen, sonst wird das nichts 😉 (so wie du es in CExporter::ComboBoxProc hattest)



  • Vielen Dank,

    jetzt wird die Funktion SetBkMode wenigenstens erfolgreich gesendet, ohne dass ich selbst nachhelfen muss! (Juhu :D)

    Leider sehe ich aber keine Unterschied! *wein*

    Naja,

    schönes Wochenende...



  • Jetzt funktioniert es plötzlich!!! 😃 😃 😃 😃 😃 😃 😃 🤡

    Ich habe einfach noch eine dritte Nachricht behandelt, und jetzt geht es eben. Jetzt meine letzte (und wirklich letzte Frage), welche Nachricht muss ich senden, um mein Child-Window-Button zu deaktivieren???

    Danke...



  • EInfach hwnd des Buttons ermitteln und dann ganz normal deaktivieren indem du mit sendmessage WM_DEACTIVATE sendest.



  • Gibt es denn die Nachricht WM_DEACTIVATE???



  • Ich würds mal mit WM_ACTIVATE probieren. Bin mir aber nicht sicher, ob's funktioniert



  • Ich würde da eher EnableWindow nehmen 🕶



  • Also hier ist das versprochene Textstückchen:

    //.....
    	case WM_CTLCOLOREDIT:
    	case WM_CTLCOLORLISTBOX:
    		{
    			if((HWND)lparam == Fensterquelltexthandle)
    			{
    				SetBkColor((HDC)wparam, RGB(255, 80, 80));
    				SetTextColor((HDC)wparam, RGB(0, 0, 130));
    				return((LRESULT)CreateSolidBrush(RGB(255, 80, 80)));
    			}
    			else if((HWND)lparam != Fensternormalerlinkhandle && (HWND)lparam != Fensteraktiverlinkhandle && (HWND)lparam != Fensterbesuchterlinkhandle && (HWND)lparam != Fenstermauszeigerlinkhandle)
    			{
    				SetBkColor((HDC)wparam, RGB(255, 255, 80));
    				SetTextColor((HDC)wparam, RGB(0, 130, 0));
    				return((LRESULT)CreateSolidBrush(RGB(255, 255, 80)));
    			}
    			else
    			{
    				SetBkColor((HDC)wparam, RGB(121, 121, 255));
    				SetTextColor((HDC)wparam, RGB(255, 200, 255));
    				UpdateWindow(Fensternormalerlinkhandle);
    				UpdateWindow(Fensteraktiverlinkhandle);
    				UpdateWindow(Fensterbesuchterlinkhandle);
    				UpdateWindow(Fenstermauszeigerlinkhandle);
    				return((LRESULT)CreateSolidBrush(RGB(121, 121, 255)));
    			}
    		}
    
    //.......
    

    Zur Erklärung:

    ich finde hier im lparam heraus um welchen Handle es sich handelt (ich reagiere sowohl auf editfelder als auch comboboxen.
    Dann setzte ich die Textfarbe die Texthintergrundfarbe und gebe eine Brush als LRESULT konvertiert zurück, der dann den Hintergrund für die Combobox oder editbox angibt. Das HDC ist im wparam.
    Auf diese Nachrichten musst du im WindowProc vom Parent reagieren und du darfst nicht die Nachrichten selber schicken, sondern du kriegst sie automatisch geschickt. Hoffe es hat dir geholfen ;).


Anmelden zum Antworten