win32匯編環境,對話框程序中創建托盤示例一

;運行效果

;win32匯編環境,對話框程序中創建托盤示例一
;托盤,就是電腦桌面右下角那個角落里的圖標,這里展示基本的應用方法。
;直接抄進RadAsm可編譯運行。重要部分加備注。
;下面為asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386?
.model flat,stdcall?
option casemap:none?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定義
include ? ?windows.inc?
include ? ?user32.inc?
include ? ?kernel32.inc
include ? ?shell32.inc ? ? ;添加必需的頭文件

includelib user32.lib?
includelib kernel32.lib
includelib shell32.lib ? ? ;添加必需的庫文件?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 自定義函數聲明
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD ? ;對話框窗口函數
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Equ 等值定義

MAINDIALOG ? ? ?equ 1
ICO_MAIN ? ? ? ?equ 1000 ? ? ? ? ? ? ? ? ? ? ? ? ?;圖標 ?
WM_SHELLNOTIFY ?equ WM_USER + 9 ? ? ? ? ? ? ? ? ? ;自定義私人消息,用來處理托盤圖標方面的反應
IDI_TRAY ? ? ? ?equ 2
IDM_RESTORE ? ? equ 100
IDM_EXIT ? ? ? ?equ 101
; 數據段
.data?
szAppName ? ? ? db "我在這里",0 ? ? ? ? ? ? ? ? ?;當鼠標在其上面時,顯示的提示
szRestoreString db "恢復窗口",0
szExitString ? ?db "退出程序",0
.data??
hInstance ?HINSTANCE ? ??
Snote NOTIFYICONDATA ? <> ? ? ? ? ? ? ? ? ? ? ? ?;定義包含系統需要在通知區域中顯示通知的信息的結構
hPopupMenu dd ? ? ? ? ??
.const?

