Newbie Probleme.. Static in AboutBox Text zuweisen.. kein eBook konnte helfen..



  • Hi.

    Ich suche schon seit Stunden nach einem Thread der mir helfen kann.
    Mittlerweile hab ich ne AboutBox hinbekommen und jetzt würde ich gern den Text von einigen Labels (STATIC) ändern, aber wie?

    Das ist alles was ich hinbekommen habe... ändert aber nicht den Text.
    SetDlgItemText(hwnd,IDC_STATIC3,"TEST-STRING");

    Ach ja, gibt es zur API und zu VisualC++ gute Dokumentationen, die für Neulinge zu empfehlen sind? Hab schon in X eBooks reingeschaut, aber ich glaub ich für C++ zu doof.

    Ich wüsste gern, was ich alles in die .cpp und was .h gehört.

    Ich danke schonmal recht herzlich für Eure Hilfe.



  • Servus,
    das ist schon sehr richtig, wie Du es gemacht hast.

    SetDlgItemText(hwnd,IDC_STATIC3,"TEST-STRING");
    

    Ist völlig okay. Das heißt, entweder stimmt dein hwnd Handle nicht, oder IDC_STATIC3 ist nicht die ID Deines Staticelements. Zeig doch mal den Code, mit dem Du das Static erstellst bzw. die Element ID, falls Du das Element mit dem Ressourceneditor erstellt hast.

    Das mit den eBook ist so eine Sache. Welche hast Du Dir denn reingeschaut?
    Es gibt ja einige Tutorials zu WinAPI, die von anderen Leuten wie Du und ich geschrieben worden sind. Es gibt sehr gute Anfänger Tutorials bis hin zu erweiterten...

    Hier http://www.win-api.com/index.php?content=resources&mode=4&stat=res findest Du eine ganze Menge.

    Grüße vom Chris



  • Hallo

    hier erstmal der Source-Code der main.cpp

    //******************************************************************************
    // MAIN.CPP
    //******************************************************************************
    
    //******************************************************************************
    // Include der HEADER-Files
    #include "Windows.h"
    #include "resource.h"
    
    //******************************************************************************
    // Globale Variablen
    
    //******************************************************************************
    // K.A.
    HINSTANCE hInstance;
    HWND hwnd;
    
    //******************************************************************************
    //
    BOOL CALLBACK AboutProc(HWND hDlg,UINT Message,WPARAM wParam,LPARAM lParam)
    {
    	switch (Message)
    	{
    	case WM_COMMAND:
    		switch (LOWORD(wParam))	
    		{
    		case IDOK:
    			SetDlgItemText(hDlg,IDC_STATIC3,"TEST-STRING");
    			MessageBox(NULL,
    				"Eigentlich Text geändert, dachte ich...",
    				"MessageBox",
    				MB_OK|MB_ICONEXCLAMATION);
    		case IDCANCEL:	
    			EndDialog(hwnd,LOWORD(wParam));
    			return TRUE;
    		}
    	default:
    		return 0;
    	}
    }
    
    //******************************************************************************
    // Windows-Hauptfunktion
    int WINAPI WinMain(HINSTANCE hInstance,
    				   HINSTANCE hPrevInstance,
    				   char* pcCmdLine,
    				   int iShowCmd)
    {
    
    	// Öffnen der D3DConfig - DialogBox
    	DialogBox(hInstance,MAKEINTRESOURCE(IDD_D3DCONFIG),hwnd,(DLGPROC)AboutProc);
    
    	// MessageBox als Abfrage zum Programm-Ende
    	MessageBox(NULL,
    		       "       Programm Ende      ",
    			   "MessageBox",
    			   MB_OK|MB_ICONEXCLAMATION);
    	return 0;
    }
    

    und hier der Source-Code der resource.h

    // recource.h
    // Microsoft Visual C++ generated include file.
    // Used by test3.rc
    //
    #define IDD_D3DCONFIG                   101
    #define IDC_BUTTON1                     1001
    #define IDC_STATIC3                     102
    
    // Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        102
    #define _APS_NEXT_COMMAND_VALUE         40001
    #define _APS_NEXT_CONTROL_VALUE         1002
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif
    

    IDC_STATIC3 hab ich hier eingetragen... So hieß das STATIC zumindest bei den Properties.
    Ich hab keine Ahnung was die Zahlen hinter den #defines bedeuten, und warum sind nicht alle STATICs darin aufgelistet?

    Ich sag schon mal DANKE...

    Gruß
    moPRox



  • Also es sind nicht alle Statics aufgelistet weil die normale ID eines Statics IDC_STATIC ist... Und das filtert das Programm sozusagen raus, weil Du nicht bei jedem Static (Group Box, Static Text etc.) extra eine ID brauchst. Wenn Du aber die ID auf IDC_STATIC1 abänderst, wird die ID automatisch in die resource.h eingetragen.

    Okay, wieso das mit dem SetDlgItemText nicht geht:

    schau Dir das an:

    case IDOK:
                SetDlgItemText(hDlg,IDC_STATIC3,"TEST-STRING");
                MessageBox(NULL,
                    "Eigentlich Text geändert, dachte ich...",
                    "MessageBox",
                    MB_OK|MB_ICONEXCLAMATION);
            case IDCANCEL:    
                EndDialog(hwnd,LOWORD(wParam));
                return TRUE;
    

    Da ist wohl was falsch. Bei case IDOK: hast Du nach Deinem Code kein "break;" geschrieben. Das heißt, es ist keine Stopstelle definiertworden, wo IDOK eigentlich aufhört. Beim Klick auf IDOK springt er dann in das IDCANCEL rein ... Das ist falsch. A lso einfach so machen:

    case IDOK:
                SetDlgItemText(hDlg,IDC_STATIC3,"TEST-STRING");
                MessageBox(NULL,
                    "Eigentlich Text geändert, dachte ich...",
                    "MessageBox",
                    MB_OK|MB_ICONEXCLAMATION);
                 break;
            case IDCANCEL:    
                EndDialog(hwnd,LOWORD(wParam));
                return TRUE;
    


  • Danke

    Auf das BREAK; hätte ich auch kommen müssen.. ( schäm ).
    Aber das war nicht das Problem... hab grad nochmal nachgeschaut und hab gesehen, dass ich wohl nur den Namen, nicht aber die ID des STATIC geändert habe.

    Gruß
    moPRox



  • Ja, das war dann natürlich ein fataler Fehler, ist mir auch schon passiert 😃


Anmelden zum Antworten