| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:API实现限制From的大小
只看楼主 加入收藏
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:8 
API实现限制From的大小
Option Explicit
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
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 Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Public 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)
Public Const GWL_winsize = (-4)
Public Const WM_GETMINMAXINFO = &H24
Type POINTAPI
    x As Long
    y As Long
End Type
Type MINMAXINFO
    ptReserved As POINTAPI
    ptMaxSize As POINTAPI
    ptMaxPosition As POINTAPI
    ptMinTrackSize As POINTAPI
    ptMaxTrackSize As POINTAPI
End Type
Public Prewinsize As Long
Public Function winsize(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim lwd As Long, hwd As Long
    Dim maxwin As MINMAXINFO
    If Msg = WM_GETMINMAXINFO Then
        CopyMemory maxwin, ByVal lParam, Len(maxwin)
        maxwin.ptMaxTrackSize.x = 14820 '设定最大Resize的宽度
        maxwin.ptMaxTrackSize.y = 8325 '设定最大Resize的高度

        CopyMemory ByVal lParam, maxwin, Len(maxwin)
    End If
    winsize = CallWindowProc(Prewinsize, hwnd, Msg, wParam, lParam)
 End Function



Private Sub Command1_Click()
    Dim ret As Long
    '为何将Resize的宽度设置为14820和8325就不可以实现?
    Prewinsize = GetWindowLong(Me.hwnd, GWL_winsize)
    ret = SetWindowLong(Me.hwnd, GWL_winsize, AddressOf winsize)
End Sub
2012-06-19 15:56
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:7 
没必要用到API吧,当做对窗体过程的练习,就当咱没说。
2012-06-20 10:31
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 2楼 bczgvip
我在学习API,所以想看看问题出在什么地方。谢谢

以下代码是可以解决的:
Private Sub Form_Resize()
    If Me.Height > 8640 Then Me.Height = 8640: Enabled = False
    If Me.Width > 15030 Then Me.Width = 15030: Enabled = False
    Enabled = True
End Sub

[ 本帖最后由 yuk_yu 于 2012-6-20 14:39 编辑 ]
2012-06-20 13:49
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1929
专家分:2992
注 册:2009-12-22
收藏
得分:0 
以下是引用yuk_yu在2012-6-20 13:49:11的发言:

我在学习API,所以想看看问题出在什么地方。谢谢
 
以下代码是可以解决的:
Private Sub Form_Resize()
    If Me.Height > 8640 Then Me.Height = 8640: Enabled = False
    If Me.Width > 15030 Then Me.Width = 15030: Enabled = False
    Enabled = True
End Sub



这个代码好,收藏一下。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2012-06-21 18:37
yangwenbo99
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2012-6-24
收藏
得分:7 
我的更简单一些
Private Sub Form_Resize()
    If form1.Height > 8640 Then Me.Height = 8640
    If form1.Width > 15030 Then Me.Width = 15030
End Sub
要不LZ得那堆代码我实在看不懂
2012-06-24 20:15
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1929
专家分:2992
注 册:2009-12-22
收藏
得分:7 
以下是引用yangwenbo99在2012-6-24 20:15:07的发言:

我的更简单一些
Private Sub Form_Resize()
    If form1.Height > 8640 Then Me.Height = 8640
    If form1.Width > 15030 Then Me.Width = 15030
End Sub
要不LZ得那堆代码我实在看不懂


那么当:form1.Height< 8640
      form1.Width <15030

你的代码就没有作用了吧。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2012-06-25 07:29
wangxiulin
Rank: 2
等 级:论坛游民
帖 子:15
专家分:20
注 册:2011-2-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


没必要吧..
2012-06-27 20:22
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1929
专家分:2992
注 册:2009-12-22
收藏
得分:0 
以下是引用wangxiulin在2012-6-27 20:22:52的发言:



没必要吧..

你那个要不是最小化没有了,要不就是窗体运行时可以自由改变大小。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2012-06-28 08:49
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1929
专家分:2992
注 册:2009-12-22
收藏
得分:0 
程序代码:
Private Sub Form_Resize()
    If form1.Height < > 8640 and form1.Height < > 0 Then Me.Height = 8640
    If form1.Width < > 15030 and form1.Width < > 0 Then Me.Width = 15030
End Sub


这样应该就行了吧。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2012-07-02 20:35
快速回复:API实现限制From的大小
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024023 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved