怎样才可以描述点击窗口右上角的“x”时所发生的事件,请给个例子,谢谢了!

getreadylu 2001-07-19 11:16:54
怎样才可以描述点击窗口右上角的“x”时所发生的事件,请给个例子,谢谢了!
我想把弹出的一个窗口用“x”关闭时使另一个窗口状态发生改变,请问该怎么办?
...全文
220 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yopeng 2001-07-24
  • 打赏
  • 举报
回复
你可以直接在
Private Sub Form_Unload(Cancel As Integer)

End Sub
直接写代码啊!
getreadylu 2001-07-24
  • 打赏
  • 举报
回复
嘿,楼上的老兄,我不是想屏蔽掉“X”,我只是想鼠标点击它时这个窗口关闭,同时同一程序的另一个窗口的内容发生变化,我只是想有反应而已,不过你没有功劳也有苦劳,我会给分的。
yjokvb 2001-07-22
  • 打赏
  • 举报
回复
你是想遮蔽掉“X”吧?下面是方法:


要Disable Form "X" --> Close的功能(变暗灰色),事实上便是从Form左上方的System
Menu将关闭(Close)的MenuItem去除掉便可以了,去除後,又该如何Enable "X"呢,那
便是再将 关闭(Close)的MenuItem加回去,但这里有个小问题,加回去之後"X"仍是暗
灰色,要等到我们做了某些固定的动作之後(如TitleBar上click一下,或选一下System
Menu等),它才会再度变Enable的颜色,我不知道让TitleBar上的这些东西Refresh要送
什麽讯息,知道者请告诉我,所以现在我暂且Send一个在TitleBar上按下Mouse左键的讯
息给Form,令"X"能出现Enable的颜色。

'需一个Command Button
Private Declare Function GetSystemMenu Lib "User32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function AppendMenu Lib "User32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Declare Function GetMenuString Lib "User32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_NCLBUTTONDBLCLK = &HA3
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Const MF_STRING = &H0&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060

Private hMenu As Long
Private CloseStr As String '记录Close MenuItem的字串

'将"关闭"的那一个MenuItem 加回来
Private Sub Command1_Click()
Call AppendMenu(hMenu, MF_STRING, SC_CLOSE, CloseStr)

'令"X"能出现Enable的颜色
Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End Sub

Private Sub Form_Load()
hMenu = GetSystemMenu(Me.hwnd, 0)
CloseStr = String(255, 0)

'SC_CLOSE指的便是"关闭"的那一个MenuItem ID
Call GetMenuString(hMenu, SC_CLOSE, CloseStr, 256, MF_BYCOMMAND)
CloseStr = Left(CloseStr, InStr(1, CloseStr, Chr(0)) - 1)

Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
End Sub
smalle 2001-07-20
  • 打赏
  • 举报
回复
你选择一下FROM,再选一下它的事件,VB会自动给你写好函数名的。
a_geng 2001-07-20
  • 打赏
  • 举报
回复
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'如果不想点X退出,但可以通过Unload方法关闭窗体
if unloadMOde<>vbformcode then
cancel=1
‘同时可以隐藏
me.hide
end if

End Sub


a_geng 2001-07-20
  • 打赏
  • 举报
回复
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)


End Sub


Chice_wxg 2001-07-20
  • 打赏
  • 举报
回复
哎,大家一个跟一个学,都学坏了~~~~~~~ ^_^

本人很Lazy,所以一般都靠印象写,难免代码出错~~~~

请你自己再改一下。
嘿嘿,声明正确的是这样:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

End Sub


xxlroad 2001-07-20
  • 打赏
  • 举报
回复
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Form2.Show
Form2.BackColor = QBColor(9)
End Sub
getreadylu 2001-07-20
  • 打赏
  • 举报
回复
我的写法是private sub Form_QueryUnload(cancel as integer),不知道大小写之类会不会有错?难道说msgbox是必需的吗?
little_hero 2001-07-19
  • 打赏
  • 举报
回复
private sub form_queryunload(cancel as integer)
yes = MsgBox("真的要退出吗?", vbYesNo, "标题")
If yes = 6 Then cancel=true
end sub
Chice_wxg 2001-07-19
  • 打赏
  • 举报
回复
private sub form_queryunload(cancel as integer)
if msgbox("Sure to close?",vbyesno)=vbno then
cancel=true
else
cancel=false
endif
jlum99 2001-07-19
  • 打赏
  • 举报
回复
有可能过程鸣写错了.
getreadylu 2001-07-19
  • 打赏
  • 举报
回复
不行啊,它说什么“过程声明与同名事件或过程的描述不匹配”
kyuwong 2001-07-19
  • 打赏
  • 举报
回复
楼上的只是窗体关闭时的事件,只要有关闭窗体代码,上面的代码一定会执行,
如 Unload me 。
getreadylu 2001-07-19
  • 打赏
  • 举报
回复
楼上两位真神速,我回去试试,回来给您门加分!

7,762

社区成员

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

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