das fenster wird nicht geschlossen.



  • bei winapi.net wird die wndclassex benutzt diese klasse steht mir aber leider nicht bei der programmierung für win-ce zur verfügung.



  • dann nimmst du eben die normale WNDCLASS struktur. der einzige unterschied ist, das man noch ein kleines icon setzen kann. hat doch mit dem problem nichts zu tun.



  • es geht immer noch nicht.
    kann vieleicht einer mal schauen warum das prog weiterläuft?
    das fenster wird ja geschlossen darüber bin ich ja froh aber das prog läuft leider im hintergrund weiter.

    gibt es noch andere möglichkeiten ein winprog zu beenden?



  • zeig jetzt nochmal den ganzen code wie du ihn jetzt hast! dann werden wir dir helfen



  • ich hab nochmal etwas rumexperimentiert

    #include <windows.h>

    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPTSTR szCmdLine, int iCmdShow)
    {
    HWND hwnd ;
    MSG msg ;
    WNDCLASS wndclass;

    memset(&wndclass,0,sizeof(wndclass));

    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = (WNDPROC)WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hIcon = NULL;
    wndclass.hInstance = hInstance;
    wndclass.hCursor = NULL;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = L"myapp";

    RegisterClass(&wndclass);

    hwnd = CreateWindow (L"myapp",L"Fenstername", WS_VISIBLE,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL) ;

    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0))
    {
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
    }
    return msg.wParam ;
    }

    LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    switch (iMsg)
    {
    case WM_CREATE :

    return 0 ;

    case WM_PAINT :

    return 0 ;

    case WM_DESTROY:
    DestroyWindow(hwnd);
    PostQuitMessage (0);
    return 0 ;
    }

    return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }

    ich glaube, das das "X" oben rechts das fenster zwar schließt aber weder eine WM_close noch eine WM_QUIT message sendet.
    das heist PostQuitMessage geht aber der auslöser fehlt anscheinend



  • mach auf jeden fall den code für WM_PAINT weg, wenn du nichts zeichnest. das erzeugt 100 % auslastung.

    aber die anwendung lässt sich doch erfolgreich beenden mit ALT + F4. Das X wird ja garnicht angezeigt



  • nein ich schreibe für windows-ce 🙂
    das ist ja das prob und da gibts kein alt-f4.



  • achso.

    und wie soll das programm nun beendet werden? setz doch noch den fensterstyle WS_OVERLAPPEDWINDOW damit das fenster auch die buttons in der titelleiste hat (x).



  • In WM_PAINT sollte NIE nur return 0; stehen! Entweder gar nicht abfangen oder BeginPaint & EndPaint darin aufrufen.
    Wenn überhaupt, wird DestroyWindow in WM_CLOSE aufgerufen (kannst du aber auch weglassen) und in WM_DESTROY wird nur PostQuitMessage aufgerufen (KEIN DestroyWindow) (und halt am Ende return 0;)



  • Original erstellt von <noname01>:
    ich glaube, das das "X" oben rechts das fenster zwar schließt aber weder eine WM_close noch eine WM_QUIT message sendet.

    it's not a bug, it's a feature 😃

    wenn ich mich so ein halbes jahr zurück erinnere, da hab ich auch mal ein paar progs für pocket pcs geschrieben...hatte genau den gleichen effekt. die anwendung bleibt im hintergrund aktiv wenn man sie über dieses 'X' das man ja nicht selbst gemacht hat schliesst. bei mir war das kein problem, weil ich eh nen soft reset gemacht hab...
    *grübel*
    man hat doch eh diesen anwendungsmanager oder so... 😕

    ich weis leider auch nicht mehr so...kann auch nix testen...



  • Hmm, vielleicht setzt du nen Punkt wo du hinklickst der dann PostQuitMessage(0) aufruft?! .. oder wenn eine bestimmte Taste oder Zeichenkette eingegeben wird?!

    <- nur Vorschläge .. weiss nicht inwieweit man sowas auf Win-CE realisieren kann (ich weiss noch nicht mal was Win-CE ist aber egal ;))!

    Mfg 🙂



  • naja windows-ce ist das betriebssystem für die PDA (das sind diese kleinen taschencomputer mit touchdisplay und nem stift).

    gut zu wissen ist erstmal,
    das es sich um keinen bug von meiner seite her handelt.

    schlecht ist allerdings,
    das ich immer noch nicht die message abfangen kann die dieses "X" sendet wenn es gedrückt wird.

    denn dann könnte man ja an der stelle einhaken und PostQuitMessage senden.

    nein es sollte schon über dieses "X" geschlossen werden oder jemand verät mir wie ich eine fullschreen-anwendung für win-ce zaubere.

    und nein overlappedwindow ist nicht win-ce kompatibel



  • ist das mit dem 'X' nicht bei allen anwendungen so gewesen? wo ist denn das problem, dass du sie unbedingt schliessen willst wenn mann das 'X' drückt... 😕



  • wie soll es sonst meinem anwender möglich sein das prog zu beenden?
    weiterhin ...
    was passiert wenn der anwender ausversehen mal auf des "X" drückt?
    das fenster verschwindet auf nimmer wiedersehen und die anwendung läuft trotzdem weiter. (irgendwo etwas bescheiden oder ? 🙂 )



  • ich hab immer ne toolbar mit nem exit und dann DestroyWindow(hWnd); gemacht.
    und beim programm aufruf

    CreateMutex (NULL, true, TEXT("bla"));
    if (GetLastError() == ERROR_ALREADY_EXISTS){
            HWND tHwnd;
            tHwnd = FindWindow(NULL, TEXT("bla"));
            SetForegroundWindow(tHwnd);
            return 0;
    }
    

    hat für meine zwecke gereicht und wie gesagt der 'anwendungsmanager' 🙂



  • das kann ja wohl kein bug von windows ce sein. das hätte microsoft sicherlich selbst bemerkt. passiert das bei anderen anwendungen (die nicht von dir sind) auch?



  • nun gut so geht es auch aber ich wollte es eigentlich so richtig elegant wie die anderen programme machen.

    ja andere programme schließen sich vollständig wenn ich des "X" drücke.



  • sorry da kann ich dir mit meinen drei wochen ce in der vergangenheit nicht weiterhelfen...tät mich jetzt aber wirklich auch interessieren wie man das 'X' dazu bringt nicht nur zu minimieren 😕 😞



  • kriegt man da kein WM_CLOSE ?



  • *nachgeschaut* also bei mir wars im code und ich meine es ging nicht, aber wie gesagt...kein pda daheim und keine erfahrung mit win ce 😃


Anmelden zum Antworten