如何获取置顶的窗体并在其底部添加跑马灯文字?

gufengsss 2007-04-27 11:02:59
如题,在线等,谢谢!
...全文
492 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
大道曙光 2011-03-19
  • 打赏
  • 举报
回复
学习一下
嗷嗷叫的老马 2007-05-25
  • 打赏
  • 举报
回复
改变条件,可以改变问题.....
laviewpbt 2007-05-08
  • 打赏
  • 举报
回复
我就觉得现在为什么有人有那么多奇怪的也许没有实用价值的要求!!!!
清晨曦月 2007-05-08
  • 打赏
  • 举报
回复
好~难

咱直接把自己的一个控件更改父来实现好麻......5555555555555
嗷嗷叫的老马 2007-04-28
  • 打赏
  • 举报
回复
..............................................
programart_life 2007-04-28
  • 打赏
  • 举报
回复
晕,我把需要用到的函数都说出来了,你再查查这些函数的用法不就可以了?
给你个例子吧

再标准模块里写一段程序,如下:
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const WS_EX_TOPMOST = &H8&
Private Const GWL_EXSTYLE = (-20)
public TopMostWnd as long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim sSave As String, Ret As Long
Ret = GetWindowTextLength(hwnd)
ret=GetWindowLong(hwnd,GWL_EXSTYLE )
if ret and WS_EX_TOPMOST <>0 THEN
'说明枚举出来的窗体是置顶窗体
topmostwnd=hwnd
'停止枚举
EnumWindowsProc=false
end if
'继续枚举
EnumWindowsProc = True
End Function

在窗体的Load里写如下程序
sub Form_Load()
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
end sub

在窗体里定义变量,API声明
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

dim topDC as long

在窗体上放一个Timer,在OnTimer事件里写如下代码
if topmostwnd <>0 then
topDC=getdc(topmostwnd)
if topdc=0 then
msgbox "获取顶级窗口DC失败!"
timer1.enable=false
else
drawadtext topdc
end if
end if

定义写文字的程序
private sub DrawAdText(byval hDC as long)
dim memdc as long
dim bmp as long

memdc=CreateCompatibleDC(GetDc(0))
bmp=CreateCompatibleBitmap(GetDC(0),......
deleteobject selectobject(memdc,bmp)
setbkmode transparent
'定位写字,具体你自己去研究
TextOut memdc,坐标,文字..........
deleteobject bmp
deletedc memdc
end sub

上面只是简述,具体你自己去研究,很简单的。但是要我在这非VB环境里给你写出全部代码太麻烦了。基本上就是上面的样子了。

但是我觉得你可能需要的并不是顶级窗体,而是当前激活的窗体吧?那比这个更简单一些。
cangwu_lee 2007-04-28
  • 打赏
  • 举报
回复
播放 一个 gif 或者 swf
rainstormmaster 2007-04-27
  • 打赏
  • 举报
回复
这个"置顶的窗体"是你自己的程序吗?

是的话,修改其源文件即可,不是的话,恐怕很难实现?

不过可以变通一下,你计算出文字应该显示的区域之后,直接在屏幕上用TextOut 之类的api结合定时器输出文字即可

gufengsss 2007-04-27
  • 打赏
  • 举报
回复
补充:要求跑马灯文字的背景透明
gufengsss 2007-04-27
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0),你好,“置顶的窗体”是未知程序的。
gufengsss 2007-04-27
  • 打赏
  • 举报
回复
求老大们给出完整的示范代码,我七拼八凑的还是没弄出来 :(
gufengsss 2007-04-27
  • 打赏
  • 举报
回复
不懂,我是菜菜,请老鸟们给个示例代码。如何更改textout的字体样式?
programart_life 2007-04-27
  • 打赏
  • 举报
回复
跑马灯可以用内存dc实现
先建立一个兼容dC(用函数CreateCompatibleDC和CreateCompatibleBitmap)
设置这个DC的背景透明 (SetBKMode)
将文字定位输出到这个兼容Dc
用Bitblt将这个DC的内容输出到获得的窗口Dc的指定位置上即可。
programart_life 2007-04-27
  • 打赏
  • 举报
回复
1、枚举窗体
2、循环判断枚举出来的窗体,取得其样式(Style),由此判断是否是置顶窗体
3、获得置顶窗体后用GetDc获得其DC
4、用SetBKMode设置文本背景透明
5、用TextOut或者DrawText定位输出文本

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