VB使用堆疊對話框的一個方法
2024-07-21 02:20:36
供稿:網友
中國最大的web開發資源網站及技術社區,
第一次使用vb,想做一個堆疊對話框的程序。
就是想標簽控件那種,但是不想把每個頁上的控件都放在一個主控件里。想把每個頁都使用一個form或propertypage來組織。
經過大量的實驗和csdn上同仁的友情幫助,略有小成,不敢獨享,放在這里,拋磚引玉。希望大家還有更好的辦法。
step 1 聲明如下說明
public declare function setparent lib "user32" (byval hwndchild as long, byval hwndnewparent as long) as long
public declare function setwindowlong lib "user32" alias "setwindowlonga" (byval hwnd as long, byval nindex as long, byval dwnewlong as long) as long
public declare function getwindowlong lib "user32" alias "getwindowlonga" (byval hwnd as long, byval nindex as long) as long
step 2 在主窗體上放置frame控件(fracontainer), 以放置堆疊頁面的容器
step 3 建立函數initializepage
private sub initializepage(frmpage as form, hwndparent as long)
dim dwstyle as long
load frmpage
dwstyle = getwindowlong(frmpage.hwnd, -16)
dwstyle = dwstyle or &h40000000
setwindowlong frmpage.hwnd, -16, dwstyle
setparent frmpage.hwnd, hwndparent
end sub
step 4 建立需要切換的頁面form1 和 form2, 修改為無邊框,并將相應的起始屬性(startupposition)改為manual,left top 均為0
step 5 建立頁初始化函數
public sub initializepages()
set frm1 = new form1
set frm2 = new form2
initializepage frm1, frmmain.fracontainer.hwnd
initializepage frm2, frmmain.fracontainer.hwnd
end sub
step 6 建立全局變量frmactive 保存當前活動的頁面
step 7 建立切換頁面切換函數
public sub changepage(frmchange as form)
if frmchange is nothing then exit sub
if not frmactive is nothing then
if frmactive.hwnd <> frmchange.hwnd then
frmactive.hide
frmchange.show 0, me
set frmactive = frmchange
end if
else
frmchange.show 0, me
set frmactive = frmchange
end if
end sub
step 8 在主頁面的unload 中加入如下代碼
unload frm1
unload frm2
set frm1 = nothing
set frm2 = nothing
如此一個可以切換兩個頁面的代碼完成,不過還有一些問題,
1. 在每個頁面切入切出時沒有相應的處理函數。
2. 頁面沒有焦點。
對于切入切出的問題,本來想用如下方式,從form中派生一個propertyform類,然后加入onsetactive 和 onkillactive函數,然后所有頁面從此類生成,但是不知道怎么做,呵呵。vb的功能還是弱了點。c++我可以為所欲為,vb不會就沒有一點辦法。:)
希望vb高手可以指教