Author Topic: What is difference between WM_FINISH WM_DESTROY AND WM_CLOSE  (Read 3770 times)

Don57

  • Guest
What is difference between WM_FINISH WM_DESTROY AND WM_CLOSE
« on: December 07, 2012, 09:16:28 AM »
I have to ReleaseDC and DeleteObject but in what section?



      .ELSEIF uMsg==WM_FINISH
           
          invoke MessageBox, NULL,addr sz_MsgBoxDoneText, addr sz_MsgDoneCaption, MB_OK
          invoke PostMessage,hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL                         
          xor eax,eax                                                                   

      .ELSEIF uMsg==WM_DESTROY

          invoke PostQuitMessage,NULL

      .ELSE

          invoke DefWindowProc,hWnd,uMsg,wParam,lParam      
          ret

      .ENDIF
 
      xor eax,eax                                                             ; clear message

      ret

   WndProc ENDP

dedndave

  • Member
  • *****
  • Posts: 8825
  • Still using Abacus 2.0
    • DednDave
Re: What is difference between WM_FINISH WM_DESTROY AND WM_CLOSE
« Reply #1 on: December 07, 2012, 09:36:28 AM »
WM_FINISH is not a "standard" windows message
you must be looking at Iczelion's tutorial
it is a custom "user defined" message

WM_CLOSE and WM_DESTROY are the ones we usually deal with

if you look at the example code in the other thread, you will see that i clean up the GDI stuff in WM_CLOSE

WM_CLOSE is sent to a window when the user clicks on the X box
if you want to cause a window to close, you can send it a WM_SYSCOMMAND with an SC_CLOSE notification
Code: [Select]
        INVOKE  SendMessage,hwndWindowToClose,WM_SYSCOMMAND,SC_CLOSE,NULLyou might do that if you have an "Exit" command on a menu, for example
if it is handled by the same window, you would use PostMessage, to prevent an infinite loop

WM_CLOSE may also be used to prevent a program from exiting
so - you might get the message and offer an "are you sure" message box
to keep the program running, you return 0 without calling DestroyWindow

if the message is processed by DefWindowProc, it peforms a DestroyWindow
if you process it, you can do the DestroyWindow
during WM_CLOSE is the best time to do clean-up
some clean-up, you might do before DestroyWindow - some after

WM_DESTROY is sent to tell you that the window is about to be destroyed
normally you use it to tell the message loop to terminate the program with PostQuitMessage
the message loop then sees that and GetMessage exits with a 0 instead of a positive non-zero value

Don57

  • Guest
Re: What is difference between WM_FINISH WM_DESTROY AND WM_CLOSE
« Reply #2 on: December 07, 2012, 09:42:14 AM »
Thanks for all the help. :t

dedndave

  • Member
  • *****
  • Posts: 8825
  • Still using Abacus 2.0
    • DednDave
Re: What is difference between WM_FINISH WM_DESTROY AND WM_CLOSE
« Reply #3 on: December 07, 2012, 10:25:45 AM »
i recalled that incorrectly, Don   :redface:

if you want to keep a program from closing, you do not return TRUE for WM_CLOSE
you return 0 - just don't execute the DestroyWindow

i was thinking of WM_CREATE
where, if you return TRUE, the window is not created and an error is returned