VB6 0中的視窗控制技巧(2)

2021-05-24 07:41:56 字數 4832 閱讀 8774

讓視窗一直在上面

很多流行軟體都有這樣乙個選項:always on top。它可以讓視窗在最上面,別的視窗不能覆蓋它。我們在 vb 中,可以使用下面的方法來實現:

private const swp_nosize = &h1

private const swp_nomove = &h2

private const swp_nozorder = &h4

private const swp_noredraw = &h8

private const swp_noactivate = &h10

private const swp_framechanged = &h20

private const swp_showwindow = &h40

private const swp_nocopybits = &h80

private const swp_noownerzorder = &h200

private const swp_drawframe = swp_framechanged

private const swp_noreposition = swp_noownerzorder

private const hwnd_top = 0

private const hwnd_bottom = 1

private const hwnd_topmost = -1

private const hwnd_notopmost = -2

private declare function setwindowpos lib "user32" ( _

byval hwnd as long, _

byval hwndinsertafter as long, _

byval x as long, _

byval y as long, _

byval cx as long, _

byval cy as long, _

byval wflags as long) as long

private mbontop as boolean

private property let ontop (setting as boolean)

if setting then

setwindowpos hwnd, -1, 0, 0, 0, 0, swp_nomove or swp_nosize

else

setwindowpos hwnd, -2, 0, 0, 0, 0, swp_nomove or swp_nosize

end if

mbontop = setting

end property

private property get ontop() as boolean

'return the private variable set in property let

ontop = mbontop

end property

呼叫 ontop=true 即可讓視窗 always on top。

建立無 icon 的視窗

我們在很多時候都需要那種無 icon 的 視窗,如「關於……」「查詢」等。在 vb 中,我們可以按以下步驟來建立此類視窗:

1、設定視窗的 borderstyle = 3;

2、在 form_load 中加入:me.icon = loadpicture("")

建立不規則視窗

win32 api 有很多讓你意想不到的功能。要建立特殊的不規則視窗看上去似乎很難。但我們如果我們說我們用幾行**就可以實現,這似乎不可思議。但事實就是如此!請試試:

private declare function createellipticrgn lib "gdi32" (byval x1 as long, byval y1 as long, byval x2 as long, byval y2 as long) as long

private declare function setwindowrgn lib "user32" (byval hwnd as long, byval hrgn as long, byval bredraw as boolean) as long

private sub form_load()

show 'the form!

setwindowrgn hwnd, createellipticrgn(0, 0, 300, 200), true

end sub

上述**可以建立乙個橢圓形狀的視窗。怎麼樣??

用vb6.0獲取正在系統中執行的視窗標題

大家知道,在許多windows軟體的安裝程式中,時常可以看到以某種顏色由淺至深的漸變為背景的視窗。使用vb製作這類視窗的方法有不少,而通過呼叫api函式繪製漸變的視窗背景色,似乎是一種既簡單又節省資源的方法。

首先,在module檔案中加入下列宣告語句:

declare function createsolidbrush lib"gdi"(byval crcolor as long) as integer

declare function fillrect lib"user"(byval hdc as integer,lprect as rect,byval hbrush as integer)as integer

declare function deleteobject lib"gdi"(byval hobject as integer)as integer

type rect

left as integer

top as integer

right as integer

bottom as integer

endtype

然後,在視窗的paint事件中加入下列**:

private sub form_paint()

dim color as integer

dim hbrush as integer

dim oldmode as integer

dim retval as integer

dim stepsize as integer

dim x as integer

dim fillarea as rect

oldmode%=me.scalemode

me.scalemode=3

stepsize%=1+me.scaleheight/80

color%=255

fillarea.left=0

fillarea.right=me.scalewidth

fillarea.top=0

fillarea.bottom=stepsize%

for x%=1 to 80

hbrush%=createsolidbrush (rgb(0,0,color%))

retval%=fillrect(me.hdc,fillarea,hbrush%)

