tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
NEIN
ANTWORTEN
27
ZUGRIFFE
929
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von silent12 Beitrag anzeigen
    Es wird gar nichts erzeugt (kein Parentwindow -> keine ChildWindows).
    Beim Code fällt mir nichts auf. Wenn es aber fehlschlägt rufe doch anschließend mal die Funktion GetLastError() auf und schaue, welcher Fehlercode dort zurückgegeben wird. Die Beschreibungen findest du hier: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    Zitat Zitat von silent12 Beitrag anzeigen
    Geht es nicht, dass ich beide Childwindows eine WndClassExChild nutzen lasse ?
    Doch das geht, aber dann brauchst du Klasse auch nur ein einziges Mal registrieren, also nur ein Aufruf von InitWndClassEx() für beide Child Windows.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  2. #17
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Ah ok danke. Aber wenn ich GetLastError(); ans Ende der Main-Funktion setze ändert das bei mir irgendwie gar nichts :/.
     

  3. #18
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    GetLastError() gibt einen Zahlenwert zurück, für den du im oben angegeben Link nachschauen kannst, was schiefgegangen ist. Es behebt nicht das Problem, hilft aber bei der Diagnose.
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  4. #19
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Ja das mit dem Zahlenwert habe ich kapiert nur wo wird der Zahlenwert ausgegeben ? weil bei mir ändert sich gar nichts
     

  5. #20
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Der wird gar nicht ausgegeben.
    Mit
    Code cpp:
    1
    
    int abc = GetLastError...
    bekommst du den Wert und kannst ihn selber ausgeben.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #21
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Bis jetzt bin ich zwar noch nicht bei der Text ausgabe aber per:
    Code cpp:
    1
    2
    
    int lastError = GetLastError();
    MessageBox( NULL, lastError ,  "ErrorAusgabe", MB_ICONHAND | MB_OK | MB_DEFBUTTON1 );
    klappt es nicht weil als 2.Parameter ein Text vom Typ LPCSTR oder so stehen müsste.
    Was mach ich alles falsch ?

    Gruß
    silent12
     

  7. #22
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    einen 'int' muss du natürlich erst in einen String umwandeln:
    Code cpp:
    1
    2
    3
    
    char buffer[10];
    itoa(GetLastError(), buffer, 10);
    MessageBox( NULL, buffer ,  "ErrorAusgabe", MB_ICONHAND | MB_OK | MB_DEFBUTTON1 );

    Dir scheinen noch arg viel Grundlagen abzugehen.

    Gruß
    MCoder
    silent12 bedankt sich. 
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  8. #23
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Ja ich habe bis jetzt auch nur einen Online Grundkurs gemacht und beginne gerade mit einem Grundkurs zu WinApi/Win32.
    Ok danke für die vielen Tipps (:.
    Die Meldung bedeutet: Hot key is already registered.
     

  9. #24
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Was ist ein Hotkey in diesem Zusammenhang ? Ich habe ein bisschen rum "gegoogelt" aber nichts gefunden
     

  10. #25
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Welcher Fehlercode wird denn genau zurückgegeben? Und hast du die GetLastError Funktion auch direkt nach der fehlgeschlagenen Funktion aufgerufen? (also im Block Zeile 55?)

    Du rufst die RegisterClassEx doppelt auf - einmal in der InitWndClassEx Funktion und in WinMain. Ist das Absicht?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #26
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    also, ich habe deinen Code gerade mal ausprobiert und ich bekomme via GetLastError():
    Code :
    1
    
    1407 -> ERROR_CANNOT_FIND_WND_CLASS

    Das liegt daran, dass du bei CreateWindowEx() die Variable 'szClassName' übergibst, die allerdings nur einmal mit "Hallo" vorbelegt und dann nie wieder benutzt wird. Bei InitWndClassEx() verwendest du nämlich ganz andere Klassennamen. Diese solltest auch genauso an CreateWindowEx() übergeben.


    Du solltest übrigens auch deinen Code mal aufräumen und überflüssigen und damit fehlerträchtigen Code entfernen, siehe auch die Anmerkung von deepthroat.

    Gruß
    MCoder
    Geändert von MCoder (14.11.11 um 08:56 Uhr)
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  12. #27
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Danke für die Antworten.
    Habe gerade ein Problem wieder mit den ChildWindows. Und zwar habe ich per WS_CLIPSIBLINGS festgelegt, dass wenn ich zwei ChildWindows übereinander bewege die Farben und Texte der ChildWindows sich nicht ineinander "verziehen".
    Das funktioniert zwar, aber ich bekomme immer nur das eine von beiden ChildWindows in den Vordergrund.
    Hier nochmal mein jetziger Code:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    
    // main_cpp //
     
    #include <Windows.h>
    #include <iostream>
     
    int width = 640;
    int height = 420;
     
    LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
    bool InitWndClassEx ( WNDCLASSEX *WndClassEx, HINSTANCE hInstance, const char szClassName[] = "Hallo"); 
    const char szClassName[] =  "Hallo";
          char szTitle[] = "1.Programm   Grafic3 Silent1297 2011 ©";
     
            HWND hWndChild; //Handle to 1.ChildWindow
            HWND hWndChild2; //Handle to 2. ChildWindow
     
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR szCmdLine, int iCmdShow)
     
        {
            WNDCLASSEX WndClassEx;  // legt die Grundeigenschaften für das Fenster fest.
            WNDCLASSEX WndClassExChild; //Grundeigenschaften für ChildWindow
            WNDCLASSEX WndClassExChild2; //Grundeigenschaften für ChildWindow2
            HWND hWnd;      //legt die Eigenschaften des Fensters fest.
            MSG msg;        //darin werden die Daten gespeichert.
            HINSTANCE hChildInst = NULL;
     
     
         
            //          Registrierung      //
     
            InitWndClassEx ( &WndClassEx, hInstance, szClassName);
            InitWndClassEx ( &WndClassExChild, hInstance, "WndClassExChild");
            InitWndClassEx ( &WndClassExChild2, hInstance, "WndClassExChild2");
     
     
            //          Fenster Erstellen          //
     
            hWnd = CreateWindowEx (NULL,    // beeinhaltet die Folgenden Eigenschaften und die Eigenschaften aus WndClassEx
                             szClassName,   //hierüber werden die Eigenschaften aus WndClassEx. eingebunden
                             szTitle,
                            WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, //Fenster (Minimierungsbutton.....
                            300, //Abstand-Oben
                            600, //Abstand-Links
                            width, // Breite
                            height, // Höhe
                            NULL,
                            NULL,
                            hInstance,
                            NULL);      
     
            if ( hWnd == NULL )
                 {MessageBox ( NULL, "Create Window  failed", "Error", MB_OK);
                  return false;
                 }
     
            { 
                int cx = GetSystemMetrics(SM_CXSCREEN); //cx = desktopbreite ermitteln
                int cy = GetSystemMetrics(SM_CYSCREEN);//cx = desktophöhe ermitteln
                
                int px = (cx - width) / 2; //AbstanddesFensters von links errechnen
                int py = (cy - height) / 2; //AbstanddesFensters von oben errechnen
     
                MoveWindow( hWnd, px, py, width, height, true);
            }
     
             ShowWindow( hWnd, iCmdShow);
     
     
                    hWndChild =  CreateWindowEx (WS_EX_CLIENTEDGE, "WndClassExChild",
                             "Child Window silent1297", WS_SYSMENU| WS_CAPTION | WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS, //WS_CLIPSIBLINGS damit Fenster beim Verziehen nicht "verwischt"
                            70, 20, 250, 300, // LinksAbstand, Obenabstand, Breite, Höhe
                            hWnd, NULL, hChildInst, NULL );
     
                    hWndChild2 =  CreateWindowEx (WS_EX_CLIENTEDGE, "WndClassExChild2",
                             "Child Window - 2 silent1297",WS_SYSMENU | WS_CAPTION | WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS, //WS_CLIPSIBLINGS damit Fenster beim Verziehen nicht "verwischt"
                            320, 20, 250, 300,  // LinksAbstand, Obenabstand, Breite, Höhe
                            hWnd, NULL, hChildInst, NULL );
     
     
                    SetClassLong ( hWndChild2, GCL_HBRBACKGROUND, (LONG) GetStockObject (BLACK_BRUSH)); //ändert die Hintergrundfarbe des Fensters dessen HWND (Handle to Window) angegeben ist 
     
            while( GetMessage ( &msg, hWnd, NULL, NULL) > NULL) // -1 = Fehler | 0 // > 0
                {
                    TranslateMessage( &msg ); // wird in Character-Message übersetzt
                    DispatchMessage ( &msg ); // wird verschickt an die Callback Funktion
                };
                // WINDOW-PROCEDUR(Einleitungsteil) -> WNDCLASSEX(Registrierung) -> HWND(Fenstereinstellungenfestlegen) -> MESSAGELOOP(Messages übersetzen und an die CALLBACK-Funktion weiterverschicken)
            
     
            return 0;
        }
    //Variablen zur Textausgabe des ParentWindow
    HDC hDCParent;  // Handle to a Device Context für das ParentWindow
    PAINTSTRUCT psParent; //Paintstruktur für das ParentWindow
    char szTextParent[] = ("Hallo Welt");   // Text der ausgegeben werden soll für das ParentWindow
     
    //Variablen zur Textausgabe des 1.ChildWindow
    HDC hDCChild;   // Handle to a Device Context für das ChildWindow
    PAINTSTRUCT psChild; //Paintstruktur für das ChildWindow
    char szTextChild[] = ("Hallo 1.ChildFenster");  // Text der ausgegeben werden soll für das ChildWindow
     
     
     
     
    LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)        //Gehirn des eigentlichen Windows, Verarbeitung von Messages...
                {
     
                    //Jede Message hat 2 Informationen ( wParam und lParam)
                    switch (msg)
                        {  
                            case WM_PAINT:      //Text ausgeben
                                    
                                hDCParent = BeginPaint (hWnd,&psParent);        //ParentWindow neu gestalten :D
                                        hDCChild = BeginPaint (hWndChild,&psChild);     //ChildWindow neu gestalten :D
     
     
                                        //Settings 1.ChildWindow
                                        SetBkMode (hDCChild, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
                                        SetBkColor( hDCChild, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                        SetTextColor (hDCChild, RGB(0, 0, 0) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                        TextOut ( hDCChild, 50, 100, szTextChild, strlen(szTextChild) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
                                        EndPaint ( hWndChild, &psChild); //beendet das neu gestalten des ChildWindows
     
                                //Settings Parent Window
                                SetBkMode (hDCParent, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
                                SetBkColor( hDCParent, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                SetTextColor (hDCParent, RGB(0, 0, 0) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                TextOut ( hDCParent, 10, 10, szTextParent, strlen(szTextParent) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
                                EndPaint ( hWnd, &psParent); //beendet das neu gestalten des ParentWindows
     
                                break;
     
                            case WM_DESTROY:        //Fenster Ende (Wenn auf das X-geklickt wird
     
                                PostQuitMessage(0);
                                break;
     
                            default:
                                return DefWindowProc ( hWnd, msg, wParam, lParam);
                        }
                }
     
    bool InitWndClassEx ( WNDCLASSEX *WndClassEx , HINSTANCE hInstance, const char *szClassName)     //Funktion mit Defaultwerten für zB ChildWindows
        {
            WndClassEx->cbSize      = sizeof( *WndClassEx);
            WndClassEx->style       = NULL;
            WndClassEx->lpfnWndProc = (WNDPROC)WndProc;  // hWnd -> CreateWindow (szClassName ) -> WndClass.
            WndClassEx->cbClsExtra  = NULL;
            WndClassEx->cbWndExtra  = NULL;
            WndClassEx->hInstance   = hInstance;
            WndClassEx->hIcon      = LoadIcon( NULL, IDI_WARNING); //Icon
            WndClassEx->hCursor    = LoadCursor( NULL,IDC_ARROW); //Cursor
            WndClassEx->hbrBackground = (HBRUSH) GetStockObject ( WHITE_BRUSH) ;    //Fensterfarbe
            WndClassEx->lpszMenuName = NULL;
            WndClassEx->lpszClassName =  szClassName;   // C-String
            WndClassEx->hIconSm      =  LoadIcon (NULL, IDI_APPLICATION);
     
            if ( !RegisterClassEx ( WndClassEx ))
                 {MessageBox ( NULL, "Register Class failed", "Error", MB_OK);
                  return false;
                 }
        }
    Geändert von silent12 (17.11.11 um 14:36 Uhr)
     

  13. #28
    silent12 silent12 ist offline Mitglied Bronze
    Registriert seit
    Sep 2011
    Beiträge
    42
    Ok habe noch einen schwerwiegenden Fehler gefunden, durch den sich auch gleich ein Problem mehr löste. Und zwar habe ich kein eigenes Handle für mein ParentWindow erstellt .
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    
    // main_cpp //
     
    #include <Windows.h>
    #include <iostream>
     
    int width = 640;
    int height = 420;
     
    LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
    bool InitWndClassEx ( WNDCLASSEX *WndClassEx, HINSTANCE hInstance, const char szClassName[] = "Hallo"); 
    const char szClassName[] =  "Hallo";
          char szTitle[] = "1.Programm   Grafic3 Silent1297 2011 ©";
     
            HWND hWndChild; //Handle to 1.ChildWindow
            HWND hWndChild2; //Handle to 2. ChildWindow
            HWND hWndParent;      //legt die Eigenschaften des ParentWindows fest.
     
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR szCmdLine, int iCmdShow)
     
        {
            WNDCLASSEX WndClassEx;  // legt die Grundeigenschaften für das Fenster fest.
            WNDCLASSEX WndClassExChild; //Grundeigenschaften für ChildWindow
            WNDCLASSEX WndClassExChild2; //Grundeigenschaften für ChildWindow2
            MSG msg;        //darin werden die Daten gespeichert.
            HINSTANCE hChildInst = NULL;
     
     
         
            //          Registrierung      //
     
            InitWndClassEx ( &WndClassEx, hInstance, szClassName);
            InitWndClassEx ( &WndClassExChild, hInstance, "WndClassExChild");
            InitWndClassEx ( &WndClassExChild2, hInstance, "WndClassExChild2");
     
     
            //          Fenster Erstellen          //
     
            hWndParent = CreateWindowEx (NULL,    // beeinhaltet die Folgenden Eigenschaften und die Eigenschaften aus WndClassEx
                             szClassName,   //hierüber werden die Eigenschaften aus WndClassEx. eingebunden
                             szTitle,
                            WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, //Fenster (Minimierungsbutton.....
                            300, //Abstand-Oben
                            600, //Abstand-Links
                            width, // Breite
                            height, // Höhe
                            NULL,
                            NULL,
                            hInstance,
                            NULL);      
     
            if ( hWndParent == NULL )
                 {MessageBox ( NULL, "Create Window  failed", "Error", MB_OK);
                  return false;
                 }
     
            { 
                int cx = GetSystemMetrics(SM_CXSCREEN); //cx = desktopbreite ermitteln
                int cy = GetSystemMetrics(SM_CYSCREEN);//cx = desktophöhe ermitteln
                
                int px = (cx - width) / 2; //AbstanddesFensters von links errechnen
                int py = (cy - height) / 2; //AbstanddesFensters von oben errechnen
     
                MoveWindow( hWndParent, px, py, width, height, true);
            }
     
             ShowWindow( hWndParent, iCmdShow);
     
     
                    hWndChild =  CreateWindowEx (WS_EX_CLIENTEDGE, "WndClassExChild",
                             "Child Window silent1297", WS_SYSMENU| WS_CAPTION | WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS, //WS_CLIPSIBLINGS damit Fenster beim Verziehen nicht "verwischt"
                            70, 30, 250, 300, // LinksAbstand, Obenabstand, Breite, Höhe
                            hWndParent, NULL, hChildInst, NULL );
     
                    hWndChild2 =  CreateWindowEx (WS_EX_CLIENTEDGE, "WndClassExChild2",
                             "Child Window - 2 silent1297",WS_SYSMENU | WS_CAPTION | WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS, //WS_CLIPSIBLINGS damit Fenster beim Verziehen nicht "verwischt"
                            320, 30, 250, 300,  // LinksAbstand, Obenabstand, Breite, Höhe
                            hWndParent, NULL, hChildInst, NULL );
     
     
                    SetClassLong ( hWndChild2, GCL_HBRBACKGROUND, (LONG) GetStockObject (BLACK_BRUSH)); //ändert die Hintergrundfarbe des Fensters dessen HWND (Handle to Window) angegeben ist 
                    
     
            while( GetMessage ( &msg, hWndParent, NULL, NULL) > NULL) // -1 = Fehler | 0 // > 0
                {
                    TranslateMessage( &msg ); // wird in Character-Message übersetzt
                    DispatchMessage ( &msg ); // wird verschickt an die Callback Funktion
                };
                // WINDOW-PROCEDUR(Einleitungsteil) -> WNDCLASSEX(Registrierung) -> HWND(Fenstereinstellungenfestlegen) -> MESSAGELOOP(Messages übersetzen und an die CALLBACK-Funktion weiterverschicken)
            
     
            return 0;
        }
    //Variablen zur Textausgabe des ParentWindow
    HDC hDCParent;  // Handle to a Device Context für das ParentWindow
    PAINTSTRUCT psParent; //Paintstruktur für das ParentWindow
    char szTextParent[] = ("Hallo Welt");   // Text der ausgegeben werden soll für das ParentWindow
     
    //Variablen zur Textausgabe des 1.ChildWindow
    HDC hDCChild;   // Handle to a Device Context für das ChildWindow
    PAINTSTRUCT psChild; //Paintstruktur für das ChildWindow
    char szTextChild[] = ("Hallo 1.ChildFenster");  // Text der ausgegeben werden soll für das ChildWindow
     
    //Variablen zur Textausgabe des 2.ChildWindow
    HDC hDCChild2;  // Handle to a Device Context für das ChildWindow
    PAINTSTRUCT psChild2; //Paintstruktur für das ChildWindow
    char szTextChild2[] = ("Hallo 2.ChildFenster"); // Text der ausgegeben werden soll für das ChildWindow
     
     
     
     
    LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)        //Gehirn des eigentlichen Windows, Verarbeitung von Messages...
                {
     
                    //Jede Message hat 2 Informationen ( wParam und lParam)
                    switch (msg)
                        {  
                            case WM_PAINT:      //Text ausgeben
                                    
                                hDCParent = BeginPaint (hWnd,&psParent);        //ParentWindow neu gestalten :D
                                        hDCChild = BeginPaint (hWndChild,&psChild);     //ChildWindow neu gestalten :D
                                                hDCChild2 = BeginPaint (hWndChild2, &psChild2);
                                                
                                                        //Settings 2.ChildWindow
                                                SetBkMode (hDCChild2, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
                                                SetBkColor( hDCChild2, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                                SetTextColor (hDCChild2, RGB(255, 255, 255) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                                TextOut ( hDCChild2, 50, 100, szTextChild2, strlen(szTextChild2) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
                                                EndPaint ( hWndChild2, &psChild2); //beendet das neu gestalten des ChildWindows2
     
     
                                        //Settings 1.ChildWindow
                                        SetBkMode (hDCChild, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
                                        SetBkColor( hDCChild, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                        SetTextColor (hDCChild, RGB(0, 0, 0) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                        TextOut ( hDCChild, 50, 100, szTextChild, strlen(szTextChild) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
                                        EndPaint ( hWndChild, &psChild); //beendet das neu gestalten des ChildWindows
     
                                //Settings Parent Window
                                SetBkMode (hDCParent, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
                                SetBkColor( hDCParent, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                SetTextColor (hDCParent, RGB(0, 0, 0) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
                                TextOut ( hDCParent, 10, 10, szTextParent, strlen(szTextParent) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
                                EndPaint ( hWnd, &psParent); //beendet das neu gestalten des ParentWindows
     
                                break;
     
                            case WM_DESTROY:        //Fenster Ende (Wenn auf das X-geklickt wird
     
                                if(hWnd == hWndParent)
                                    {
                                PostQuitMessage(0);
                                    }
     
                                break;
     
                            default:
                                 return DefWindowProc ( hWnd, msg, wParam, lParam);
                                  
                       }
                    return 0;
                }
     
    bool InitWndClassEx ( WNDCLASSEX *WndClassEx , HINSTANCE hInstance, const char *szClassName)     //Funktion mit Defaultwerten für zB ChildWindows
        {
            WndClassEx->cbSize      = sizeof( *WndClassEx);
            WndClassEx->style       = NULL;
            WndClassEx->lpfnWndProc = (WNDPROC)WndProc;  // hWnd -> CreateWindow (szClassName ) -> WndClass.
            WndClassEx->cbClsExtra  = NULL;
            WndClassEx->cbWndExtra  = NULL;
            WndClassEx->hInstance   = hInstance;
            WndClassEx->hIcon      = LoadIcon( NULL, IDI_WARNING); //Icon
            WndClassEx->hCursor    = LoadCursor( NULL,IDC_ARROW); //Cursor
            WndClassEx->hbrBackground = (HBRUSH) GetStockObject ( WHITE_BRUSH) ;    //Fensterfarbe
            WndClassEx->lpszMenuName = NULL;
            WndClassEx->lpszClassName =  szClassName;   // C-String
            WndClassEx->hIconSm      =  LoadIcon (NULL, IDI_APPLICATION);
     
            if ( !RegisterClassEx ( WndClassEx ))
                 {MessageBox ( NULL, "Register Class failed", "Error", MB_OK);
                  return false;
                 }
            
        }
    Trotzdem habe ich immer noch das Problem, dass immer eins meiner ChildWindows im Vordergrund bleibt egal welches ChildWindow gerade aktiv ist.
     

Ähnliche Themen

  1. ChildWindow im ChildWindow
    Von Blackhawk50000 im Forum .NET WPF & Silverlight
    Antworten: 4
    Letzter Beitrag: 31.08.11, 20:49
  2. C++ ChildWindow Problem
    Von Binär10010111 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 01.03.08, 11:45
  3. ATL Childwindow -> Vollbildmodus
    Von Shadow im Forum VisualStudio & MFC
    Antworten: 4
    Letzter Beitrag: 25.04.06, 11:18
  4. Titelleiste von ChildWindow
    Von SeeSharpNewBee im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 01.08.05, 13:53
  5. [MDI] schnelles Zeichnen in ChildWindow
    Von basd im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 17.02.04, 23:31