VB入门技巧多例4.docx
- 文档编号:11537646
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:17
- 大小:22.44KB
VB入门技巧多例4.docx
《VB入门技巧多例4.docx》由会员分享,可在线阅读,更多相关《VB入门技巧多例4.docx(17页珍藏版)》请在冰豆网上搜索。
VB入门技巧多例4
10.在状态栏显示无边框窗体图标。
1PrivateDeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhWnd_AsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
2PrivateDeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"(ByValhWnd_AsLong,ByValnIndexAsLong)AsLong
3ConstGWL_STYLE=(-16&)
4ConstWS_SYSMENU=&H80000
5PrivateSubForm_Load()
6'MakeForm'sIconvisibleinthetaskbar
7SetWindowLongMe.hWnd,GWL_STYLE,GetWindowLong(Me.hWnd,GWL_STYLE)OrWS_SYSMENU
8EndSub
11.记录窗体的大小及位置和程序中的一些设置
1PrivateSubForm_Load()
2Me.Width=GetSetting(App.Title,Me.Name,"Width",7200)
3Me.Height=GetSetting(App.Title,Me.Name,"Height",6300)
4Me.Top=GetSetting(App.Title,Me.Name,"Top",100)
5Me.Left=GetSetting(App.Title,Me.Name,"Left",100)
6Check1.Value=GetSetting(App.Title,Me.Name,"check1",0)
7EndSub
8PrivateSubForm_Unload(CancelAsInteger)
9CallSaveSetting(App.Title,Me.Name,"Width",Me.Width)
10CallSaveSetting(App.Title,Me.Name,"Height",Me.Height)
11CallSaveSetting(App.Title,Me.Name,"Top",Me.Top)
12CallSaveSetting(App.Title,Me.Name,"Left",Me.Left)
13CallSaveSetting(App.Title,Me.Name,"check1",Check1.Value)
14EndSub
13.无边框窗体的右键菜单
设计无边框窗体时,如果使用菜单编辑器,就会自动改变成有边框的窗体,此时,可以在另外一个窗体中(一般情况下你的程序应该不止一个窗体的吧,如果真的只有一个,可以利用其他人写的类,添加右键)编辑菜单(VISIBLE属性设为FALSE),然后在本窗体中调用。
调用形式如下:
1PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
2IfButton=2Then
3PopupMenuForm2.mymenu
4EndIf
5EndSub
14.创建圆角无边框窗体
1PrivateDeclareFunctionCreateRoundRectRgnLib"gdi32"(ByValX1AsInteger,ByValY1_AsInteger,ByValX2AsInteger,ByValY2AsInteger,ByValx3AsInteger,ByValy3As_Integer)AsLong
2PrivateDeclareFunctionDeleteObjectLib"gdi32"(ByValhObjectAsLong)AsLong
3PrivateDeclareFunctionSetWindowRgnLib"user32"(ByValhwndAsLong,ByValhrgnAs_Long,ByValbRedrawAsBoolean)AsLong
4PrivateSubForm_Load()
5hround=CreateRoundRectRgn(0,0,ScaleX(Form1.ScaleWidth,vbTwips,vbPixels),_ScaleY(Form1.ScaleHeight,vbTwips,vbPixels),20,20)
6SetWindowRgnMe.hwnd,hround,True
7DeleteObjecthround
8EndSub
15.拖动没有标题栏的窗体
方法一:
1PrivateDeclareFunctionReleaseCaptureLib"user32"()AsLong
2PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAs_Long,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
3PrivateConstHTCAPTION=2
4PrivateConstWM_NCLBUTTONDOWN=&HA1
5PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
6DimnclAsLong
7DimrelAsLong
8IfButton=1Then
9i=ReleaseCapture()
10ncl=SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0)
11EndIf
12EndSub
方法二:
回调函数
1'module:
2PublicConstGWL_WNDPROC=(-4)
3PublicConstWM_NCHITTEST=&H84
4PublicConstHTCLIENT=1
5PublicConstHTCAPTION=2
6DeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"(ByVal_lpPrevWndFuncAsLong,ByValhWndAsLong,ByValMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
7DeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"(ByValhWndAs_
8Long,ByValnIndexAsLong)AsLong
9DeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhWndAs_
10Long,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
11PublicprevWndProcAsLong
12FunctionWndProc(ByValhWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVal_ParamAsLong)AsLong
13WndProc=CallWindowProc(prevWndProc,hWnd,Msg,wParam,lParam)
14IfMsg=WM_NCHITTESTAndWndProc=HTCLIENTThen
15WndProc=HTCAPTION
16EndIf
17EndFunction
18窗体中:
19PrivateSubForm_Load()
20prevWndProc=GetWindowLong(Me.hWnd,GWL_WNDPROC)
21SetWindowLongMe.hWnd,GWL_WNDPROC,AddressOfWndProc
22EndSub
23PrivateSubForm_Unload(CancelAsInteger)
24SetWindowLongMe.hWnd,GWL_WNDPROC,prevWndProc
25EndSub
16.半透明窗体
1PrivateDeclareFunctionSetLayeredWindowAttributesLib"user32"(ByValhwndAsLong,_ByValcrKeyAsLong,ByValbAlphaAsByte,ByValdwFlagsAsLong)AsLong
2PrivateConstWS_EX_LAYERED=&H80000
3PrivateConstLWA_ALPHA=&H2
4PrivateConstGWL_EXSTYLE=(-20)
5PrivateDeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"(ByVal_
6hwndAsLong,ByValnIndexAsLong)AsLong
7PrivateDeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByVal_
8hwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
9PrivateSubForm_Load()
10DimrtnAsLong
11rtn=GetWindowLong(Me.hwnd,GWL_EXSTYLE)'取的窗口原先的样式
12rtn=rtnOrWS_EX_LAYERED'使窗体添加上新的样式WS_EX_LAYERED
13SetWindowLongMe.hwnd,GWL_EXSTYLE,rtn'把新的样式赋给窗体
14SetLayeredWindowAttributesMe.hwnd,0,200,LWA_ALPHA
15EndSub
17.开机启动(函数及常数声明略)
1PrivateSubForm_Load()
2DimhKeyAsLong,SubKeyAsString,ExeAsString
3SubKey="Software\Microsoft\Windows\CurrentVersion\Run"
4Exe="可执行文件的路径"
5RegCreateKeyHKEY_CURRENT_USER,SubKey,hKey
6RegSetvalueExhKey,"autorun",0,REG_SZ,ByValExe,LenB(StrConv(Exe,vbFromUnicode))+1
7RegCloseKeyhKey
8EndSub
18.关闭显示器
1PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwnd_
2AsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
3ConstWM_SYSCOMMAND=&H112&
4ConstSC_MONITORPOWER=&HF170&
5PrivateSubCommand1_Click()
6SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MONITORPOWER,ByVal2&'关闭显示器
7EndSub
8PrivateSubCommand2_Click()
9SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MONITORPOWER,ByVal-1&'打开显示器
10EndSub
19.在程序结束时自动关闭由SHELL打开的程序。
1PrivateConstPROCESS_QUERY_INFORMATION=&H400'关闭由SHELL函数打开的文件
2PrivateConstPROCESS_TERMINATE=&H1
3PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,_ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)AsLong
4PrivateDeclareFunctionTerminateProcessLib"kernel32"(ByValhProcessAsLong,_
5ByValuExitCodeAsLong)AsLong
6DimProcessIdAsLong
7PrivateSubCommand1_Click()
8ProcessId=Shell("notepad.exe.",vbNormalFocus)
9EndSub
10PrivateSubForm_Unload(CancelAsInteger)
11DimhProcessAsLong
12hProcess=OpenProcess(PROCESS_TERMINATEOrPROCESS_QUERY_INFORMATION,False,_ProcessId)
13CallTerminateProcess(hProcess,3838)
14EndSub
20.关闭、重启计算机
1PublicDeclareFunctionExitWindowsExLib"user32"Alias"ExitWindowsEx"(ByVal_
2uFlagsAsLong,ByValdwReservedAsLong)AsLong
3ExitWindowsEx1,0关机
4ExitWindowsEx0,1重新启动
21.显示关机提示框
1PrivateDeclareFunctionSHRestartSystemMBLib"shell32"Alias"#59"(ByValhOwner_
2AsLong,ByValsExtraPromptAsString,
3
4ByValuFlagsAsLong)AsLong
5ConstEWX_LOGOFF=0
6ConstEWX_SHUTDOWN=1
7ConstEWX_REBOOT=2
8ConstEWX_FORCE=4
9ConstEWX_POWEROFF=8
10PrivateSubCommand1_Click()
11SHRestartSystemMBMe.hWnd,PROMPT,EWX_LOGOFF
12EndSub
22.右键托盘图标后必须电击他才可以消失,怎么办?
CaseWM_RBUTTONUP'鼠标在图标上右击时弹出菜单
SetForegroundWindowMe.hwnd
Me.PopupMenumnuTray
加一句SetForegroundWindowMe.hwnd
23.将progressbar嵌入statusbar中
1PrivateDeclareFunctionSetParentLib"user32"(ByValhWndChildAsLong,ByVal_hWndNewParentAsLong)AsLong
2PrivateSubCommand1_Click()
3WithProgressBar1
4.Max=1000
5DimiAsInteger
6Fori=1To1000
7.Value=i
8Nexti
9EndWith
10EndSub
11PrivateSubForm_Load()
12ProgressBar1.Appearance=ccFlat
13SetParentProgressBar1.hWnd,StatusBar1.hWnd
14ProgressBar1.Left=StatusBar1.Panels
(1).Left
15ProgressBar1.Top=100
16ProgressBar1.Width=StatusBar1.Panels
(1).Width-50
17ProgressBar1.Height=StatusBar1.Height-150
18EndSub'相对位置你可以自己再调一下
24.使你的程序界面具有XP风格产生一个和你的可执行程序同名的后缀为exe.manifest的文件,并和可执行文件放在同一路径中。
代码中加入:
1PrivateDeclareSubInitCommonControlsLib"comctl32.dll"()
2PrivateSubForm_Initialize()
3InitCommonControls
4EndSub
注意:
1工具栏控件一定要用MicrosoftWindowsCommonControls5.0,而不要用MicrosoftWindowsCommonControls6.0。
因为此
InitCommonControlsAPI函数是位于comctl32.dll(MicrosoftWindowsCommonControls5.0控件的动态链接库中)。
2放在FRAME控件中的单远按钮有些“麻烦”!
为了解决此问题,可以将单选按钮放在PICTURE控件中(以PICTURE控件作为容器),再将
PICTURE控件放在FRAME控件中,就可以了。
3必须编译之后才能看到效果
exe.manifest文件中的内容,可用notepad编辑。
1
xmlversion="1.0"encoding="UTF-8"standalone="yes"?
>
2 schemas-microsoft-com: asm.v1"manifestVersion="1.0"> 3 4version="1.0.0.0" 5processorArchitecture="X86" 6name="CompanyName.ProductName.YourApp" 7type="win32" 8/> 9 10 11 12 13type="win32" 14name="Microsoft.Windows.Common-Controls" 15version="6.0.0.0" 16processorArchitecture="X86" 17publicKeyToken="6595b64144ccf1df" 18language="*" 19/> 20 21 22 25.如何打印PictureBox中的所有控件 添加另外一个PictureBox,然后: 1PrivateConstWM_PAINT=&HF 2PrivateConstWM_PRINT=&H317 3PrivateConstPRF_CLIENT=&H4& 4PrivateConstPRF_CHILDREN=&H10& 5PrivateConstPRF_OWNED=&H20& 6PrivateConstPHYSICALOFFSETXAsLong=112 7PrivateConstPHYSICALOFFSETYAsLong=113 8PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwnd_ 9AsLong,ByValwMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong 10PrivateDeclareFunctionGetDeviceCapsLib"gdi32"(ByValhdcAsLong,ByValnindex_ 11AsLong)AsLong 12privateSubForm_Load() 13Picture1.AutoRedraw=True 14Picture2.AutoRedraw=True 15Picture2.Bo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 入门 技巧