; 代碼段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code?
start: ? ??
? ? ? ? invoke GetModuleHandle, NULL ? ??
? ? ? ? mov ? ?hInstance,eax ? ??
? ? ? ? invoke DialogBoxParam, hInstance,MAINDIALOG,NULL, addr DlgProc, NULL ? ??
? ? ? ? invoke ExitProcess,eax?
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ?
? ? ? ? LOCAL pt:POINT
? ? ? ?
? ? ? ? .if uMsg == WM_INITDIALOG ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? invoke ? ?LoadIcon,hInstance,ICO_MAIN ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? invoke ? ?SendMessage,hWnd,WM_SETICON,ICON_BIG,eax ?
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? invoke CreatePopupMenu ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;創建彈出式菜單
? ? ? ? ? ? ? ? ? ? ? ? mov hPopupMenu,eax
? ? ? ? ? ? ? ? ? ? ? ? invoke AppendMenu,hPopupMenu,MF_STRING,IDM_RESTORE,addr szRestoreString ?;給創建的彈出式菜單增加項目
? ? ? ? ? ? ? ? ? ? ? ? invoke AppendMenu,hPopupMenu,MF_STRING,IDM_EXIT,addr szExitString ?
? ? ? ? .elseif uMsg == WM_SIZE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?;WM_SIZE消息是當窗口大小或位置發生變化時捕獲的消息
? ? ? ? ? ? ? ? .if wParam == SIZE_MINIMIZED ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;當窗口最小化時,則
? ? ? ? ? ? ? ? ? ? ? ? mov Snote.cbSize,sizeof NOTIFYICONDATA ? ? ? ? ? ;NOTIFYICONDATA此結構的大小
? ? ? ? ? ? ? ? ? ? ? ? push hWnd
? ? ? ? ? ? ? ? ? ? ? ? pop Snote.hwnd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;把相關聯的主窗口句柄給這個結構變量
? ? ? ? ? ? ? ? ? ? ? ? mov Snote.uID,IDI_TRAY ? ? ? ? ? ? ? ? ? ? ? ? ? ;任務欄圖標的應用程序定義標識符,就是其ID,這個用來區分你點了哪個不同的托盤圖標
? ? ? ? ? ? ? ? ? ? ? ? mov Snote.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP ? ?;指出在這個NOTIFYICONDATA結構中,哪些成員有效。這里指uCallbackMessage成員,hIcon成員,szTip成員有效
? ? ? ? ? ? ? ? ? ? ? ? mov Snote.uCallbackMessage,WM_SHELLNOTIFY ? ? ? ?;告訴NOTIFYICONDATA結構,當有消息在系統圖標時,去找 WM_SHELLNOTIFY 這個私人消息處理
? ? ? ? ? ? ? ? ? ? ? ? invoke LoadIcon,hInstance,ICO_MAIN ? ? ? ? ? ? ? ;加載圖標
? ? ? ? ? ? ? ? ? ? ? ? mov Snote.hIcon,eax ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?;把圖標給這個NOTIFYICONDATA結構
? ? ? ? ? ? ? ? ? ? ? ? invoke lstrcpy,addr Snote.szTip,addr szAppName ? ;當鼠標停留在托盤圖標上面時,顯示的字符串
? ? ? ? ? ? ? ? ? ? ? ? invoke ShowWindow,hWnd,SW_HIDE ? ? ? ? ? ? ? ? ? ;把主窗口隱藏
? ? ? ? ? ? ? ? ? ? ? ? invoke Shell_NotifyIcon,NIM_ADD,addr Snote ? ? ? ;調用Shell_NotifyIcon函數,把前面塞滿內容的NOTIFYICONDATA結構當作參數給它.并告訴電腦,將圖標添加消息發送到右下角的任務欄的狀態區域
? ? ? ? ? ? ? ? .endif ?
? ? ? ? .elseif uMsg == WM_SHELLNOTIFY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;處理自定義消息
? ? ? ? ? ? ? ? .if wParam == IDI_TRAY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;如果是這個程序的托盤圖標,則
? ? ? ? ? ? ? ? ? ? ? ? .if lParam == WM_RBUTTONDOWN ? ? ? ? ? ? ? ? ? ? ;如果鼠標單擊右鍵,則
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke GetCursorPos,addr pt ? ? ? ? ? ? ?;得到當前鼠標的坐標并將X值及Y值給坐標結構 pt
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke SetForegroundWindow,hWnd ? ? ? ? ?;將創建指定窗口的線程引入前臺并激活窗口
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke TrackPopupMenu,hPopupMenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL ? ?;在鼠標所點的位置顯示所創建的菜單,并跟蹤菜單上項的選擇
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke PostMessage,hWnd,WM_NULL,0,0 ? ? ?;發送空消息給主窗口
? ? ? ? ? ? ? ? ? ? ? ? .elseif lParam == WM_LBUTTONDBLCLK ? ? ? ? ? ? ? ;如果鼠標左鍵雙擊時,則
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke SendMessage,hWnd,WM_COMMAND,IDM_RESTORE,0 ? ?;發送WM_COMMAND消息,即后面的命令消息給主窗口,其wParam值是IDM_RESTORE,其lParam值是0
? ? ? ? ? ? ? ? ? ? ? ? .endif
? ? ? ? ? ? ? ? .endif ? ? ? ??
? ? ? ? .elseif uMsg == WM_COMMAND
? ? ? ? ? ? ? ? .if lParam == 0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?;選擇菜單時
? ? ? ? ? ? ? ? ? ? ? ? invoke Shell_NotifyIcon,NIM_DELETE,addr Snote ? ?;刪除圖標
? ? ? ? ? ? ? ? ? ? ? ? mov eax,wParam
? ? ? ? ? ? ? ? ? ? ? ? .if ax == IDM_RESTORE ? ? ? ? ? ? ? ? ? ? ? ? ? ?;如果是恢復主窗口,則恢復
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke ShowWindow,hWnd,SW_RESTORE
? ? ? ? ? ? ? ? ? ? ? ? .else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? invoke DestroyWindow,hWnd
? ? ? ? ? ? ? ? ? ? ? ? .endif
? ? ? ? ? ? ? ? .endif ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? .elseif uMsg == WM_CLOSE ??
? ? ? ? ? ? ? ? invoke DestroyMenu,hPopupMenu ? ? ? ? ? ? ? ? ? ? ? ? ? ?;退出時清除創建的菜單 ? ? ? ? ??
? ? ? ? ? ? ? ? invoke EndDialog, hWnd,NULL ? ? ? ??
? ? ? ? .else ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? mov eax,FALSE ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ret ? ? ? ? ? ? ? ??
? ? ? ? .endif ? ? ? ? ? ? ? ??
? ? ? ? mov eax,TRUE ? ? ? ??
? ? ? ? ret?
DlgProc endp?

end start?

