; #########################################################################

;     include files
;     ~~~~~~~~~~~~~
      include \masm32\include\windows.inc
      include \masm32\include\masm32.inc
      include \masm32\include\gdi32.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc

;     libraries
;     ~~~~~~~~~
      includelib \masm32\lib\masm32.lib
      includelib \masm32\lib\gdi32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib

; #########################################################################

        ;=================
        ; Local prototypes
        ;=================
        WndProc          PROTO :DWORD,:DWORD,:DWORD,:DWORD
        WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
        AboutProc	 PROTO :DWORD,:DWORD,:DWORD,:DWORD
        TopXY	 PROTO :DWORD,:DWORD
        
        wsprintfA PROTO C :DWORD,:VARARG
        wsprintf equ <wsprintfA>

      ;=============
      ; Local macros
      ;=============


      m2m MACRO M1, M2
        push M2
        pop  M1
      ENDM

      return MACRO arg
        mov eax, arg
        ret
      ENDM

; ------------------------------------------------------------
; Macro for nesting function calls in other invoke statements
; ------------------------------------------------------------

      FUNC MACRO parameters:VARARG
        invoke parameters
        EXITM <eax>
      ENDM


      DisplayWindow MACRO handl, ShowStyle
        invoke ShowWindow,handl, ShowStyle
        invoke UpdateWindow,handl
      ENDM

    ; --------------------------------------------
    ; equates to use directly in the message loop
    ; --------------------------------------------
        m_hWnd   equ <msg.hwnd>
        m_Msg    equ <msg.message>
        m_wParam equ <msg.wParam>
        m_lParam equ <msg.lParam>

    ; ---------------------------------------------------------------------------
    ; Ставит или снимает отметку с любого кол - ва пунктов меню		;
    ; hMenu - дескриптор меню						;
    ; Ch_Un - состояние пункта меню (отмечен или нет)			;
    ; IDMenu - <1300, 1302, 1304> идентификаторы меню (любое кол - во)	;
    ; ---------------------------------------------------------------------------
    
      CheckMIGroup MACRO hMenu, Ch_Un, IDMenu
      	IRP ID, <IDMenu>
      	  invoke CheckMenuItem, hMenu, ID,Ch_Un or MF_BYCOMMAND
      	ENDM
      ENDM


    .data
        szDisplayName db "WM_ERASEBKGND",0
        DlgAbout db "IDD_DIALOG",0
        szClassName db "CLASS32",0
        About db "Автор программы Чеботарёв Александр Михайлович (Chib777)",13,10
              db " ",13,10                 
              db "chib_odessa@ua.fm",13,10
              db "chib_odessa@mail.ru",13,10
              db " ",13,10              
              db "При обработке сообщения WM_ERASEBKGND вы можете в качестве фона окна ",13,10
              db "установить растровое изображение, а также нарисовать в клиентской",13,10
              db "области окна всё что угодно.",13,10
              db "Как использовать сообщение:",13,10
              db "В wParam содеожиться дескриптор контекста устройства клиентской ",13,10               
              db "области окна.",13,10
              db "Что бы всё работало член структуры WNDCLASSEX - hbrBackground",13,10              
              db "необходимо установить в NULL. С диалоговыми окнами всё проще.",13,10
              db "в них мы класс окна не регистрируем, соответственно и ничего",13,10
              db "не надо устаноавливать в NULL (см. диалоговое окно ABOUT).) ",13,10
              db "Если ваша процедура окна обрабатывает это сообщение то она должна",13,10
              db "вернуть TRUE, а иначе FALSE",13,10
              db " ",13,10
              db "Хочу выразить благодарность всем людям которые имеют отношение",13,10 
              db "к сайту http://www.wasm.ru",13,10              
              db "Особенная благодарность одному из администраторов",13,10 
              db "сайта http://www.wasm.ru Edmondu",13,10              
              db " ",13,10
              db " ",13,10                                          
              db "30//09//2003",0             
                        
    .data?
        hInstance dd ?
        CommandLine dd ?
        hIcon dd ?
        hCursor dd ?
        sWid dd ?
        sHgt dd ?
        hWnd dd ?
        hBrush dd ?
        hBrush1 dd ?
        hBrush2 dd ?
        hBrush3 dd ?
        hBrush4 dd ?
        hBrush5 dd ?
        hBrush6 dd ?
        hBrush7 dd ?
        hBrush8 dd ?
        hBrush9 dd ?
        hBrush10 dd ?        
        hMenu dd ?
        hEdit1 dd ?