netVB子类化教程Word格式.docx
- 文档编号:21843321
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:15
- 大小:31.09KB
netVB子类化教程Word格式.docx
《netVB子类化教程Word格式.docx》由会员分享,可在线阅读,更多相关《netVB子类化教程Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
通过Enabled属性的控制,来显示重画控件在Unenabled状态时的效果
IfCommand1.EnabledThen
Command1.Enabled=False
Else
Command1.Enabled=True
EndIf
EndSub
PrivateSubForm_Load()
安装子类化入口
CallInit(Me.hWnd)
PrivateSubForm_Unload(CancelAsInteger)
卸载子类化
CallTerminate(Me.hWnd)
④加入一个模块并录入代码
OptionExplicit
'
--引用Win32Api–
得到默认的窗口消息处理过程的地址需要的API
PrivateDeclareFunctionGetWindowLongLib"
user32"
Alias"
GetWindowLongA"
(ByValhWndAsLong,ByValnIndexAsLong)AsLong
设置一个新的窗口消息处理过程的地址需要的API
PrivateDeclareFunctionSetWindowLongLib"
SetWindowLongA"
(ByValhWndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
给指定的窗口消息处理过程传递消息需要的API
PrivateDeclareFunctionCallWindowProcLib"
CallWindowProcA"
(ByVallpPrevWndFuncAsLong,ByValhWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
内存拷贝
PrivateDeclareSubCopyMemoryLib"
kernel32"
RtlMoveMemory"
(DestinationAsAny,SourceAsAny,ByValLengthAsLong)
ConstGWL_WNDPROC=(-4&
)
DimPrevWndProc&
PrivateConstWM_DESTROY=&
H2
PrivateConstWM_DRAWITEM=&
H2B
PrivateTypeRECT
LeftAsLong
TopAsLong
RightAsLong
BottomAsLong
EndType
WM_DRAWITEM需要处理的结构体
PrivateTypeDRAWITEMSTRUCT
CtlTypeAsLong
CtlIDAsLong
itemIDAsLong
itemActionAsLong
itemStateAsLong
hwndItemAsLong
hdcAsLong
rcItemAsRECT
itemDataAsLong
Ownerdraw常量
PrivateConstODT_BUTTON=4
Ownerdraw动作
PrivateConstODA_DRAWENTIRE=&
H1
PrivateConstODA_SELECT=&
PrivateConstODA_FOCUS=&
H4
Ownerdraw状态
PrivateConstODS_SELECTED=&
PrivateConstODS_GRAYED=&
PrivateConstODS_DISABLED=&
PrivateConstODS_CHECKED=&
H8
PrivateConstODS_FOCUS=&
H10
得到指定窗口的文本
PrivateDeclareFunctionGetWindowTextLib"
GetWindowTextA"
(ByValhWndAsLong,ByVallpStringAsString,ByValcchAsLong)AsLong
GDI相关API函数,重画Button时使用
PrivateDeclareFunctionSelectObjectLib"
gdi32"
(ByValhdcAsLong,ByValhObjectAsLong)AsLong
PrivateDeclareFunctionCreateSolidBrushLib"
(ByValcrColorAsLong)AsLong
PrivateDeclareFunctionDeleteObjectLib"
(ByValhObjectAsLong)AsLong
PrivateDeclareFunctionGetSysColorLib"
(ByValnIndexAsLong)AsLong
色彩常量
ConstCOLOR_SCROLLBAR=0
ConstCOLOR_BACKGROUND=1
ConstCOLOR_ACTIVECAPTION=2
ConstCOLOR_INACTIVECAPTION=3
ConstCOLOR_MENU=4
ConstCOLOR_WINDOW=5
ConstCOLOR_WINDOWFRAME=6
ConstCOLOR_MENUTEXT=7
ConstCOLOR_WINDOWTEXT=8
ConstCOLOR_CAPTIONTEXT=9
ConstCOLOR_ACTIVEBORDER=10
ConstCOLOR_INACTIVEBORDER=11
ConstCOLOR_APPWORKSPACE=12
ConstCOLOR_HIGHLIGHT=13
ConstCOLOR_HIGHLIGHTTEXT=14
ConstCOLOR_BTNFACE=15
ConstCOLOR_BTNSHADOW=16
ConstCOLOR_GRAYTEXT=17
ConstCOLOR_BTNTEXT=18
ConstCOLOR_INACTIVECAPTIONTEXT=19
ConstCOLOR_BTNHIGHLIGHT=20
PrivateDeclareFunctionFillRectLib"
(ByValhdcAsLong,lpRectAsRECT,ByValhBrushAsLong)AsLong
PrivateDeclareFunctionFrameRectLib"
PrivateDeclareFunctionCreatePenLib"
(ByValnPenStyleAsLong,ByValnWidthAsLong,ByValcrColorAsLong)AsLong
画笔格式
ConstPS_SOLID=0
ConstPS_DASH=1'
-------
ConstPS_DOT=2'
.......
ConstPS_DASHDOT=3'
_._._._
ConstPS_DASHDOTDOT=4'
_.._.._
ConstPS_NULL=5
ConstPS_INSIDEFRAME=6
ConstPS_USERSTYLE=7
ConstPS_ALTERNATE=8
ConstPS_STYLE_MASK=&
HF
PrivateDeclareFunctionMoveToExLib"
(ByValhdcAsLong,ByValxAsLong,ByValyAsLong,lpPointAsPOINTAPI)AsLong
PrivateDeclareFunctionLineToLib"
(ByValhdcAsLong,ByValxAsLong,ByValyAsLong)AsLong
PrivateTypePOINTAPI
xAsLong
yAsLong
PrivateDeclareFunctionDrawTextLib"
DrawTextA"
(ByValhdcAsLong,ByVallpStrAsString,ByValnCountAsLong,lpRectAsRECT,ByValwFormatAsLong)AsLong
PrivateConstDT_SINGLELINE=&
H20
PrivateConstDT_CENTER=&
PrivateConstDT_VCENTER=&
PrivateDeclareFunctionSetTextColorLib"
(ByValhdcAsLong,ByValcrColorAsLong)AsLong
PrivateDeclareFunctionSetBkModeLib"
(ByValhdcAsLong,ByValnBkModeAsLong)AsLong
PrivateConstTRANSPARENT=1
–声明结束--
PrivateSubDrawButton(ByValhWndAsLong,ByValhdcAsLong,rctAsRECT,ByValnStateAsLong)
DimPAsPOINTAPI
DimsAsString
DimhbrAsLong
DimhpenAsLong
hbr=CreateSolidBrush(GetSysColor(COLOR_BTNFACE))'
获得按钮的背景颜色RGB(231,231,231)
SelectObjecthdc,hbr'
选择使用刷子
FillRecthdc,rct,hbr
DeleteObjecthbr
画文字时背景为透明状
SetBkModehdc,TRANSPARENT
得到Button的Caption
s=String$(255,"
"
GetWindowTexthWnd,s,255
s=Trim$(s)
根据Button的Enabled状态进行重画
If(nStateAndODS_DISABLED)=ODS_DISABLEDThen
画外围灰框
hbr=CreateSolidBrush(RGB(132,130,132))
SelectObjecthdc,hbr
FrameRecthdc,rct,hbr
画内侧3D效果->
亮色
hpen=CreatePen(PS_SOLID,1,RGB(255,255,255))
SelectObjecthdc,hpen
MoveToExhdc,rct.Left+1,rct.Top+1,P
LineTohdc,rct.Right-1,rct.Top+1
LineTohdc,rct.Left+1,rct.Bottom-1
DeleteObjecthpen
暗色
hpen=CreatePen(PS_SOLID,1,RGB(189,190,189))
MoveToExhdc,rct.Left+1,rct.Bottom-2,P
LineTohdc,rct.Right-1,rct.Bottom-2
MoveToExhdc,rct.Right-2,rct.Top+1,P
LineTohdc,rct.Right-2,rct.Bottom-1
画阴影文字
rct.Left=rct.Left+1
rct.Right=rct.Right+1
rct.Bottom=rct.Bottom+1
rct.Top=rct.Top+1
SetTextColorhdc,GetSysColor(COLOR_BTNHIGHLIGHT)
DrawTexthdc,s,LenB(StrConv(s,vbFromUnicode)),rct,DT_CENTEROrDT_SINGLELINEOrDT_VCENTER
rct.Left=rct.Left-1
rct.Right=rct.Right-1
rct.Bottom=rct.Bottom-1
rct.Top=rct.Top-1
SetTextColorhdc,GetSysColor(COLOR_GRAYTEXT)
ExitSub
按下Button时重画
If(nStateAndODS_SELECTED)=ODS_SELECTEDThen
画内部区域颜色
hbr=CreateSolidBrush(RGB(156,186,222))
hbr=CreateSolidBrush(RGB(99,125,165))
hpen=CreatePen(PS_SOLID,1,RGB(123,158,206))
hpen=CreatePen(PS_SOLID,1,RGB(181,203,231))
SetTextColorhdc,GetSysColor(COLOR_BTNTEXT)
Button得到焦点时重画
If(nStateAndODS_FOCUS)=ODS_FOCUSThen
hbr=CreateSolidBrush(RGB(173,203,239))
hbr=CreateSolidBrush(RGB(107,138,181))
hpen=CreatePen(PS_SOLID,1,RGB(198,223,247))
hpen=CreatePen(PS_SOLID,1,RGB(132,174,222))
LineTohdc,rct.Right
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- netVB 子类 教程