关于截获“注销”和创做简单的自定义控件

starw2002 2003-10-19 12:19:35

1、在程序中使用:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler SystemEvents.SessionEnding, AddressOf SessionHandler
End Sub
Private Sub SessionHandler(ByVal sender As Object, ByVal e As SessionEndingEventArgs)
MsgBox("zuXiao")
e.Cancel = False
End Sub
为什么在用户按下键时,没有截获此消息呢?
在101例子中它是演示了截获SystemEvents.TimeChanged,我是想截得SystemEvents.SessionEnding

2、谁能给一段简单代码,用 Inherits System.Windows.Forms.UserControl或
Inherits System.Windows.Forms.Control创建一个简单控件,使这个控件的region为一个gif图像的范围,比如一个圆的按钮图形,但要求region范围在这个gif图像上,不是用规则图形去拼凑,而是用这个gif 的bitmap,不知说没说明白!!就是重新创做一个简单按件用paint、region、graphic、image、bitmap....重画控件(用一个gif图像)

另外我以前曾问过一个关于textbox重画的问题,比如设置透明(在webcontrol是可以加上背景图像的)好像有高手回答过,但未解决,不能从textbox继承来做,只能重做控件,不知现在有没有人能解决这个问题???

3、有人能简单的回答接口有什么用吗???它和普通的类有什么不同???、
...全文
35 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Montaque 2003-10-20
  • 打赏
  • 举报
回复
最根本的区别:
接口定义要实现什么功能。
而类具体的实现功能。
Montaque 2003-10-20
  • 打赏
  • 举报
回复
2. 透明的textbox ,有一个 vb的实例

Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc _
As Long, ByVal nBkMode As Long) As Long

Private Declare Function SetTextColor Lib "gdi32" _
(ByVal hdc As Long, ByVal crColor As Long) As Long

Private Declare Function GetStockObject Lib "gdi32" _
(ByVal nIndex As Long) As Long

Private Const WM_CTLCOLORSTATIC = &H138
Private Const WM_CTLCOLORBTN = &H135
Private Const WM_CTLCOLORDLG = &H136
Private Const WM_CTLCOLOREDIT = &H133
Private Const WM_CTLCOLORLISTBOX = &H134
Private Const WM_CTLCOLORSCROLLBAR = &H137
Private Const WM_CTLCOLORMSGBOX = &H132

Private Const TRANSPARENT = 1
Private Const NULL_BRUSH = 5

'----------------------------------------
Form load

Msghook1.HwndHook = form1.hWnd
Msghook1.Message(WM_CTLCOLOREDIT) = True

With Text1
.Text = "This textbox is transparent, and I'll select some text to
prove it !"
.ForeColor = vbWhite
.SelStart = 0
.SelLength = 20
End With

'Subclass
Private Sub Msghook1_Message(ByVal msg As Long, ByVal wp As Long, ByVal lp
As Long, result As Long)

Select Case msg

Case WM_CTLCOLOREDIT

' Call the original windowproc to handle the
' foreground colour for the Controls etc
Call Msghook1.InvokeWindowProc(msg, wp, lp)

' Set the background mode to transparent
Call SetBkMode(wp, TRANSPARENT)

' Get the stock null brush and return it
' The brush does nothing when the control
' paints using it, hence giving the
' transparency effect
result = GetStockObject(NULL_BRUSH)

Case Else

result = Msghook1.InvokeWindowProc(msg, wp, lp)

End Select
End Sub

Montaque 2003-10-20
  • 打赏
  • 举报
回复
1。关于你截获系统消息的问题

其实这个 SessionEnding 是指用户电击注销按钮时候,系统给当前的应用程序发送注销的消息,所以你看到有的应用程序会提示你要不要关闭,这个就是他处理这个注销消息。如果他选择不关闭,那么消息就不在往后面的应用程序传递了。

你之所以看不到效果,是应为你 debug 程序的时候,VS.NET IDE 是主窗体,他截获了这个消息。

如果你想看到效果,可以 CLT+F5 运行你的应用程序。其他程序问是不是要关闭的时候你选择是。

Hope It HelpS!
citylamp 2003-10-19
  • 打赏
  • 举报
回复
3、接口是为了编程的方便。接口里不能有任何变量的定义,只能定义函数,由一些具体的类Implements该接口来实现。好处:不同的Implements类可以实现不同的功能(但记住要把接口里的所有函数都实现!);如果要升级程序,只要改动实现类就OK了,接口不用动(所以接口一定要提前定义好啊,还要考率好以后的扩充!);还可以开动脑筋,用做指针?(要自己考率了)

starw2002 2003-10-19
  • 打赏
  • 举报
回复
路灯,前面的问题不能帮我一下吗?
starw2002 2003-10-19
  • 打赏
  • 举报
回复
高手们都指点小弟一下呀!
在第一个问题中:
AddHandler SystemEvents.SessionEnding, AddressOf SessionHandler
如果使用了上面的语句,而又不同时使用remove的话,会使电脑出问题吗,好像有一会,我关不上电脑了,又用了一把remove才好,而那时我的程序已经关了的????在101例子中是用了remove的,我不太知道是干什么用的!
lzg530 2003-10-19
  • 打赏
  • 举报
回复
先帮你顶一下

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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