retval%=deleteobject(hbrush%)

color%=color%-4

if color% <0 then color%="0

fillarea.top=fillarea.bottom

fillarea.bottom=fillarea.bottom+stepsize%

next

me.scalemode=oldmode%

endsub

按f5執行,就會出現乙個以從上至下、由淺至深的漸變藍色為背景的視窗。對上述**稍加改動,便可製作出各種顏色和水平方向的漸變背景。

如何在vb和delphi中快速實現立體化視窗顯示

在vb和delphi中,我們可以很方便地建立具有立體化觀感的視窗,這也是近兩年來,win3.x中較為流行的顯示方式。許多專業化的軟體都採用了這種立體化的視窗和相應的控制項,達到了賞心悅目的效果。下面我們來談談如何在目前最流行的兩種win程式語言中實現這樣的效果。

其實,無論是vb還是delphi,要實現這種效果都較為容易,在程式設計中,並不需要呼叫外部的dll,在程式執行時,會自動呼叫ctl3dv2.dll。

我們先來看看如何在vb中實現:

1.新建乙個視窗。

2.在視窗form的屬性列表中有一項auto3d屬性,預設值為false,將其設定為true。它是控制vb中是否顯示立體視窗的重要屬性。

3.在form的屬性列表中還有一項borderstyle屬性,這是控制視窗的邊框顯示型別,將其設定為3-fixed double。

4.現在可以執行這個程式了,你將會看到立體視窗出現。

將auto3d屬性設定為true,還有乙個很好的***,那就是在這個視窗上的text、frame、checkbox、optionbutton和listbox都自動具有了立體效果。

在delphi中實現似乎顯得更加容易和直觀:

1.新建乙個視窗。

2.在視窗form的屬性列表中有一項borderstyle屬性,它的預設值為bssizeable,表示邊界可以任意調整,將其重新設定為bsdialog。

3.執行程式,你會發現立體視窗出現了。(看來,delphi中將這種立體化視窗稱為「對話視窗」,確實如此,比如在word中,對話視窗都是這種立體化的顯示,而主視窗仍然是一般的風格。)

與vb中的auto3d類似,在delphi中有乙個屬性為ctl3d,將其設定為true,將使所有在這個視窗上的控制項具有立體觀感,並且這種變化是立刻反映的,而不象vb中在執行時才能看到。

在delphi的視窗form中,你還可以通過設定formstyle屬性為fsstayontop來輕而易舉的實現「永遠浮在其他視窗」上的效果。著名的「譯林」win版本就是用delphi寫的,它其中就有乙個「永遠在最上面」的功能,就是這樣實現的。

VB6 0中MsgBox函式的Bug

這個bug我發現已久但沒有貼出來,今天貼出來與大家共享以下。msgbox函式真的很方便,但大家不妨試試將乙個form startupposition設為2 用api函式setwindowpos置於最上,然後在這個form中呼叫msgbox函式,怎麼樣,程式沒反應了吧。其實它的原理很簡單,msgbox...

VB6 0 的快捷鍵

工作需要不得不搞vb6.0,那個難受啊 f1 顯示msdn幫助。當然你要安裝msdn,否則得不到真正的幫助了 f2 顯示物件瀏覽器。這裡你可以看到物件的各種屬性 方法與事件 f3 查詢一下個 f4 顯示當前選中控制項的屬性窗體 f5 執行程式 vb.net則是f8了 f7 由窗體設計切換到對應的 窗...

VB6 0 的快捷鍵

公司有部分軟體比較老,都是vb6做的軟體 目前還不斷在用 這個會有點幫助 f1 顯示msdn幫助。當然你要安裝msdn,否則得不到真正的幫助了 f2 顯示物件瀏覽器。這裡你可以看到物件的各種屬性 方法與事件 f3 查詢一下個 f4 顯示當前選中控制項的屬性窗體 f5 執行程式 vb.net則是f8了...