;下面為rc文件內容
#include "resource.h" ? ? ? ? ? ? ?//提示缺少該文件,可以在資源里下載

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ? ?MAINDIALOG ? ? ?1
#define ? ?ICO_MAIN ? ? ? ?1000 ? ?//圖標 ?

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ? ?ICON ? ? ? ?"Main.ico"

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//定義對話框
MAINDIALOG DIALOG 10, 10, 205, 60?
STYLE ?DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK?
CAPTION "對話框程序模版"
FONT 12, "方正姚體"
BEGIN
? ? ?CONTROL "點擊最化小按鈕則會縮為右下角的托盤", -1, "Static", WS_CHILD | WS_VISIBLE, 30, 20, 200, 10
END?

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73345.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ansible相關工具:ansible-doc、ansible

文章目錄 管理方式相關工具ansible-doc命令用法案例 ansibleansible主配置文件日志文件主機清單 ansible命令基本格式&#xff1a;選項說明&#xff1a;ansible的Host-pattern或關系邏輯與邏輯非正則表達式 ansible命令執行過程ansible 的執行狀態 管理方式 利用ansible實現管…

LeetCode 熱題 100_前 K 個高頻元素(73_347_中等_C++)(堆)(哈希表+排序;哈希表+優先隊列(小根堆))

LeetCode 熱題 100_前 K 個高頻元素&#xff08;73_347&#xff09; 題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;哈希表排序&#xff09;&#xff1a;思路二&#xff08;哈希表優先隊列&#xff08;小根堆&#xff0…

使用Python在Word中生成多種不同類型的圖表

目錄 工具與環境配置 在 Word 中創建圖表的步驟 在Word中創建柱形圖 在Word中創建條形圖 在Word中創建折線圖 在Word中創建餅圖 在Word中創建散點圖 在Word中創建氣泡圖 在 Word 文檔中插入圖表不僅能更直觀地呈現數據&#xff0c;還能提升文檔的可讀性和專業性。常見的…

項目-個人博客測試報告

目錄 一、項目背景 二、項目功能 三、測試計劃 &#xff08;1&#xff09;功能測試 &#xff08;2&#xff09;自動化測試 &#xff08;3&#xff09;性能測試 一、項目背景 1、個人博客系統是一個操作簡單的基于Spring前后端分離的項目&#xff0c;同時使用MySQL數據庫來進…

前端npm包- CropperJS

文章目錄 一、CropperJS**核心特性****官網與文檔****安裝與使用**1. **通過 npm/yarn/pnpm 安裝**2. **HTML 結構**3. **引入 CSS 和 JS**4. **初始化裁剪器** **相關插件/替代方案****適用場景****注意事項** 總結 一、CropperJS cropperjs 是一個輕量級、功能強大的 圖片裁…

楊輝三角形(信息學奧賽一本通-2043)

【題目描述】 例5.11 打印楊輝三角形的前n(2≤n≤20)行。楊輝三角形如下圖&#xff1a; 當n5時 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 輸出&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 【輸入】 輸入行數n。 【輸出】 輸出如題述三角形。n行&#…

圖論入門【數據結構基礎】:什么是圖?如何表示圖?

圖&#xff08;Graph&#xff09; 是一種非線性數據結構&#xff0c;用于表示對象之間的關系。圖由 頂點&#xff08;Vertex&#xff09; 和 邊&#xff08;Edge&#xff09; 組成&#xff0c;其中頂點表示對象&#xff0c;邊表示對象之間的關系。圖廣泛應用于計算機科學、數學…

如何使用HACS一鍵集成米家與果家設備到HomeAssistant玩轉智能家居

文章目錄 前言1. 下載HACS源碼2. 添加HACS商店3. 綁定米家設備 前言 各位科技潮人和智能家居發燒友們&#xff0c;是不是也夢想著把家里變成一個高科技的空間&#xff1f;有了群暉NAS這位得力助手&#xff0c;不僅存儲空間大得嚇人&#xff0c;還能通過Docker輕松安裝各種應用…

《Java對象“比武場“:Comparable與Comparator的巔峰對決》

目錄 引言&#xff1a; 一、認識接口 1.1 Comparable 1.2 Comparator ?編輯 1.3 核心概念對比 二、代碼實現對比 2.1 Comparable 實現示例 2.2 Comparator 實例示例 三、核心區別詳解 3.1 設計理念差異 3.2 方法調用 3.3 使用情景 四、本質區別總結 引言&#x…

Android自動化測試工具

