狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

為您的應用程序創建投影式立體窗口(陰影)

為您的應用程序創建投影式立體窗口(陰影)

更新時間:2024-04-12 文章作者:未知 信息來源:網絡 閱讀次數:

為您的應用程序建立投影式立體窗口(陰影)

--------------------------------------------------------------------------------

  一打開WINDOWS,看著四四方方立在桌面上的應用程序窗口,您是否有些厭倦?別心煩,在WINDOW世界里,只要您能為之"心動",生活總是美麗而又精彩的。因而許許多多愛好"多樣"的CFAN,便為自己的窗口做成了"透明的"、"不規則的"等樣式。筆者也心血來潮,將自己的窗口做成了"投影式立體窗口",見下圖1:
  怎么樣?Cool吧!

  其實,制作這樣的立體窗口不是非常難,其原理是這樣的(設要為hWnd窗口做個立體):1、獲取hWnd在屏幕上的位置(GetWindowRect),根據其位置為其建立三個投影窗口,分別命名LeftForm-左邊投影,DownForm-下面投影,RdForm-右下角投影;2、獲取三個投影窗口在屏幕上的位置信息,根據黑色漸變原理,將其寫入三個投影窗口中。注意:不能直接將其投影信息寫入屏幕DC中,否則的話,桌面將會被您繪的一踏糊涂。另外:窗口在移動、改變大小時,均應該重新繪制投影信息。這個在VB中不是非常容易做得到,因此我們需要為其增加一個Timer控件,在Timer事件監視這一系列的動作。

  好了,下面我們開始動手做做這種效果:

  1、啟動VB6.0,建立一個新的標準exe工程文件,將啟動主窗口FormName命名為"MainForm",并將ScaleMode設置為3,另外再新添建三個窗口,分別命名為"LeftForm","DownForm","RdForm",并且將其"BorderStyle"設置為"0-None",將各自的GotFocus事件中寫入如下代碼:

  MainForm.setfocus

  2、新建一個模塊API.bas(可以用"外接程序"中的"API瀏覽器"),插入如下代碼:



Public Const SRCCOPY = &HCC0020

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

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

Public Declare Function BitBlt Lib "gdi32" (
ByVal hDestDC As Long,
ByVal x As Long,
ByVal y As Long,
ByVal nWidth As Long,
ByVal nHeight As Long,
ByVal hSrcDC As Long,
ByVal xSrc As Long,
ByVal ySrc As Long,
ByVal dwRop As Long) As Long

Public Declare Function SetPixel Lib "gdi32" (
ByVal hdc As Long,
ByVal x As Long,
ByVal y As Long,
ByVal crColor As Long) As Long

Public Declare Function GetPixel Lib "gdi32" (
ByVal hdc As Long,
ByVal x As Long,
ByVal y As Long) As Long

Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long

Public Declare Function CreateCompatibleBitmap Lib "gdi32" (
ByVal hdc As Long,
ByVal nWidth As Long,
ByVal nHeight As Long) As Long

Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

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

'取色彩中的Red的值
Public Function GetRed(ByVal n As Long) As Integer
GetRed = n Mod 256&
End Function

'取色彩中的Green的值
Public Function GetGreen(ByVal n As Long) As Integer
GetGreen = (n \ 256&) Mod 256&
End Function

'取色彩中的Blue的值
Public Function GetBlue(ByVal n As Long) As Integer
GetBlue = n \ 65536
End Function

'獲取漸變色彩值
'入口參數:SrcColor 原色彩
' Steps 步驟數
' CurStep 當前的步子
' DstColor 目標色彩
'返回值:當月前的色彩值
Public Function GetTrienColor(ByVal scrColor As Long,
ByVal dstColor As Long, ByVal Steps As Integer,
ByVal curStep As Integer) As Long
Dim sR, sG, sB, dR, dG, dB As Integer
sR = GetRed(scrColor)
sG = GetGreen(scrColor)
sB = GetBlue(scrColor)
dR = GetRed(dstColor)
dG = GetGreen(dstColor)
dB = GetBlue(dstColor)
sR = sR + curStep * (dR - sR) / Steps
sG = sG + curStep * (dG - sG) / Steps
sB = sB + curStep * (dB - sB) / Steps
GetTrienColor = RGB(sR, sG, sB)
End Function

  其工程文件結構如圖2:
  圖2
  3、將MainForm窗體設計成如圖3,且將窗體Code中加入如下代碼:

Option Explicit
Dim ShowdawDepth As Integer
Dim WinX, WinY, WinW, WinH, wx, wy, xw, xh As Long
Dim ShowdawColor As Long

