分享
 
 
 

用Visial Basic 在菜单栏实现超链接

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

如何在菜单栏上实现超链接

和尚 2001/11/13

笔者突发奇想,在菜单栏上写点版权信息多好!可是vb内置事件检测不到菜单栏消息。只好求助于win32API。窗口工作区以外的MouseMove消息表示为WM_NCMOUSEMOVE,所以设置窗口过程截取并处理这条消息,同样可以处理鼠标点击消息了,同样您也可以把超链接放在标题栏上,。啊,反正鄙人表达能力有限,代码都在这里,相信你一看就明白了。拿去用好了,不过如果你想转载的话还需要注名 "来自和尚在线" 。也欢迎大家访问我的主页:http://handsomge.yeah.net 那里都是鄙人的作品。

以下内容放在窗体

Private Sub Form_Activate()

title

End Sub

Private Sub Form_Load()

Dim ret As Long

'记录原本的Window Procedure的位址

preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)

'设定Combo1的window Procedure到wndproc

ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)

End Sub

Private Sub Form_Paint()

title

End Sub

Private Sub Form_Resize()

title

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim ret As Long

'取消Message的截取,而使之又只送往原来的Window Procedure

ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)

End Sub

Sub title()

Dim fr1 As RECT

GetWindowRect Me.hwnd, fr1

d1 = GetWindowDC(Me.hwnd)

SetBkMode d1, 0

SetTextColor d1, RGB(235, 235, 235)

fon = CreateFont(14, 8, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, "隶书")

SelectObject d1, fon

v = "和尚在线极力推荐 "

TextOut d1, fr1.Right - 130 - Me.Left / Screen.TwipsPerPixelX, fr1.Top - Me.Top / Screen.TwipsPerPixelY + 25, v, Len(v)

SetTextColor d1, RGB(70, 70, 70)

TextOut d1, fr1.Right - 129 - Me.Left / Screen.TwipsPerPixelX, fr1.Top - Me.Top / Screen.TwipsPerPixelY + 26, v, Len(v)

End Sub

以下内容放在 标准模块中

Public Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal h As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal i As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long

Public Declare Function SelectClipRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As Long

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

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

Public Const WM_NCLBUTTONUP = &HA2

Public Const WM_NCMOUSEMOVE = &HA0

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _

(ByVal hwnd As Long, ByVal nIndex As Long) As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _

(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

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

Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

Public Const GWL_WNDPROC = (-4)

Public Const WM_MENUSELECT = &H11F

Public preWinProc As Long

Private Type tLong

ll As Long

End Type

Private Type TwoWord

LowWord As Integer

HiWord As Integer

End Type

Public Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

Dim MenuItemStr As String, SubMenuStr As String

Dim hSubmenu As Long, MenuId As Long, i As Long

Dim ad As tLong, tmpt2 As TwoWord

'截取WM_ncmousemove处理完後,再将之送往原来的Window Procedure

If Msg = WM_NCMOUSEMOVE Then

ad.ll = lParam

LSet tmpt2 = ad

If (tmpt2.LowWord > (frMain.Left + frMain.Width) / Screen.TwipsPerPixelX - 130) And (tmpt2.HiWord > frMain.Top / Screen.TwipsPerPixelY + 25 And tmpt2.HiWord <= frMain.Top / Screen.TwipsPerPixelY + 36) Then

Screen.MouseIcon = frMain.MouseIcon

Screen.MousePointer = 99

Else

Screen.MousePointer = 0

End If

End If

'如果在超链接上空点击鼠标左键,就打开URL

If Msg = WM_NCLBUTTONUP And Screen.MousePointer = 99 Then ShellExecute frMain.hwnd, "open", "http://handsomge.yeah.net/", "", "", vbNormalFocus

'将之送往原来的Window Procedure

wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

End Function

详细内容参看作者主页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有