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.mzph.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;还要告诉你“这些东西在哪里”…