diff --git a/Mandelbrot.exe b/Mandelbrot.exe index 8f57733..cb6d7d6 100644 Binary files a/Mandelbrot.exe and b/Mandelbrot.exe differ diff --git a/include/template.inc b/include/template.inc index 2b54ba4..46f9179 100644 --- a/include/template.inc +++ b/include/template.inc @@ -1,4 +1,6 @@ include /masm64/include64/masm64rt.inc +include /masm64/include64/user32.inc +includelib /masm64/lib64/user32.lib ;______________________Прототипы__________________________ WinMain proto :HINSTANCE,:HINSTANCE,:LPSTR,:QWORD @@ -8,6 +10,30 @@ myDraw proto nSegment:DWORD ;принимаю параметр с колличе .data? hInstance HINSTANCE ? ; Хэндл нашей пpогpаммы CommandLine LPSTR ? + + +NOTIFYICONDATAW STRUCT + cbSize DWORD ? + hwnd DWORD ? + uID DWORD ? + uFlags DWORD ? + uCallbackMessage DWORD ? + hIcon DWORD ? + szTip WORD 64 dup (?) + WORD 64 dup (?) + dwState DWORD ? + dwStateMask DWORD ? + szInfo WORD 256 dup(?) + union DUMMYUNIONNAME + uTimeout DWORD ? + uVersion DWORD ? + ends + szInfoTitle WORD 64 dup(?) + dwInfoFlags DWORD ? + guidItem GUID <> + hBalloonIcon DWORD ? +NOTIFYICONDATAW ENDS + BITMAPINFOHEADER STRUCT biSize DWORD ?; biWidth LONG ?; @@ -32,6 +58,8 @@ BITMAPINFO STRUCT bmiColors RGBQUAD <> BITMAPINFO ENDS +note NOTIFYICONDATAW <> +hPopupMenu dq ? ;_______________________________________________________ .data @@ -42,6 +70,11 @@ IDT_UPDTIMER EQU 111 wc WNDCLASSEX bmi BITMAPINFO <> rc RECT <> +RestoreString db "&Restore",0 +ExitString db "E&xit Program",0 +IDI_TRAY equ 0 +IDM_RESTORE equ 1000 +IDM_EXIT equ 1010 diff --git a/src/Mandelbrot.asm b/src/Mandelbrot.asm index 5bdfde6..5417aa5 100644 --- a/src/Mandelbrot.asm +++ b/src/Mandelbrot.asm @@ -3,9 +3,6 @@ include template.inc entry_point proc invoke GetModuleHandle, NULL ; Взять хэндл пpогpаммы mov hInstance,rax ; Под Win32, hmodule==hinstance mov hInstance,eax - invoke GetCommandLine ; Взять командную стpоку. Вы не обязаны - ;вызывать эту функцию ЕСЛИ ваша пpогpамма не обpабатывает командную стpоку. - mov CommandLine,rax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT ; вызвать основную функцию invoke ExitProcess, rax ; Выйти из пpогpаммы. ; Возвpащаемое значение, помещаемое в eax, беpется из WinMain'а. @@ -41,9 +38,14 @@ WinMain endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hDC:HDC .if uMsg==WM_DESTROY ; если пользователь закpывает окно + invoke DestroyMenu,hPopupMenu invoke SetThreadExecutionState,ES_CONTINUOUS invoke PostQuitMessage,NULL ; выходим из пpогpаммы .elseif uMsg==WM_CREATE + invoke CreatePopupMenu + mov hPopupMenu,rax ;Создаём pop-up меню для взаимодействия через трей + invoke AppendMenuA,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString + invoke AppendMenuA,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString ;Запрещаем переход в сон и отключение дисплея invoke SetThreadExecutionState,ES_CONTINUOUS or ES_SYSTEM_REQUIRED or ES_DISPLAY_REQUIRED .if rax ==-1