Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   WM_DESTROY wird nicht ausgelößt (https://www.delphipraxis.net/129355-wm_destroy-wird-nicht-ausgeloesst.html)

EWeiss 17. Feb 2009 20:07


WM_DESTROY wird nicht ausgelößt
 
Warum wird bei IDM_EXIT oder beim klick auf den X-Button kein WM_DESTROY ausgelößt?

Code:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   int wmId, wmEvent;
   PAINTSTRUCT ps;
   HDC hdc;
    BASSVIS_KIND_T pluginKind = lastVisParam.Kind;

   switch (message)
   {
   case WM_COMMAND:
      wmId   = LOWORD(wParam);
      wmEvent = HIWORD(wParam);
      // Parse the menu selections:
      switch (wmId)
      {
      case IDM_ABOUT:
         DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
         break;
      case IDM_EXIT:
         DestroyWindow(hWnd);
         break;
      default:
         return DefWindowProc(hWnd, message, wParam, lParam);
      }
      break;
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      // TODO: Add any drawing code here...
      EndPaint(hWnd, &ps);
      break;
    case WM_SIZE:

      switch ((pluginKind))
      {
      case BASSVISKIND_WINAMP:
        myVisParamVisHandle.VisHandle = (HVIS)hWnd;
        myVisParamVisHandle.Kind = BASSVISKIND_WINAMP;
        if (lastVisParam.VisHandle != 0)
          BASSVIS_Resize(&myVisParamVisHandle, 0, 0, LOWORD(lParam), HIWORD(lParam));
        break;

      case BASSVISKIND_WMP:
     case BASSVISKIND_SONIQUE:
        if (lastVisParam.VisHandle != 0)
          BASSVIS_Resize(&lastVisParam, 0, 0, LOWORD(lParam), HIWORD(lParam));
        break;
      }

        break;
   case WM_DESTROY:
      BASSVIS_Quit(&lastVisParam);
        BASS_Free();

        PostQuitMessage(0);
       break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
EDIT:
Hat sich erledigt.

gruss Emil

Luckie 18. Feb 2009 09:29

Re: WM_DESTROY wird nicht ausgelößt
 
Zitat:

Zitat von EWeiss
Warum wird bei IDM_EXIT oder beim klick auf den X-Button kein WM_DESTROY ausgelößt?

EDIT:
Hat sich erledigt.

Und wo war jetzt der Fehler?

EWeiss 18. Feb 2009 12:17

Re: WM_DESTROY wird nicht ausgelößt
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von EWeiss
Warum wird bei IDM_EXIT oder beim klick auf den X-Button kein WM_DESTROY ausgelößt?

EDIT:
Hat sich erledigt.

Und wo war jetzt der Fehler?

Denke mir das hast du selbst schon bemerkt oder ?
WM_CLOSE :)
Zumindest wenn ich den XButton klicke.
DestroyWindow(hWnd); geht nicht.. liegt daran das zu diesen zeitpunkt die WMPVis noch aktiv ist.
Solange wie ich kein BassVis_Quit sende bleibt das Programm im speicher.
Sende ich es aus dem Menu heraus wird dieses nicht mher korrekt gezeichnet.
---------------
Aber nebenbei eine andere Frage gehört zum gleichen Thema
Warum wird in C++ der Speicher nicht so freigegeben wie in Delphi ?
Nach jedem start (SoniqueVis) wird die DLL geschlossen
FreeMem ausgefürt und alle anderen relativen Dinge freigegeben.

Aber anscheinend soll das unter C++ nicht funktionieren (Delphi geht es)
Meine Antwort Mail mit sehr schlechten Englisch...

Zitat:

Hi

I do this
when you call BASSVIS_Free
is a valid handle exist
then i give the Memory free.

you call many BASSVIS_Free after one call
then nothing work .. a valid Handle no exist anymore.
you understand ?
-------------------------------------
if (not S_ValidHandle(handle)) then
begin
BassFuncs^.SetError(BASS_ERROR_HANDLE);
Exit;
end;
-------------------------------------
is a valid handle exist
1. DeInit the Pointer of the DLL if version more or self as 1.
2. remove BMP
3. remove DC
4. FreeLibrary
5. FreeMem.

now tell me what i can do other ?

greets Emil
gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz