Threads



  • ich weiss zwar nicht woran es liegt, aber du bis doch verrückt. deine schleife zieht total rein!!! mach das nich so...



  • soll ja nur zur Übung sein 🙂



  • Hallo,

    jetzt habe ich in den Thread das eingefügt.

    DWORD WINAPI MainThread(LPVOID param)
    .
    .
    .
        MessageBox(hwnd,"Kein Strafe","Nur zur Übung",MB_OK);
    

    Nach dem die Message-Box gezeigt wird und der Thread beginnt funktioniert auch meine Nachrichtenschleife 😕

    Kann mir jemand noch sagen warum mein Programm bei benutzen der Funktionstasten abstürzt?

    Bin noch Anfänger und suche auch noch nach Quellcodes im Netzt. Wenn einer eine gute Seite mit WinApi - Code kennt bitte posten. Danke 🙂



  • Ich war nicht untätig. Ich komme trotzdem nicht weiter. Jetzt ist es schon nach drei Uhr.

    Hier noch ein paar Infos. Wenn ich den Thread starte reagiert das Programm nicht mehr auf ESC. Die Nachricht das ESC gedrückt wurde wird jedoch empfangen. Es tut sich aber nichts.
    Klicke ich auf ein anderes Fenster und wieder auf meine Anwendung kann ich das Programm wieder mit ESC beenden.

    Ich komme mit meinem Latein nicht mehr weiter. Ich hoffe ihr wisst woran es liegen könnte.



  • 1.) du musst glaub ich bRunning noch global machen
    2.) Wenn du eine Massage abfängst und bearbeitest solltest du return 0 aufrufen, ansonsten DefWindowProc
    3.) SendMessage(hwnd,WM_DESTROY,NULL,NULL); zerstört in diesem Fall den Button und nicht das Hauptfenster, oder?
    4.) Was ist WriteText?



  • 1. bRunning ist global
    2. Hab ich jetzt gemacht
    3. hwnd gehört zum Hauptfenster.
    4.

    void WriteText(int x, int y, char* text,...)
    {
        /* - - - - - - - - - - - - - - - - - - - -
        Textausgabe
        - - - - - - - - - - - - - - - - - - - - */
        HDC hdc=NULL; 
        char textBuffer[512];   
        va_list args;
        va_start(args, text);
        vsprintf(textBuffer, text, args);
        va_end(args);   
        hdc=GetDC (hwnd);
        SetTextColor(hdc,RGB(0,0,0));
        SetBkMode(hdc,TRANSPARENT);
        TextOut(hdc,x,y,textBuffer,strlen(textBuffer));
        ReleaseDC (hwnd, hdc);
    }
    

    Immer noch das gleiche Problem. Die ESC Taste und jede andere Taste wird erst verarbeitet. Wenn ich auf ein anderes Fenster klicke danach wieder auf meine Anwendung 😕



  • Noch ne Idee:
    Du startest doch mit einem Klick auf den Button den Thread -> der Button erhält den Focus
    Deshalb werden natürlich auch alle Tastendrücke an den Button weitergeleitet
    Nach dem Wechseln zu einer anderen Anwendung und wieder zurück hat wieder das Fenster den Fokus

    War nur so ne Idee. Also: versuch mal mit SetFocus nach dem Klick auf den Button den Fokus wieder auf das Hauptfenster zurückzusetzen



  • Danke 🙂

    Jetzt geht es.

    case WM_COMMAND:
            {
                switch(LOWORD(wparam))
                {
                case 1:
                    hThread=CreateThread(NULL,0,MainThread,
                                        (LPVOID)hwnd,0
                                        ,&dwThread);
                    break;
                case 2:
                    SendMessage(hwnd,WM_DESTROY,NULL,NULL);
                    break;
                }
                SetFocus(hwnd); //Fokus auf das Hauptfenster!
            }break;
    

    Bin jetzt gespannt was noch kommt 😃



  • Ach noch was. Ich habe in keiner Dokumentation gesehen das man nach WM_COMMAND den Focus auf das Hauptfenster setzen muss. Ist das OK?



  • Du solltest eben, wie schon gesagt ein return 0 ans Ende von WM_COMMAND setzen - das macht dann vielleicht auch genau das (weiß es aber net genau) 😉


Anmelden zum Antworten