無邊框窗體最大化,但是不檔住工作列

2021-04-02 12:22:50 字數 4257 閱讀 2998

個窗體,乙個模組:

窗體上兩個按鈕,窗體的borderstyle屬性為0,窗體**如下:

option explicit

private type rect

left as long

top as long

right as long

bottom as long

end type

private declare function getwindowrect lib ""user32"" (byval hwnd as long, lprect as rect) as long

private declare function findwindow lib ""user32"" alias ""findwindowa"" (byval lpclassname as string, byval lpwindowname as string) as long

private declare function findwindowex lib ""user32"" alias ""findwindowexa"" (byval hwnd1 as long, byval hwnd2 as long, byval lpsz1 as string, byval lpsz2 as string) as long

private declare function getdesktopwindow lib ""user32"" () as long

private sub command1_click()

me.windowstate = 2

end sub

private sub command2_click()

unload me

end sub

private sub form_load()

dim htaskbar as long

htaskbar = findwindow(""shell_traywnd"", vbnullstring)

debug.print htaskbar

dim rc as rect

dim i as long

i = getwindowrect(htaskbar, rc)

dim taskheight as long

taskheight = rc.bottom - rc.top '工作列高度

i = getwindowrect(getdesktopwindow, rc)

dim maxwidth as long

dim maxheight as long

maxwidth = rc.right - rc.left '獲取螢幕寬度

maxheight = rc.bottom - rc.top - taskheight '螢幕高度-工作列高度

lockwindow me.hwnd, , , maxwidth, maxheight

end sub

模組**:

option explicit

public type pointapi

x as long

y as long

end type

public type minmaxinfo

ptreserved as pointapi

ptmaxsize as pointapi

ptmaxposition as pointapi

ptmintracksize as pointapi

ptmaxtracksize as pointapi

end type

public declare sub copymemory lib ""kernel32"" alias ""rtlmovememory"" (destination as any, source as any, byval length as long)

public declare function callwindowproc lib ""user32"" alias ""callwindowproca"" (byval lpprevwndfunc as long, byval hwnd as long, byval msg as long, byval wparam as long, byval lparam 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 sendmessage lib ""user32"" alias ""sendmessagea"" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) as long

public const wm_getminmaxinfo = &h24

public const gwl_wndproc = -4

global lpprevwndproc as long

public procold as long

public udtmmi as minmaxinfo

public function windowproc(byval hwnd as long, byval imsg as long, byval wparam as long, byval lparam as long) as long

select case imsg

case wm_getminmaxinfo

dim udtminmaxinfo as minmaxinfo

copymemory udtminmaxinfo, byval lparam, 40&

with udtminmaxinfo

.ptmaxsize.x = udtmmi.ptmaxsize.x

.ptmaxsize.y = udtmmi.ptmaxsize.y

.ptmaxposition.x = 0

.ptmaxposition.y = 0

.ptmaxtracksize.x = .ptmaxsize.x

.ptmaxtracksize.y = .ptmaxsize.y

.ptmintracksize.x = udtmmi.ptmintracksize.x

.ptmintracksize.y = udtmmi.ptmintracksize.y

debug.print .ptmaxsize.x & "","" & .ptmaxsize.y

end with

copymemory byval lparam, udtminmaxinfo, 40&

windowproc = false

exit function

end select

windowproc = callwindowproc(procold, hwnd, imsg, wparam, lparam)

end function

public function lockwindow(hwnd as long, optional minwidth as long, optional minheight as long, optional maxwidth as long, optional maxheight as long) as boolean

with udtmmi

'指定窗體最小寬度

if minwidth = 0 then .ptmintracksize.x = 0 else .ptmintracksize.x = minwidth

'指定窗體最小高度

if minheight = 0 then .ptmintracksize.y = 0 else .ptmintracksize.y = minheight

'指定窗體最大寬度

if maxwidth = 0 then .ptmaxsize.x = screen.width / screen.twipsperpixelx else .ptmaxsize.x = maxwidth

'指定窗體最大高度

if maxheight = 0 then .ptmaxsize.y = screen.width / screen.twipsperpixelx else .ptmaxsize.y = maxheight

end with

procold = setwindowlong(hwnd, -4, addressof windowproc)

end function

無邊框窗體最大化,但是不檔住工作列

個窗體,乙個模組 窗體上兩個按鈕,窗體的borderstyle屬性為0,窗體 如下 option explicit private type rect left as long top as long right as long bottom as long end type private dec...

WPF學習 最大化有陰影的無邊框窗體

畫兩個按鈕,希望執行時只顯示乙個按鈕,另乙個按鈕隱藏。用到 visibility collapsed 隱藏按鈕,且不為它保留位置。horizontalalignment right template verticalalignment top width 45 height 42 最小化 最大化 關...

WPF視窗最大化 不覆蓋工作列

目的 讓視窗初始化時 最大化,只有最小化和關閉按鈕。許多軟體都是如此 分析 網上好多實現都是一大堆 直接使用win的api來獲取各種引數 實現 全屏設定 rect rc systemparameters.workarea 獲取工作區大小 this.left 0 設定位置 this.top 0 thi...