Private Sub GetWandH()
Dim r As RECT
wy = MainForm.Top
wx = MainForm.Left
Call GetWindowRect(MainForm.hwnd, r) '獲取當前窗口在屏幕上的位置
WinX = r.Left
WinY = r.Top
WinH = r.Bottom - r.Top + 1
WinW = r.Right - r.Left + 1
'重新調整左邊投影的位置
LeftForm.Left = CLng(ScaleX(r.Right, 3, 1) + 0.5)
LeftForm.Top = CLng(ScaleY(r.Top, 3, 1) + 0.5)
LeftForm.Width = xw
LeftForm.Height = CLng(ScaleY(WinH, 3, 1) + 0.5)
'重新調整下邊投影的位置
DownForm.Width = CLng(ScaleX(WinW, 3, 1) + 0.5)
DownForm.Height = xh
DownForm.Top = CLng(ScaleY(r.Bottom, 3, 1) + 0.5)
DownForm.Left = CLng(ScaleX(r.Left, 3, 1) + 0.5)
'重新調整右下角邊投影的位置
RdForm.Top = CLng(ScaleY(r.Bottom, 3, 1) + 0.5)
RdForm.Left = CLng(ScaleX(r.Right, 3, 1) + 0.5)
RdForm.Width = xw
RdForm.Height = xh
End Sub

Private Sub Command1_Click()
Unload MainForm
End Sub

Private Sub Form_Load()
ShowdawDepth = 10
xh = CLng(ScaleY(ShowdawDepth, 3, 1) + 0.5)
xw = CLng(ScaleX(ShowdawDepth, 3, 1) + 0.5)
ShowdawColor = 0
Timer1.Interval = 100
dlg.CancelError = True
labColor.BorderStyle = 1
labColor.BackStyle = 1
labColor.BackColor = ShowdawColor
End Sub

Private Sub Paint() '窗口繪制
Dim hScreenDc, hMemLeftDc, hMemDownDc, hMemRdDc, x, y As Long
Dim hMemLeftBit, hMemDownBit, hMemRdBit, curColor, srcColor As Long
LeftForm.Visible = False
DoEvents
DownForm.Visible = False
DoEvents
RdForm.Visible = False
DoEvents
hScreenDc = GetDC(0) '獲取桌面DC
hMemLeftDc = CreateCompatibleDC(hScreenDc)
hMemLeftBit = CreateCompatibleBitmap(hScreenDc, ShowdawDepth, WinH)
SelectObject hMemLeftDc, hMemLeftBit
hMemDownDc = CreateCompatibleDC(hScreenDc)
hMemDownBit = CreateCompatibleBitmap(hScreenDc, WinW, ShowdawDepth)
SelectObject hMemDownDc, hMemDownBit
hMemRdDc = CreateCompatibleDC(hScreenDc)
hMemRdBit = CreateCompatibleBitmap(hScreenDc, ShowdawDepth, ShowdawDepth)
SelectObject hMemRdDc, hMemRdBit
For y = 0 To WinH - 1
For x = 0 To ShowdawDepth - 1 '左邊的投影
srcColor = GetPixel(hScreenDc, WinW + WinX + x, WinY + y)
If srcColor <> -1 Then
If y < ShowdawDepth And x < y Or y >= ShowdawDepth Then
curColor = GetTrienColor(ShowdawColor, srcColor, ShowdawDepth, x)
Else
curColor = srcColor
End If
SetPixel hMemLeftDc, x, y, curColor
End If
Next x
Next y
For y = 0 To ShowdawDepth - 1 '右下角的投影
For x = 0 To ShowdawDepth - 1
srcColor = GetPixel(hScreenDc, WinW + WinX + x, WinY + WinH + y)
If srcColor <> -1 Then
If x <= y Then
curColor = GetTrienColor(ShowdawColor, srcColor, ShowdawDepth, y)
Else
curColor = GetTrienColor(ShowdawColor, srcColor, ShowdawDepth, x)
End If
SetPixel hMemRdDc, x, y, curColor
End If
Next x
Next y
For y = 0 To ShowdawDepth - 1
For x = 0 To WinW - 1
srcColor = GetPixel(hScreenDc, WinX + x, WinY + WinH + y)
If srcColor <> -1 Then
If y < ShowdawDepth And x >= y Or x >= ShowdawDepth Then
curColor = GetTrienColor(ShowdawColor, srcColor, ShowdawDepth, y)
Else
curColor = srcColor
End If
SetPixel hMemDownDc, x, y, curColor
End If
Next x
Next y
LeftForm.Visible = True
DoEvents
Call BitBlt(LeftForm.hdc, 0, 0, ShowdawDepth, WinH, hMemLeftDc, 0, 0, SRCCOPY)
DownForm.Visible = True
DoEvents
Call BitBlt(DownForm.hdc, 0, 0, WinW, ShowdawDepth, hMemDownDc, 0, 0, SRCCOPY)
RdForm.Visible = True
DoEvents
Call BitBlt(RdForm.hdc, 0, 0, ShowdawDepth, ShowdawDepth, hMemRdDc, 0, 0, SRCCOPY)
DeleteDC hMemLeftDc
DeleteDC hMemDownDc
DeleteDC hScreenDc
DeleteDC hMemRdDc
DeleteObject hMemLeftBit
DeleteObject hMemRdBit
DeleteObject hMemDownBit
End Sub

