SetWindowLong函数GetWindowLong函数
这两个函数具体应用如下:SetWindowLong函数GetWindowLong函数
Delphi窗口化游戏
var
Thwnd:HWND;//声明变量 句柄变量
devmodel1:DEVMODE;//屏幕分辨率变量
style,exstyle:longint;//窗口属性变量
begin
//得到游戏句柄
Thwnd:findwindow('CLIENT',nil);
//设置分辨率
if EnumDisplaySettings(0,0,devmode1)then
begin
devmode1.dmPelsWidth:1024;
devmode1.dmPelsHeight:=768;
devmode1.dmBitsPerPel:=32;
devmode1.dmDisplayFrequency:=75;
ChangeDisplaySetting(devmode1,0);
end;
//得到窗口原来的属性
style:=GetWindowLong(Thwnd,GWL_STYLE);
//定义新属性
style:=WS_OVERLAPPEDWINDOW or WS_VISIBLE;
//更改窗口属性
SetWindowLong(Thwnd,GWL_STYLE,style);
//得到窗口扩展属性
exstyle:=GetWindowLong(Thwnd,GWL_EXSTYLE);
//定义新扩展属性
exstyle:=WS_EX_APPWINDOW or WS_EX_WINDOWEDGE;
//更改窗口扩展属性
SetWindowLong(Thwnd,GWL_EXSTYLE,exstyle);
//更改的屏幕以屏幕的0,0为坐标,大小为800*600
SetWindowPos(Thwnd,HWND_NOTOPMOST,0,0,1020,768,SWP_SHOWWINDOW);
ShowWindow(Thwnd,SW_SHOWNORMAL);
二、WS_EX_APPWINDOW在任务栏显示图标
SetWindowLong(Handle,GWL_EXSTYLE,Style or WS_EX_APPWINDOW)
三、修改托盘相关信息
unit Unit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,ShellApi,StdCtrls;
const
//声明常量
WM_MYNOTIFY=WM_USER+1000;//消息
ID_MAIN=100;//定义图标的ID
type
TForm1=class(TForm)
Button1: TButton;
Button2: TButton;
popupmenu1:TPopupmenu;
procedure FormCreate(Sender:TObject);
procedure FormClose(Sender: TObject;var Action: TCloseAction);
//声明私有函数
Function AddIcon(hwnd: HWND):Boolean;
Function RemoveIcon(hwnd: HWND):Boolean;
Procedure MyNotify(var Msg: TMessage);message WM_MYNOTIFY;
private
{Privatedeclarations}
ExitApp:Boolean;
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R *.dfm}
//函数实现部分
Function TForm1.AddIcon(hwnd:HWND):Boolean;
var
nid:NOTIFYICONDATA;//系统消息对象
begin
nid.cbSize:=sizeof(NOTIFYICONDATA);//对象存储大小
nid.Wnd:=hwnd;//消息对象句柄为窗口句柄
nid.uID:=ID_MAIN;//图标的ID号
nid.uFlags:=7; //NIF_MESSAGE or NIF_ICON or NIF_TIP;//响应的事件
nid.uCallbackMessage:=WM_MYNOTIFY;//返回信息
nid.hIcon:=Application.Icon.Handle;//图标
strCopy(nid.szTip,'hello');//转换字符串格式
AddIcon:=Shell_NotifyIcon(NIM_ADD,@nid);//添加到任务栏
end;
Function TForm1.RemoveIcon(hwnd:HWND):Boolean;
var
nid:NOTIFYICONDATA;
begin
nid.cbSize:=sizeof(NOTIFYICONDATA);
nid.Wnd:=hwnd;
nid.uID:=ID_MAIN;
nid.uFlags:=0;
RemoveIcon:=Shell_NotifyIcon(NIM_DELETE,@nid);
end;
Procedure TForm1.MyNotify(var Msg:TMessage);
var
mousept: TPoint;
begin
if frm_login.Visible=false then
begin
case Msg.LParam of
WM_LBUTTONDBLCLK: //鼠标左键按下WM_LBUTTONDOWN,左键双击WM_LBUTTONDBLCLK,左键弹起WM_LBUTTONUP,右键弹起WM_RBUTTONUP
begin
ShowWindow(Handle, SW_SHOW);
ShowWindow(Application.handle, SW_SHOW);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
not (GetWindowLong(Application.handle, GWL_EXSTYLE)
or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW));
end;
end;
case Msg.LParam of
WM_RBUTTONUP:
begin
GetCursorPos(mousept);
Form1.popupmenu1.popup(mousept.x, mousept.y);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender:TObject);
begin
ExitApp:=False;
SetWindowLong(application.handle,gwl_exstyle,ws_ex_toolwindow);
AddIcon(handle);//添加图标
end;
procedure TForm1.FormClose(Sender: TObject;var Action: TCloseAction);
begin
if ExitApp then
Action:= caFree
else
Action:= caNone;
//隐藏窗体.程序并没有退出
ShowWindow(Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.handle, GWL_EXSTYLE)
or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
end;
end.
四、从任务栏隐藏该使用
ShowWindow(Application.Handle,SW_HIDE);
显示
ShowWindow(Application.Handle,SW_SHOW);
五、
{将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
六、
参考:
如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹出一个右键菜单(如右图)。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会回复到原来的大小。其实实现上述的功能都要依赖于WINDOWS操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按下述文字来理解它。
SetWindowLong函数GetWindowLong函数的更多相关文章
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- Oracle_SQL函数-分组函数
分组函数 什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值 组函数类型:主要有6种 AVG - 平均 COUNT - 计数 MAX - 最大 MIN - 最小 SUM - 求和 STDD ...
- Oracle_SQL函数-单行函数
SQL函数 SQL函数分类 SQL函数主要有两种,分为单行函数.多行函数 单行函数:只对一行进行变换,每行返回一个结果.可以转换数据类型,可以嵌套参数可以是一列或一个值 多行函数:多行函数,每次对一组 ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
- javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数
javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数 1.常规函数 javascript常规函数包括以下9个 ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- PHP基于数组的分页函数(核心函数array_slice())
关于数组的分页函数,用数组进行分页的好处是可以方便的进行联合多表查询,只需要将查询的结果放在数组中就可以了以下是数组分页的函数,函数page_array用于数组的分页,函数show_array用于分页 ...
- Python入门笔记(19):Python函数(2):函数/方法装饰器
一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数,如下: @decorator(dec_opt_ar ...
随机推荐
- eclipse设置序列化忽略生成serialVersionUID警告
java中的类想要序列化必须实现java.io.Serializable接口,一般实现接口都会用警告信息,提示生成serialVersionUID,虽然我觉得这个应该生成才合理.这里还是记录一下取消生 ...
- Django框架(六)--模板层:变量、过滤器、标签、自定义标签和过滤器
将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式 # django模板修改的视图函数 def c ...
- Windows使用CMD命令查看进程和终止进程
TaskList: 列出当前所有运行进程. 使用方法:在命令提示符中输入tasklist 然后回车,会看到类似下面的列表: 映像名称 PID 会话名 会话# 内存使用 == ...
- Python面试题(2)
1.一行代码实现1-100的和 ? 1 2 3 print(sum(range(1,101))) #range中的参数是1<=i<101 #sum是计算参数的和 2.在函数内部改变全局变量 ...
- 10-C#笔记-封装
基本的封装同C++类似 using System; namespace RectangleApplication { class Rectangle { //成员变量 internal double ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
- Educational Codeforces Round 78 (Rated for Div. 2) B. A and B
链接: https://codeforces.com/contest/1278/problem/B 题意: You are given two integers a and b. You can pe ...
- mysql命令查询语句&MTdata
1.单表查询 select * from student; 采用*效率低,不推荐,多用列名 一.单表查询的语法: SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY ...
- 洛谷p1747好奇怪的游戏题解
题目 永远不要怀疑劳动人民的智慧! 把快读里最后的return直接返回零的 我已经不是第一次写错了! 我要是再写错我就****** 主要是逆向思维,把从两个点往(1, 1)走想成从(1, 1)点往这两 ...
- 洛谷 P1234 小A的口头禅
这里是传送门啊 I'm here! 题目描述 小A最近有了一个口头禅"呵呵",于是他给出了一个矩形,让你求出里面有几个hehe(方向无所谓). 输入输出格式 输入格式: 第一行两个 ...