vb窗体最大化的高度与宽度是多少

vb窗体最大化的高度与宽度是多少,第1张

窗口最大化尺寸,就是屏幕尺寸:screenwidth 宽

screenheight 高

窗口窗户区尺寸,比如窗口名form1:screenwidth -(form1width-form1scalewidth) 宽

screenheight-(form1height-form1scaleheight) 高

要使运行时窗体大小等于屏幕大小,可以在设计阶段在属性窗口中设置窗体的WindowState属性的值为2-Maximized。或者在代码窗口,窗体加载时设置如下代码:

Private Sub Form_Load()

MeWindowState = 2

End Sub

现在宽屏,大屏幕显示器越来越普遍,原来在800600下设计的软件界面,在大屏幕显示器(16801050)上界面总是缩到一角,非常难看,要将老程序的界面按照不同的分辨率在重新进行设计编程,整个过程比较复杂而且实用性不大,如果原来程序比较大且界面比较多的话那么工作量也将是巨大的,而且还可能出现其他错误,有没有一种重要增加少许代码就能将所有的界面自动适应不同的分辨率呢,在网上搜索了一下有很多现成的方法,但或多或少都有些问题,总之没有完美的解决方案,我经过研究找到了一种方法基本可以解决所有问题,与大家共享,当然该代码中所考虑的控件不完全,有些控件还需要特别处理,这个我在后面的常见问题说明里会提到,具体的代码需要你自己去添加。

代码如下:

1、新建一个模块(generalbas),在上面添加两个函数;

Public Type CONTROLRECT

Left As Single

Top As Single

Width As Single

Height As Single

End Type

Public Const HORZRES = 8

Public Const VERTRES = 10

Public Declare Function GetDesktopWindow Lib "user32" () As Long

Public Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

'取得界面原始控件的位置及大小,并保存到数组里

Public Sub GetSourcePos(this As Object, rc() As CONTROLRECT, Optional bigFont As Boolean = True)

Dim tempX As Integer, tempY As Integer

tempX = thisScaleWidth '1024

tempY = thisScaleHeight '768

'此处原来如果在1024768分辨率下显示正常的话,就可以直接赋值1024和768

Dim temp As Control

Dim nSum As Integer

nSum = 0

For Each temp In this

'此处要注意,有些控件没有width,height等属性,在此要做出判断

If TypeOf temp Is ComboBox Then

With rc(nSum)

Left = tempLeft / tempX

Width = tempWidth / tempX

Top = tempTop / tempY

End With

' ElseIf TypeOf temp Is MSComm Then

' 'none

' ElseIf TypeOf temp Is StatusBar Then

' 'none

Else

With rc(nSum)

Left = tempLeft / tempX

Width = tempWidth / tempX

Top = tempTop / tempY

Height = tempHeight / tempY

End With

End If

nSum = nSum + 1

Next

End Sub

'根据比例调整控件的大小

Public Sub SetNewPos(this As Object, rc() As CONTROLRECT)

Dim tempX As Integer, tempY As Integer

tempX = thisScaleWidth '1024

tempY = thisScaleHeight '768

' '如果初始界面显示始终是以最大化的方式显示的话,此处就可以调用系统分辨率进行设置tempx,tempy

' hwnd = GetDesktopWindow()

' ' Get the device context for the desktop

' hdc = GetWindowDC(hwnd)

' If hdc Then

' Dim a As Long, b As Long

' a = GetDeviceCaps(hdc, HORZRES)

' b = GetDeviceCaps(hdc, VERTRES)

' tempX = a

' tempY = b

' End If

' ReleaseDC hwnd, hdc

Dim temp As Control '//用于取各种控件

Dim nSum As Integer

nSum = 0

For Each temp In this

'此处要注意,有些控件没有width,height等属性,在此要做出判断

If TypeOf temp Is ComboBox Then

tempLeft = rc(nSum)Left tempX

tempWidth = rc(nSum)Width tempX

tempTop = rc(nSum)Top tempY

' ElseIf TypeOf temp Is MSComm Then

' 'none

' ElseIf TypeOf temp Is StatusBar Then

' 'none

Else

tempLeft = rc(nSum)Left tempX

tempWidth = rc(nSum)Width tempX

tempTop = rc(nSum)Top tempY

tempHeight = rc(nSum)Height tempY

End If

nSum = nSum + 1

Next

End Sub

2、在form窗体中定义如下变量

Dim oldpos() As CONTROLRECT

Private Sub Form_Load()

ReDim oldpos(MeControlsCount)

GetSourcePos Me, oldpos

End Sub

Private Sub Form_Resize()

SetNewPos Me, oldpos

End Sub

常见问题及解决:

(1) 以上代码单纯的form窗体,根据窗口大小自动调整窗体控件时没有任何问题的,但是如果该窗体是mdi子窗体的话这种办法就会失灵,请看问题2;

