VB的小问题,高手指点小弟一下!

mfkiqpl 2003-04-21 10:52:28
我的程序很简单,就一个窗体(form1)。但我对这个窗体有特殊要求。
1:让它永远是当前窗口,永远不会被别的窗口覆盖。怎么实现?
这是我的主要问题。
还有个其它的想法,就是想让这个窗口透明。能不能实现。如果不行就帮我解决我的第一个问题。
感谢各位了!
...全文
30 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
popcorn2255 2003-04-21
  • 打赏
  • 举报
回复

在窗体中添加以下常量(已有的不需加了)

Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2


Private Sub Form_Load()
'将窗口置于所有窗口的顶层,不改变原窗体大小
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or
SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

mfkiqpl 2003-04-21
  • 打赏
  • 举报
回复
to hpjacky(Jacky) :
你的办法我成功了。但我窗体的大小改变了。变得比我原来大多了。怎么不改变窗体大小?
hpjacky 2003-04-21
  • 打赏
  • 举报
回复
Private Declare Function SetWindowPos Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long _
) As Long
Const HWND_TOPMOST = -1
Const SWP_SHOWWINDOW = &H40

Private Sub Form_load()
Dim retValue As Long
'将窗口置于所有窗口的顶层
retValue = SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, 300, 300, SWP_SHOWWINDOW)
End Sub
mfkiqpl 2003-04-21
  • 打赏
  • 举报
回复
to lxqlogo0(群子):
你给的那段API代码加到那里??
mfkiqpl 2003-04-21
  • 打赏
  • 举报
回复
to popcorn2255(响指)

小弟不懂怎么用API函数。还请详细点!
popcorn2255 2003-04-21
  • 打赏
  • 举报
回复
用API函数 SetWindowPos
lxqlogo0 2003-04-21
  • 打赏
  • 举报
回复
api:
Public Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

在formload中调用
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 1

窗口透明也可以实现不过比较麻烦

mfkiqpl 2003-04-21
  • 打赏
  • 举报
回复
我现在急须解决的是第1个问题:1:让它永远是当前窗口,永远不会被别的窗口覆盖。怎么实现?
lihonggen0 2003-04-21
  • 打赏
  • 举报
回复

第一个问题。


Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

Private Sub Form_Activate()

'Set the window position to topmost
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub
lihonggen0 2003-04-21
  • 打赏
  • 举报
回复
如 何 使 窗 口 透 明

为 了 便 于 观 察 , 先 在 窗 口 上 添 加 两 个 按 钮 , Command1和 Command2。 加 上 如 下 代 码 :
Private Sub Command1_Click()
Print "Hello"
End Sub

Private Sub Command2_Click()
End
End Sub
这 两 个 按 钮 一 个 用 于 终 止 程 序 运 行 , 一 个 用 于 显 示 文 字 。
然 后 , 将 Form的 Border设 为 None。
最 后 , 在 Form的 声 明 部 分 加 上 以 下 代 码 :
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild _
As Long, ByVal hWndNewParent As Long) As Long
Const WS_EX_TRANSPARENT = &H20&
Const GWL_EXSTYLE = (-20)
最 后 , 在 Form中 加 上 如 下 代 码 。
Private Sub Form_Load()
SetWindowLong hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT
End Sub

7,762

社区成员

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

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