易语言如何实现窗口边缘这种阴影效果
2个回答
2013-04-16
展开全部
用API可实现 我写了个描绘窗口边框的程序 创建画笔的时候你可用 扩展画笔 来试试看 API函数如下:.版本 2.DLL命令 API_释放设备场景, 整数型, "user32", "ReleaseDC", , 释放由调用GetDC或GetWindowDC函数获取的指定设备场景。它对类或私有设备场景无效(但这样的调用不会造成损害) 执行成功为1,否则为0
.参数 窗口句柄, 整数型, , 要释放的设备场景相关的窗口句柄
.参数 设备场景, 整数型, , 要释放的设备场景句柄;.DLL命令 API_寻找顶级窗口, 整数型, "user32", "FindWindowA", , 寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题) 找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError
.参数 窗口类名, 文本型, , 指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类
.参数 窗口文本, 文本型, , 指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题 示例Dim hw&, cnt&Dim rttitle As * 256hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4cnt = GetWindowText(hw&, rttitle, 255)MsgBox Left$(rttitle, cnt), 0, "RTMain title";.DLL命令 API_创建纯色刷子, 整数型, "gdi32", "CreateSolidBrush", , 用纯色创建一个刷子 如执行成功,返回新刷子的一个句柄;否则返回零
.参数 颜色值, 整数型, , 数字的RGB彩色;.DLL命令 API_删除对象, 整数型, "gdi32", "DeleteObject", , 用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放 非零表示成功,零表示失败
.参数 对象句柄, 整数型, , 一个GDI对象的句柄;.DLL命令 API_取窗口矩形, 整数型, "user32", "GetWindowRect", , 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内 非零表示成功,零表示失败。会设置GetLastError
.参数 窗口句柄, 整数型, , 想获得范围矩形的那个窗口的句柄
.参数 矩形区域, RECT, , RECT,屏幕坐标中随同窗口装载的矩形;.DLL命令 API_取设备场景, 整数型, "user32", "GetDC", , 获取指定窗口的设备场景 指定窗口的设备场景句柄,出错则为0
.参数 hwnd, 整数型, , 将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC;.DLL命令 API_创建画笔, 整数型, "gdi32", "CreatePen", , 用指定的样式、宽度和颜色创建一个画笔 如函数执行成功,就返回指向新画笔的一个句柄;否则返回零
.参数 风格, 整数型, , 指定画笔样式,可以是下述常数之一;PS_SOLID:画笔画出的是实线;PS_DASH:画笔画出的是虚线(nWidth必须是1);PS_DOT:画笔画出的是点线(nWidth必须是1);PS_DASHDOT:画笔画出的是点划线(nWidth必须是1);PS_DASHDOTDOT:画笔画出的是点-点-划线(nWidth必须是1);PS_NULL:画笔不能画图;PS_INSIDEFRAME:画笔在由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框中画图。如指定的准确RGB颜色不存在,就进行抖动处理
.参数 宽度, 整数型, , 以逻辑单位表示的画笔的宽度
.参数 颜色, 整数型, , 画笔的RGB颜色;.DLL命令 API_UpdateWindow, 整数型, "user32", "UpdateWindow", , 强制立即更新窗口,窗口中以前屏蔽的所有区域都会重画(在vb里使用:如vb窗体或控件的任何部分需要更新,可考虑直接使用refresh方法 非零表示成功,零表示失败
.参数 hwnd, 整数型, , 欲更新窗口的句柄;.DLL命令 API_画焦点矩形, 整数型, "user32", "DrawFocusRect", , 画一个焦点矩形。这个矩形是在标志焦点的样式中通过异或运算完成的(焦点通常用一个点线表示)。如用同样的参数再次调用这个函数,就表示删除焦点矩形 非零表示成功,零表示失败。会设置GetLastError
.参数 设备场景句柄, 整数型, , 设备场景的句柄
.参数 矩形轮廓, RECT, , RECT,要在逻辑坐标中描绘的矩形;.DLL命令 API_创建画笔扩展, 整数型, "gdi32", "ExtCreatePen", , 创建一个扩展画笔(装饰或几何) 如执行成功,返回一个指向扩展画笔的句柄。零表示执行出错。一旦不再需要,记得用DeleteObject将画笔删除
.参数 笔风格, 整数型, , 画笔样式来自下述常数组的任何一个常数的组合(OR运算):;PS_COSMETIC or PS_GEOMETRIC:画笔的类型;PS_ALTERNATE, PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_USERSTYLE, PS_INSIDEFRAME:画笔的样式;PS_ENDCAP_???:画笔的笔尖;PS_JOIN_???:在图形中连接线段或在路径中连接直线的方式
.参数 笔尖宽度, 整数型, , 指定线宽。几何画笔的线宽肯定是1
.参数 笔刷定义结构, LOGBRUSH, , LOGBRUSH,lbColor代表画笔颜色。对于装饰画笔,lbStyle为PS_SOLID;对于几何画笔,lbStyle则代表实际的样式。针对几何画笔,必须设置其他所有字体
.参数 自定义段数, 整数型, , 如指定了PS_USERSTYLE,则代表lpStyle数组中的条目数量
.参数 自定义线, 整数型, , 指定PS_USERSTYLE的“线段/空白”对(原文:Line/space pairs for PS_USERSTYLE);.DLL命令 API_屏蔽窗口矩形, 整数型, "user32", "InvalidateRect", , 这个函数屏蔽一个窗口客户区的全部或部分区域。这会导致窗口在事件期间部分重画 非零表示成功,零表示失败
.参数 窗口句柄, 整数型, , 待屏蔽窗口的句柄
.参数 屏蔽矩形, RECT, , RECT,用于描述待屏蔽矩形部分的一个矩形结构。可用InvalidateRectBynum函数,同时将lpRect设为零(Long数据类型),从而屏蔽(或禁用)整个窗口
.参数 重画前删除, 整数型, , TRUE(非零)导致指定的区域在重画前先删除;.DLL命令 API_重画窗口, 整数型, "user32", "RedrawWindow", , 根据fuRedraw旗标的设置,重画全部或部分窗口 非零表示成功,零表示失败。会设置GetLastError
.参数 窗口句柄, 整数型, , 要重画的窗口的句柄。零表示更新桌面窗口
.参数 矩形, RECT, , RECT,窗口中需要重画的一个矩形区域
.参数 区域, 整数型, , 一个“区”的句柄,这个区描述了要重画的窗口区域。“区”:Region
.参数 清楚模式, 整数型, , 规定具体重画操作的旗标。下列常数可组合使用,从而进行复杂的重画行动;RDW_ERASE:重画前,先清除重画区域的背景。也必须指定RDW_INVALIDATE;RDW_FRAME:如非客户区包含在重画区域中,则对非客户区进行更新。也必须指定RDW_INVALIDATE;RDW_INTERNALPAINT:即使窗口并非无效,也向其投递一条WM_PAINT消息;RDW_INVALIDATE:禁用(屏蔽)重画区域;RDW_NOERASE:禁止删除重画区域的背景;RDW_NOFRAME:禁止非客户区域重画(如果它是重画区域的一部分)。也必须指定RDW_VALIDATE;RDW_NOINTERNALPAINT:禁止内部生成或由这个函数生成的任何待决WM_PAINT消息。针对无效区域,仍会生成WM_PAINT消息;RDW_VALIDATE:检验重画区域;RDW_ERASENOW:立即删除指定的重画区域;RDW_UPDATENOW:立即更新指定的重画区域;RDW_ALLCHILDREN:重画操作包括子窗口(前提是它们存在于重画区域);RDW_NOCHILDREN:重画操作排除子窗口(前提是它们存在于重画区域);.DLL命令 API_画矩形边框, 整数型, "user32", "FrameRect", , 用指定的刷子围绕一个矩形画一个边框(组成一个帧),边框的宽度是一个逻辑单位 非零表示成功,零表示失败。会设置GetLastError
.参数 设备场景, 整数型, , 设备场景的句柄
.参数 矩形, RECT, , RECT,对要描绘的边框进行描述的一个矩形。这等效于将画笔设成一个单位的宽度,然后用矩形函数画出一个矩形
.参数 刷子句柄, 整数型, , 欲使用的刷子的句柄;
.参数 窗口句柄, 整数型, , 要释放的设备场景相关的窗口句柄
.参数 设备场景, 整数型, , 要释放的设备场景句柄;.DLL命令 API_寻找顶级窗口, 整数型, "user32", "FindWindowA", , 寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题) 找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError
.参数 窗口类名, 文本型, , 指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类
.参数 窗口文本, 文本型, , 指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题 示例Dim hw&, cnt&Dim rttitle As * 256hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4cnt = GetWindowText(hw&, rttitle, 255)MsgBox Left$(rttitle, cnt), 0, "RTMain title";.DLL命令 API_创建纯色刷子, 整数型, "gdi32", "CreateSolidBrush", , 用纯色创建一个刷子 如执行成功,返回新刷子的一个句柄;否则返回零
.参数 颜色值, 整数型, , 数字的RGB彩色;.DLL命令 API_删除对象, 整数型, "gdi32", "DeleteObject", , 用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放 非零表示成功,零表示失败
.参数 对象句柄, 整数型, , 一个GDI对象的句柄;.DLL命令 API_取窗口矩形, 整数型, "user32", "GetWindowRect", , 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内 非零表示成功,零表示失败。会设置GetLastError
.参数 窗口句柄, 整数型, , 想获得范围矩形的那个窗口的句柄
.参数 矩形区域, RECT, , RECT,屏幕坐标中随同窗口装载的矩形;.DLL命令 API_取设备场景, 整数型, "user32", "GetDC", , 获取指定窗口的设备场景 指定窗口的设备场景句柄,出错则为0
.参数 hwnd, 整数型, , 将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC;.DLL命令 API_创建画笔, 整数型, "gdi32", "CreatePen", , 用指定的样式、宽度和颜色创建一个画笔 如函数执行成功,就返回指向新画笔的一个句柄;否则返回零
.参数 风格, 整数型, , 指定画笔样式,可以是下述常数之一;PS_SOLID:画笔画出的是实线;PS_DASH:画笔画出的是虚线(nWidth必须是1);PS_DOT:画笔画出的是点线(nWidth必须是1);PS_DASHDOT:画笔画出的是点划线(nWidth必须是1);PS_DASHDOTDOT:画笔画出的是点-点-划线(nWidth必须是1);PS_NULL:画笔不能画图;PS_INSIDEFRAME:画笔在由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框中画图。如指定的准确RGB颜色不存在,就进行抖动处理
.参数 宽度, 整数型, , 以逻辑单位表示的画笔的宽度
.参数 颜色, 整数型, , 画笔的RGB颜色;.DLL命令 API_UpdateWindow, 整数型, "user32", "UpdateWindow", , 强制立即更新窗口,窗口中以前屏蔽的所有区域都会重画(在vb里使用:如vb窗体或控件的任何部分需要更新,可考虑直接使用refresh方法 非零表示成功,零表示失败
.参数 hwnd, 整数型, , 欲更新窗口的句柄;.DLL命令 API_画焦点矩形, 整数型, "user32", "DrawFocusRect", , 画一个焦点矩形。这个矩形是在标志焦点的样式中通过异或运算完成的(焦点通常用一个点线表示)。如用同样的参数再次调用这个函数,就表示删除焦点矩形 非零表示成功,零表示失败。会设置GetLastError
.参数 设备场景句柄, 整数型, , 设备场景的句柄
.参数 矩形轮廓, RECT, , RECT,要在逻辑坐标中描绘的矩形;.DLL命令 API_创建画笔扩展, 整数型, "gdi32", "ExtCreatePen", , 创建一个扩展画笔(装饰或几何) 如执行成功,返回一个指向扩展画笔的句柄。零表示执行出错。一旦不再需要,记得用DeleteObject将画笔删除
.参数 笔风格, 整数型, , 画笔样式来自下述常数组的任何一个常数的组合(OR运算):;PS_COSMETIC or PS_GEOMETRIC:画笔的类型;PS_ALTERNATE, PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_USERSTYLE, PS_INSIDEFRAME:画笔的样式;PS_ENDCAP_???:画笔的笔尖;PS_JOIN_???:在图形中连接线段或在路径中连接直线的方式
.参数 笔尖宽度, 整数型, , 指定线宽。几何画笔的线宽肯定是1
.参数 笔刷定义结构, LOGBRUSH, , LOGBRUSH,lbColor代表画笔颜色。对于装饰画笔,lbStyle为PS_SOLID;对于几何画笔,lbStyle则代表实际的样式。针对几何画笔,必须设置其他所有字体
.参数 自定义段数, 整数型, , 如指定了PS_USERSTYLE,则代表lpStyle数组中的条目数量
.参数 自定义线, 整数型, , 指定PS_USERSTYLE的“线段/空白”对(原文:Line/space pairs for PS_USERSTYLE);.DLL命令 API_屏蔽窗口矩形, 整数型, "user32", "InvalidateRect", , 这个函数屏蔽一个窗口客户区的全部或部分区域。这会导致窗口在事件期间部分重画 非零表示成功,零表示失败
.参数 窗口句柄, 整数型, , 待屏蔽窗口的句柄
.参数 屏蔽矩形, RECT, , RECT,用于描述待屏蔽矩形部分的一个矩形结构。可用InvalidateRectBynum函数,同时将lpRect设为零(Long数据类型),从而屏蔽(或禁用)整个窗口
.参数 重画前删除, 整数型, , TRUE(非零)导致指定的区域在重画前先删除;.DLL命令 API_重画窗口, 整数型, "user32", "RedrawWindow", , 根据fuRedraw旗标的设置,重画全部或部分窗口 非零表示成功,零表示失败。会设置GetLastError
.参数 窗口句柄, 整数型, , 要重画的窗口的句柄。零表示更新桌面窗口
.参数 矩形, RECT, , RECT,窗口中需要重画的一个矩形区域
.参数 区域, 整数型, , 一个“区”的句柄,这个区描述了要重画的窗口区域。“区”:Region
.参数 清楚模式, 整数型, , 规定具体重画操作的旗标。下列常数可组合使用,从而进行复杂的重画行动;RDW_ERASE:重画前,先清除重画区域的背景。也必须指定RDW_INVALIDATE;RDW_FRAME:如非客户区包含在重画区域中,则对非客户区进行更新。也必须指定RDW_INVALIDATE;RDW_INTERNALPAINT:即使窗口并非无效,也向其投递一条WM_PAINT消息;RDW_INVALIDATE:禁用(屏蔽)重画区域;RDW_NOERASE:禁止删除重画区域的背景;RDW_NOFRAME:禁止非客户区域重画(如果它是重画区域的一部分)。也必须指定RDW_VALIDATE;RDW_NOINTERNALPAINT:禁止内部生成或由这个函数生成的任何待决WM_PAINT消息。针对无效区域,仍会生成WM_PAINT消息;RDW_VALIDATE:检验重画区域;RDW_ERASENOW:立即删除指定的重画区域;RDW_UPDATENOW:立即更新指定的重画区域;RDW_ALLCHILDREN:重画操作包括子窗口(前提是它们存在于重画区域);RDW_NOCHILDREN:重画操作排除子窗口(前提是它们存在于重画区域);.DLL命令 API_画矩形边框, 整数型, "user32", "FrameRect", , 用指定的刷子围绕一个矩形画一个边框(组成一个帧),边框的宽度是一个逻辑单位 非零表示成功,零表示失败。会设置GetLastError
.参数 设备场景, 整数型, , 设备场景的句柄
.参数 矩形, RECT, , RECT,对要描绘的边框进行描述的一个矩形。这等效于将画笔设成一个单位的宽度,然后用矩形函数画出一个矩形
.参数 刷子句柄, 整数型, , 欲使用的刷子的句柄;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询