Office中国论坛/Access中国论坛

标题: API改变窗体的弹出窗体模式 [打印本页]

作者: andymark    时间: 2008-3-4 21:02
标题: API改变窗体的弹出窗体模式
'===========================================================

'用途:动态改变窗体的弹出模式
'作者: andymark
'日期:2008-3-4
' Q Q: 42503577  Email: ewang11@163.com
'
'==========================================================

    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    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 Const SWP_NOSIZE = &H1
    Private Const SWP_NOZORDER = &H4
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_DRAWFRAME = &H20
    Private Const GWL_STYLE = (-16)
    Private Const WS_POPUP = &H80000000     '弹出模式
    Private Const HWND_TOPMOST = -1         '最顶层窗口

Public Function SetPoPupFrm(Frm As Form, SetPOPUP As Boolean)

    Dim dwStyle As Long
   
    dwStyle = GetWindowLong(Frm.hwnd, GWL_STYLE)
   
    If SetPOPUP Then
   
        dwStyle = dwStyle Or WS_POPUP
        dwStyle = SetWindowLong(Frm.hwnd, GWL_STYLE, dwStyle)
        SetWindowPos Frm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
        
    Else
      
       dwStyle = SetWindowLong(Frm.hwnd, GWL_STYLE, dwStyle)
       SetWindowPos Frm.hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME

        
    End If
End Function

'Private Sub Form_Load()
'设置窗体弹出模式
' SetPoPupFrm Me, True
'非出模式
' SetPoPupFrm Me, False

'End Sub
作者: tmtony    时间: 2008-3-4 21:10
收藏了!!
作者: andymark    时间: 2008-3-4 21:12
要想置中显示,可更改SetWindowPos参数
作者: andymark    时间: 2008-3-4 23:26
之前发的代码有点问题,重新上传,麻烦测试一下
作者: andymark    时间: 2008-3-5 00:39
还是不完善
作者: tmtony    时间: 2008-3-5 00:54
是不是窗体无法设置最顶?
作者: andymark    时间: 2008-3-5 01:32
是的,而且窗体模式设置YES就出无病,老大有什么好方法
作者: andymark    时间: 2008-3-5 01:34
不知这种方法,能不能在2000下运行
作者: tmtony    时间: 2008-3-5 01:56
是的,窗体是需模式的, 有些头痛
我以前也曾研究一些时间,做过一个实例,可能未能解决你的问题,但或许有些帮助
传了上来
作者: chinj    时间: 2008-5-11 09:47
标题: 回复 9# 的帖子
试一下
作者: chinj    时间: 2008-5-11 12:33
收藏,备用。
作者: apsfxc1    时间: 2008-8-15 10:39
学习[:31]
作者: xiaozhengang    时间: 2008-11-28 11:01
收了[:50]
作者: cadgeeman    时间: 2009-3-31 15:08
学习一下先
作者: szyewj    时间: 2009-4-17 11:51
试一下
作者: guoguoququ    时间: 2009-7-12 07:11
回复 9# 的帖子
试一下
作者: chaojianan    时间: 2009-9-27 09:32
学习学习。
作者: like5188    时间: 2009-12-10 15:30
dddddddd
作者: liaoqiang234    时间: 2010-1-3 22:23

作者: qczvba    时间: 2011-6-28 16:39
谢谢看,谢管理员。
作者: dlack    时间: 2012-4-3 13:55
学习一下
作者: xie62    时间: 2012-4-3 14:41
学习学习。
作者: accesswj    时间: 2012-4-3 15:00
okokokokokooookokokok
作者: sl-txm    时间: 2012-8-11 18:34

作者: lynnwang    时间: 2012-9-14 21:26
今天偶然路过这里,发现这个贴子,跟 我昨天在下面链接分析的问题很接近。
既然发现了错误就指出来罗

由于是管理员级发布的代码,新手自然认为是比较权威的,但 WS_POPUP   和 WS_CHILD(WINDOW)两种是不能共容的,
就像现实中的男人与女人,虽然都是人,但是不能转换来转换去,虽然现实中可以男人变性为女人,但是要付出代价的,虽然贴了女人标,但始终是男人。

同理,代码中虽然可以将普通窗体标上 WS_POPUP  标签,但你始终是男人,所以运行起来问题就多多了(你说变性男/人妖,到底上男厕所还是女厕所,现实如此,系统也如此{:soso_e144:} )


文采就这样,能让大家能深入一点理解就好。

http://www.office-cn.net/thread-114430-2-1.html
作者: yanghua1900363    时间: 2012-10-7 11:13

作者: hjbboy    时间: 2018-1-15 21:27
很好的列子




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3