Private Sub Form_Resize()
If MainForm.WindowState = vbNormal Then '窗口在正常狀態下才顯示立體投影
If MainForm.Height < 2 * xh Then MainForm.Height = 2 * xh
If MainForm.Width < 2 * xw Then MainForm.Width = 2 * xw
Call GetWandH
Call Paint
Else
wx = -1
LeftForm.Visible = False
DownForm.Visible = False
RdForm.Visible = False
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
Unload LeftForm
Unload DownForm
Unload RdForm
End Sub

Private Sub labColor_Click()
On Error GoTo exitLabColor
dlg.ShowColor
ShowdawColor = dlg.Color
labColor.BackColor = ShowdawColor
Call Paint
exitLabColor:
End Sub

Private Sub Timer1_Timer()
If MainForm.WindowState = vbNormal And (MainForm.Left <> wx Or MainForm.Top <> wy) Then
Call GetWandH
Call Paint
End If
End Sub

Private Sub Form_Paint()
Call GetWandH
Call Paint
End Sub

Private Sub UpDown_Change()
ShowdawDepth = UpDown.Max + UpDown.Min - UpDown.Value
ShowSize.Text = ShowdawDepth
xh = CLng(ScaleY(ShowdawDepth, 3, 1) + 0.5)
xw = CLng(ScaleX(ShowdawDepth, 3, 1) + 0.5)
Call GetWandH
Call Paint
End Sub

  此至,您可以按下Play,看看您親手做的這種投影效果。注意:以上的投影大小不能太大,否則速度會變慢。(2000年2月14日完稿,本文發表于《電腦編程技術與維護》2000年第7期,Word版文檔下載地址為:http://www.i0713.net/Download/Prog/Dragon/Doc/Showdaw.doc,

源程序下載地址:htttp://www.i0713.net/Download/Prog/Dragon/Prog/Showdaw.zip

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
欧美v日韩v国产v| 欧美成人精品福利| 亚洲特色特黄| 成人av网址在线| 欧美最猛黑人xxxxx猛交| 麻豆精品新av中文字幕| 日韩电影在线免费| 日韩欧美在线综合网| 久久久99精品免费观看| 欧美在线播放一区| 日韩国产精品91| 婷婷综合另类小说色区| 亚洲电影在线免费观看| 天堂一区二区在线免费观看| 麻豆精品网站| 96av麻豆蜜桃一区二区| 成人av电影免费在线播放| 国产一区欧美日韩| 国产一区在线精品| 图片区小说区国产精品视频| 亚洲一区二区三区不卡国产欧美| 欧美日韩成人一区| 一区二区黄色| 91国产成人在线| 欧美亚洲另类激情小说| 成人黄色电影在线 | 精品国产sm最大网站| 久久亚洲一区二区| 99亚洲精品| 久久久久国产精品一区三寸| 亚洲每日在线| 国产美女诱惑一区二区| 91行情网站电视在线观看高清版| 国产欧美一区二区三区另类精品 | 国产精品一区二区x88av| 国产精品一区二区久久不卡| 成人黄色片在线观看| 欧美日本一区二区视频在线观看 | 欧美午夜精品久久久久久孕妇| 久久久国产一区二区三区四区小说| 老鸭窝毛片一区二区三区| 久久99精品一区二区三区三区| 亚洲自拍偷拍av| 午夜日韩在线观看| 国产大片一区二区| 亚洲免费av观看| 国产乱子轮精品视频| 9色porny自拍视频一区二区| 蜜桃久久久久久| 亚洲一区在线观看网站| 国产日韩高清在线| 一区二区三区四区激情| 国产精品国产馆在线真实露脸| 欧美激情在线看| 亚洲二区在线视频| 欧美亚洲精品一区| 久久久国产综合精品女国产盗摄| 影音先锋中文字幕一区| 校园春色综合网| 91精品国产91久久综合桃花| 久久色.com| 激情综合色播激情啊| 欧美国产91| 色美美综合视频| 欧美二区在线观看| 国产精品美日韩| 久久精品二区亚洲w码| 日韩视频精品| 日韩精品一区二区在线| 亚洲狠狠爱一区二区三区| 日本一区二区三区免费乱视频| 欧美草草影院在线视频| 亚洲精品国产高清久久伦理二区 | 亚洲欧美日韩精品久久久久| 国产日产欧美精品一区二区三区| 3d成人h动漫网站入口| 欧美一区二区三区在线视频| 久久野战av| 欧美激情一区二区三区蜜桃视频| 欧美情侣在线播放| 欧美日本国产视频| 国产日韩精品一区| 亚洲全部视频| 欧美性色综合网| 香蕉影视欧美成人| 午夜久久黄色| 91精品国产一区二区| 久久精品国产久精国产爱| 在线成人亚洲| 久久网这里都是精品| 国产精品18久久久久久久网站| 国产.欧美.日韩| 久久一二三区| 樱桃视频在线观看一区| 雨宫琴音一区二区在线| 26uuu精品一区二区三区四区在线| 美日韩在线观看| 91精品国产麻豆| 伊人久久综合| 国产人妖乱国产精品人妖| 天天综合天天综合色| 日本伊人色综合网| 一区二区三区高清视频在线观看| 国产综合色产| 欧美三级蜜桃2在线观看| 一区二区三区四区国产精品| 久久精品999| 色婷婷av一区| 国产精品国产精品国产专区不蜜| 亚洲美腿欧美偷拍| 欧美日韩三级电影在线| 国产亚洲精久久久久久| 亚洲欧美日韩久久| 亚洲大胆女人| 亚洲精品日韩综合观看成人91| 亚洲一级电影视频| 一本色道久久综合亚洲精品高清| 日韩欧美一级片| 偷拍自拍另类欧美| 国产美女娇喘av呻吟久久| 欧美放荡的少妇| 国产91高潮流白浆在线麻豆 | 国产成人综合自拍| 欧美日韩不卡一区二区| 国产精选一区二区三区| 1024成人| 一区二区三区不卡视频| 欧洲一区二区av| 久草精品在线观看| 日韩午夜在线观看视频| 国产精品a级| 一区二区三区在线看| 亚洲欧美日韩在线观看a三区| 久久精品视频在线免费观看| 日韩视频精品在线观看| 久久99热99| 久久精品一级爱片| 久久狠狠婷婷| 91免费版在线看| 久久久一区二区三区| 首页综合国产亚洲丝袜| 91精品国产91综合久久蜜臀| 一区二区三区久久| 欧美日本韩国一区| 欧美激情91| 国产精品午夜电影| 久久午夜精品一区二区| 99视频精品全部免费在线| 亚洲一线二线三线视频| 欧美一区二区精品| 欧美亚洲自偷自偷| 成人aa视频在线观看| 久久婷婷国产综合国色天香| aa日韩免费精品视频一| 久久国产麻豆精品| 欧美另类变人与禽xxxxx| 国产一区再线| 久久97超碰国产精品超碰| 亚洲欧美一区二区视频| 91精品综合久久久久久| www.亚洲免费av| 日本伊人精品一区二区三区观看方式| 国产日韩一级二级三级| 国产不卡视频一区| 午夜久久福利影院| 欧美激情在线一区二区三区| 在线国产亚洲欧美| 亚洲国产日本| 97se亚洲国产综合自在线| 国产精品素人视频| 欧美一区三区四区| 色综合久久99| 99在线热播精品免费99热| 91在线观看免费视频| 国产精品一区二区免费不卡| 久久免费美女视频| 欧美麻豆精品久久久久久| 久久久999| 国产日韩欧美一区二区三区在线观看| 亚洲va欧美va人人爽| 亚洲素人一区二区| 久久久国际精品| 日韩免费看网站| 一本色道久久综合亚洲二区三区| 日韩精品乱码av一区二区| 亚洲色图都市小说| 中文字幕巨乱亚洲| 久久久不卡影院| 久久婷婷色综合| 国产精品久久福利| 激情综合亚洲精品| 欧美jjzz| 中文字幕一区二区日韩精品绯色| 一本色道久久综合亚洲精品不卡| 老司机精品视频一区二区三区| 精品国产一区二区三区四区四 | 欧美日韩免费视频| 午夜在线一区| 色屁屁一区二区| 女人香蕉久久**毛片精品|