Add popup menu implementation (not displayed yet)

This commit is contained in:
Stanislav N Mikhailov
2025-12-14 22:49:59 +03:00
parent b73ade5da9
commit 5571eea24a
3 changed files with 38 additions and 3 deletions
BIN
View File
Binary file not shown.
+33
View File
@@ -1,4 +1,6 @@
include /masm64/include64/masm64rt.inc include /masm64/include64/masm64rt.inc
include /masm64/include64/user32.inc
includelib /masm64/lib64/user32.lib
;______________________Прототипы__________________________ ;______________________Прототипы__________________________
WinMain proto :HINSTANCE,:HINSTANCE,:LPSTR,:QWORD WinMain proto :HINSTANCE,:HINSTANCE,:LPSTR,:QWORD
@@ -8,6 +10,30 @@ myDraw proto nSegment:DWORD ;принимаю параметр с колличе
.data? .data?
hInstance HINSTANCE ? ; Хэндл нашей пpогpаммы hInstance HINSTANCE ? ; Хэндл нашей пpогpаммы
CommandLine LPSTR ? 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 BITMAPINFOHEADER STRUCT
biSize DWORD ?; biSize DWORD ?;
biWidth LONG ?; biWidth LONG ?;
@@ -32,6 +58,8 @@ BITMAPINFO STRUCT
bmiColors RGBQUAD <> bmiColors RGBQUAD <>
BITMAPINFO ENDS BITMAPINFO ENDS
note NOTIFYICONDATAW <>
hPopupMenu dq ?
;_______________________________________________________ ;_______________________________________________________
.data .data
@@ -42,6 +70,11 @@ IDT_UPDTIMER EQU 111
wc WNDCLASSEX <sizeof WNDCLASSEX,CS_HREDRAW or CS_VREDRAW,WndProc,0,0,?,?,?,COLOR_WINDOW+1,NULL,szClassName,?> wc WNDCLASSEX <sizeof WNDCLASSEX,CS_HREDRAW or CS_VREDRAW,WndProc,0,0,?,?,?,COLOR_WINDOW+1,NULL,szClassName,?>
bmi BITMAPINFO <> bmi BITMAPINFO <>
rc RECT <> rc RECT <>
RestoreString db "&Restore",0
ExitString db "E&xit Program",0
IDI_TRAY equ 0
IDM_RESTORE equ 1000
IDM_EXIT equ 1010
+5 -3
View File
@@ -3,9 +3,6 @@ include template.inc
entry_point proc entry_point proc
invoke GetModuleHandle, NULL ; Взять хэндл пpогpаммы invoke GetModuleHandle, NULL ; Взять хэндл пpогpаммы
mov hInstance,rax ; Под Win32, hmodule==hinstance mov hInstance,eax 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 WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT ; вызвать основную функцию
invoke ExitProcess, rax ; Выйти из пpогpаммы. invoke ExitProcess, rax ; Выйти из пpогpаммы.
; Возвpащаемое значение, помещаемое в eax, беpется из WinMain'а. ; Возвpащаемое значение, помещаемое в eax, беpется из WinMain'а.
@@ -41,9 +38,14 @@ WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hDC:HDC LOCAL hDC:HDC
.if uMsg==WM_DESTROY ; если пользователь закpывает окно .if uMsg==WM_DESTROY ; если пользователь закpывает окно
invoke DestroyMenu,hPopupMenu
invoke SetThreadExecutionState,ES_CONTINUOUS invoke SetThreadExecutionState,ES_CONTINUOUS
invoke PostQuitMessage,NULL ; выходим из пpогpаммы invoke PostQuitMessage,NULL ; выходим из пpогpаммы
.elseif uMsg==WM_CREATE .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 invoke SetThreadExecutionState,ES_CONTINUOUS or ES_SYSTEM_REQUIRED or ES_DISPLAY_REQUIRED
.if rax ==-1 .if rax ==-1