(2) 如果form是mdi子窗体的话怎么解决呢,将各个窗体的初始窗体啊全都设置为最大化窗体,然后根据分辨率的大小来调整窗体(上面代码中注释的部分,以固定比例来修改控件大小)。但是这样就缺少灵活性,不能随窗口的大小的改变而自动改变大小,大多数mdi程序,其子窗体都是最大化显示的,只跟系统分辨率有关;

(3) 如果有line,shape等控件放在picture控件里,且picture控件的坐标模式在form_load期间又改变了,则这些控件在每次resize时其大小和位置也会相应的改变,这个问题的解决办法就是在每次resize之前将picture的scalemode改为pixel状态,(还有问题,改过之后定位可能不准确了);还有一个好办法,就是SetNewPos函数每次load后只调用一次。

(4) 对于在form_load事件中就开始画图,并设置picture等控件的坐标时会出问题,设置的坐标为控件更改前的大小,而不是更改后的大小。

(5) 发现sstab控件的兼容性有问题,修改大小后,点击sstab,隐藏界面无法显示,根据其特性(隐藏界面的控件位置left-75000)重新写函数进行处理。

如果背景需要自动调整大小的话,可加入以下代码(在窗体中引入背景,将AutoRedraw设置为true)

Private Sub Form_Resize()

Dim objPicBuf As IPictureDisp

AutoRedraw = True

Set objPicBuf = Picture

PaintPicture objPicBuf, 0, 0, ScaleWidth, ScaleHeight

End Sub

在有些软件里当鼠标移到某单词上,其注释就会显示单词的中文解释这样的软件是如何制作的呢下面我就介绍以下获取鼠标所在单词的方法,至于中文结实要关系到数据库及字库问题在此我不做解释

首先建立新工程,在FORM上添加一个TEXT文本框

声明SendMessage函数

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const EM_CHARFORMPOS=&HD7注释:在API浏览器里无此值请自己加上

自定义过程:

Private Sub Text1_MouseDown(Button As Intege,Shift As Integer,x As Single, y As Single)

注释:获取鼠标所点的是第几行第几个字符

Dim pos As Long,Lc As Long

Dim Line As Integer,CharPos As Integer

x=x/ScreenTwipsPerPixelX

y=y/ScreenTwipsperPixelY

pos=x+y65536

Lc=SendMessage(Text1hwnd,EM_CHARFROMPOS,0,ByVal pos)

Line=Lc65536 注释:第几行

CharPos=Lc MOD 65536 注释:第几个字符

End Sub

注释:接下来才是真正的读取函数

Function GetWord(txt As TextBox,pos As Integer) As String

Dim bArr()As Byte,pos1 As Integer,pos2 As Integer, i As Integer

bArr=StrConv(txtText,vbFromUnicode)注释:转换成Byte数组

pos1=0:pos2=UBound(bArr)

注释:向前搜索分格符的位置

For i=pos-1 To 0 Step -1

If IsDelimiter(bArr(i)) Then

pos1=i+1

Exit For

End If

Next

注释:向后搜寻分隔符字符的位置

For i=pos To UBound(bArr)

If IsDelimiter(bArr(i)) Then

pos2=i-1

Exit For

End If

Next

注释:截取pos1-pos2之间的字符,以构成一个单词

If pos2>pos1 Then

ReDim bArr2(pos2-pos1) As Byte

For i=pos1 To Pos2

bArr2(i-pos1)=bArr(i)

Next

GetWord=StrConv(bArr2,vbUnicode)

Else

GetWord=""

End If

End Function

注释:IsDelimiter函数

Functon IsDelimiter(ByVal Char As Byte) As Boolean

Dim S As String

S=Chr(Char)

IsDelimiter=False

If S=" " Or S="," Or S="" Or S="" Or S="vbCr Or S=vbLf Then

IsDelimiter=True

End If

End Function

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 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Const SWP_HIDEWINDOW = &H80 '隐藏视窗

Const SWP_SHOWWINDOW = &H40 '显示视窗

'在程序中若要隐藏任务栏

Private Sub Command1_Click()

Dim Thwnd As Long

Thwnd = FindWindow("Shell_traywnd", "")

Call SetWindowPos(Thwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)

Command1Top = 0

'下面三句是form全屏

MeWindowState = 0

MeMove 0, 0, ScreenWidth, ScreenHeight

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim Thwnd As Long

Thwnd = FindWindow("Shell_traywnd", "")

Call SetWindowPos(Thwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)

End Sub

Private Sub Form_Load()

Dim x As Integer, y As Integer

x = ScreenWidth / ScreenTwipsPerPixelX

y = ScreenHeight / ScreenTwipsPerPixelY

MsgBox x

MsgBox y

End Sub

以上就是关于vb窗体最大化的高度与宽度是多少全部的内容,包括:vb窗体最大化的高度与宽度是多少、vb 怎样使窗体大小等于屏幕大小、关于VB窗口调整大小的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9433605.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存