Welche Methode löst WM_CtlColor aus?



  • So, ich habe jetzt eine Idee, was du vor hast. 🙂

    Mir sind folgende Zeilen aufgefallen, die in dem Zusammenhang total falsch erscheinen:

    //    CButton Button1;
    //    Button1.GetDlgItem(IDC_BUTTON_D1left);
    //    RedrawWindow(NULL, NULL, RDW_INVALIDATE);
    

    Versuch mal:

    GetDlgItem(IDC_BUTTON_D1left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    

    Das ist aber nur ein Verdacht von mir, ungetestet!



  • I´ll try! 🙂



  • Der Herr salbe Dein Haupt mit Öl und gebe Dir eingroßes fass Bier!!! 👍

    Es funktioniert, ohne Flackern 😃

    Thanx!!!!!!!!!

    Jetzt kann es endlich weitergehen...



  • Schön! 👍

    Hast du denn verstanden, wo der Unterschied ist?
    Meine eine Zeile ist ja deine drei nur zusammengefasst.
    Lang wäre so:

    CWnd* pButton1 = NULL; // CButton geht nur mit Cast
    pButton1 = GetDlgItem(IDC_BUTTON_D1left);
    pButton1->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    


  • Ja jetzt hab ich den Unterschied verstanden!
    ist ja eigentlich auch logisch! Ich hab nur die ganze Zeit nach einem anderen Weg gesucht (Aufruf von OnCTlColor oder UpdateWindow)!

    Hab durch Deinen Vorschlag auch ne Menge Code gespart!!!
    ich kann ja mal den Code posten:

    void CDlgServiceCall::OnSetServiceCall(int side, int pult) 
    {	
    	if(side==1)
    		DeskLeft[pult-1]=TRUE;
    	else
    		DeskRight[pult-1]=TRUE;
    
    	RedrawButtons(side, pult);
    
    }
    void CDlgServiceCall::OnDeleteServiceCall(int side, int pult) 
    {
    	if(side==1)
    		DeskLeft[pult-1]=FALSE;
    	else
    		DeskRight[pult-1]=FALSE;
    
    	RedrawButtons(side, pult);
    }
    

    mein Funktion, welch die Buttons neu zeichnet:

    void CDlgServiceCall::RedrawButtons(int side, int pult)
    {
    	if(side==1)
    	{
    		switch(pult)
    		{
    		case 1:
    			GetDlgItem(IDC_BUTTON_D1left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 2:
    			GetDlgItem(IDC_BUTTON_D2left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 3:
    			GetDlgItem(IDC_BUTTON_D3left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 4:
    			GetDlgItem(IDC_BUTTON_D4left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 5:
    			GetDlgItem(IDC_BUTTON_D5left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 6:
    			GetDlgItem(IDC_BUTTON_D6left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 7:
    			GetDlgItem(IDC_BUTTON_D7left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 8:
    			GetDlgItem(IDC_BUTTON_D8left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 9:
    			GetDlgItem(IDC_BUTTON_D9left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 10:
    			GetDlgItem(IDC_BUTTON_D10left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 11:
    			GetDlgItem(IDC_BUTTON_D11left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 12:
    			GetDlgItem(IDC_BUTTON_D12left)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		}
    	}
    	else
    	{	
    		switch(pult)
    		{
    		case 1:
    			GetDlgItem(IDC_BUTTON_D1right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 2:
    			GetDlgItem(IDC_BUTTON_D2right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 3:
    			GetDlgItem(IDC_BUTTON_D3right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 4:
    			GetDlgItem(IDC_BUTTON_D4right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 5:
    			GetDlgItem(IDC_BUTTON_D5right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 6:
    			GetDlgItem(IDC_BUTTON_D6right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 7:
    			GetDlgItem(IDC_BUTTON_D7right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 8:
    			GetDlgItem(IDC_BUTTON_D8right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 9:
    			GetDlgItem(IDC_BUTTON_D9right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 10:
    			GetDlgItem(IDC_BUTTON_D10right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 11:
    			GetDlgItem(IDC_BUTTON_D11right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    		case 12:
    			GetDlgItem(IDC_BUTTON_D12right)->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    			break;
    
    		}
    	}
    
    }
    

    Die OnCtlColor blieb gleich!

    Ok vielleicht hilfts ja noch jemandem weiter!



  • der switch sieht IIHHH aus 👎



  • Warum ist der Switch IIIHHHH?

    Funktioniert einwandfrei in meiner Anwendung!

    Was wäre Dein Vorschlag es besser zu machen?

    greetz



  • Du kannst dir deine IDs so einstellen, daß sie numerisch hintereinander stehen, dann würde sich das reduzieren zu:

    if(side==1)
      GetDlgItem(IDC_BUTTON_D1left+(pult-1))->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    else
      GetDlgItem(IDC_BUTTON_D1right+(pult-1))->RedrawWindow(NULL, NULL, RDW_UPDATENOW);
    


  • Oder pack sie in ein Array wo der Wert der Index ist. 🙂



  • Ja klar die IDC sind ja eigentlich nichts anderes als Int Werte!

    OK dann werd ich mal den Switch kicken!

    Danke für Eure tipps! Man lernt nie aus!


Anmelden zum Antworten