Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:WIN系统    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  修改Windows窗口样式  
 

修改Windows窗口样式

参考:http://www.8864.cc/wz_view.asp?id=424

/* 控件样式参考列表:
DS_ABSALIGN - 对话框的坐标为屏幕坐标(缺省为客户区坐标)
DS_SYSMODAL - 系统模式(仅支持16位程序),不能与DS_CONTROL同用
DS_LOCALEDIT - 在对话框内部为编辑框分配内存(仅支持16位程序)
DS_SETFONT - 可定制对话框字体
DS_MODALFRAME - 框架样式(不能与WS_CAPTION同用)
DS_NOIDLEMSG - 无空闲消息
DS_SETFOREGROUND - 使对话框在最前面显示
DS_3DLOOK - 四周有3维边框
DS_FIXEDSYS - 使用系统固定字体
DS_NOFAILCREATE - 忽略创建过程中的错误
DS_CONTROL - 控件模式,可作为其他对话框的子窗口
DS_CENTER - 在屏幕居中
DS_CENTERMOUSE - 在鼠标位置居中
DS_CONTEXTHELP - 有上下文帮助按钮

近日来工作中需要类似于QQ聊天窗口那样,窗口最小化缩到任务栏,点任务栏上的按钮可以复原窗口,由于窗口是子窗口,所以我们重载了窗口的CreateParams方法如下:

procedure TsubForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do begin
ExStyle := ExStyle or WS_EX_APPWINDOW;
WndParent := GetDesktopWindow();
end;
end;

这样窗口就可以在任务栏上显示了。

但是又碰到一个问题,就是由于窗口样式被我设置成了bs_None,为无边框窗口,所以我点任务栏上的窗口按钮的时候,窗口无法复原和收缩回任务栏。

后来仔细看了一下窗口样式,想想,我们的目的无非是能够响应普通窗口一样的消息,于是,我将窗口设置成bs_Sizeable,然后就能够实现QQ 聊天窗口的那个效果,于是,俺就想在bs_Sizeable的样式下减去窗口的边框样式,这样来测试,于是俺先减去了一个WS_Caption标题样式,此时窗口可以实现QQ聊天窗口的那种样式了,但是多了一个边框,又仔细查看了一下Windows的窗口样式,发现一个样式WS_THICKFRAME,该样式是用来拖动窗口大小的时候的一个窗口边框,于是俺在多减去该样式

最后效果实现

在窗口的Create事件中

加上一个样式设置的就可

SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and (not WS_CAPTION) and (not WS_THICKFRAME));

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站