細解自動化測試工具 Airtest-CSDN博客 以下是幾種常見的Android應用自動化測試工具&#xff1a; Appium&#xff1a;支持多種編程語言&#xff0c;如Java、Python、Ruby、JavaScript等。可以用于Web應用程序和原生應用程序的自動化測試&#xff0c;并支持iOS和Android平臺。E…

Go vs Rust vs C++ vs Python vs Java:誰主后端沉浮

一、核心性能對比(基于TechEmpower基準測試) 語言單核QPS延遲(ms)內存消耗適用場景Rust650,0000.1245MB高頻交易/區塊鏈C++720,0000.0932MB游戲服務器/實時渲染Go230,0000.45110MB微服務/API網關Java180,0001.2450MB企業ERP/銀行系統Python12,0008.5220MBAI接口/快速原型技術…

vue3:八、登錄界面實現-頁面初始搭建、基礎實現

一、初始工作 1、創建登錄文件 在src/views中創建文件LoginView.vue文件 2、創建路由 在router/index.js中增加登錄的信息 代碼 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue const router createRouter({hist…

結構型模式之適配器模式:讓不兼容的接口兼容

在軟件開發中&#xff0c;經常會遇到這樣一種情況&#xff1a;系統的不同部分需要進行交互&#xff0c;但由于接口不兼容&#xff0c;導致無法直接使用。這時&#xff0c;適配器模式&#xff08;Adapter Pattern&#xff09;就能派上用場。適配器模式是設計模式中的結構型模式&…

Qt從入門到入土(十) -數據庫操作--SQLITE

認識 數據庫是用于存儲、管理和檢索數據的系統化集合。它是一種按照特定結構組織數據的存儲方式&#xff0c;通過軟件&#xff08;數據庫管理系統&#xff0c;DBMS&#xff09;來實現數據的高效存儲、查詢、更新和管理。通過文件存儲數據適用于少量的數據&#xff0c;而當擁有…

Django REST Framework中的序列化器類和視圖類

序列化器類 一、Serializer序列化類 Serializer是DRF的序列化器基類&#xff0c;提供基本功能&#xff0c;使用Serializer類需要自己定義字段名稱和類型。 BookSerializer(Serializer):name serializers.CharField()price serlializers.IntegerField()date serlializers.…

圖像分類數據集

《動手學深度學習》-3.5-學習筆記 # 通過ToTensor實例將圖像數據從PIL類型變換成32位浮點數格式&#xff0c; # 并除以255使得所有像素的數值均在0&#xff5e;1之間 trans transforms.ToTensor()#用于將圖像數據從 PIL 圖像格式&#xff08;Python Imaging Library&#xff…

架構師面試(十五):熔斷設計

問題 某電商平臺經常需要在大促運營活動中暫停評論、退款等業務&#xff0c;基于服務治理的設計理念&#xff0c;我們需要對該電商平臺微服務系統的【服務熔斷】進行設計&#xff0c;對此下面描述中說法正確的有哪幾項呢&#xff1f; A. 服務管控系統管理著平臺中所有服務之間…

Ubuntu20.04安裝運行DynaSLAM

目錄 一、安裝Anaconda 二、相關依賴庫安裝 1、boost安裝 2、Eigen 3安裝 3、opencv安裝 4、Pangolin安裝 三、配置Mask_RCNN環境 四、DynaSLAM編譯 五、DynaSLAM運行 一、安裝Anaconda 打開以下鏈接&#xff1a; Index of / 下載和自己系統匹配的安裝包。這里下…

X86 RouterOS 7.18 設置筆記三:防火墻設置(IPV4)

X86 j4125 4網口小主機折騰筆記五&#xff1a;PVE安裝ROS RouterOS X86 RouterOS 7.18 設置筆記一&#xff1a;基礎設置 X86 RouterOS 7.18 設置筆記二&#xff1a;網絡基礎設置(IPV4) X86 RouterOS 7.18 設置筆記三&#xff1a;防火墻設置(IPV4) X86 RouterOS 7.18 設置筆記四…

從 YOLOv1 到 YOLOv2:目標檢測的進化之路

引言 你有沒有想過&#xff0c;當你用手機拍一張照片&#xff0c;里面的人、車、狗是怎么被自動識別出來的&#xff1f;這背后靠的就是目標檢測技術。目標檢測是計算機視覺中的一個重要領域&#xff0c;它不僅要回答“圖片里有什么”&#xff0c;還要告訴你“這些東西在哪里”…