能提供窗口的句柄,这个窗口不是我的软件的,也不是我设计的。

解决方案 »

  1.   

    Dim Style As Long
    Style = GetWindowLong(Me.hwnd, GWL_STYLE)
    Style = Style - WS_BORDER - WS_CAPTION '去除边框和标题栏风格
    SetWindowLong Me.hwnd, GWL_STYLE, Style
      

  2.   

    'Api声明:
    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 Const GWL_STYLE = (-16)
    Private Const WS_BORDER = &H800000
    Private Const WS_CAPTION = &HC00000                  '  WS_BORDER Or WS_DLGFRAME
      

  3.   

    好的谢谢,再补充问一个问题:怎么从获得的Style中知道到底有没有边框之类的信息?
      

  4.   

    不好意思啊,给你的代码差点误导你了!
    本来想回答你怎样知道有没有边框的,谁知道得到的结果却在我的意料之外,于是就研究了一下,却发现窗口其实不是想象的简单。以下是测试有没有边框的代码:
    Dim Style As Long
    Style = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
    If Style And WS_BORDER Then
        MsgBox "有边框"
    Else
        MsgBox "无边框"
    End If
    原本想去掉窗口的WS_BORDER 和 WS_CAPTION风格就可以解决问题了,于是给了你上面的代码,却发现边框还在,研究了一下,发现WS_CAPTION是WS_BORDER Or WS_DLGFRAME(其实从API浏览器复制过来的声明中就有注释的,没细看!呵呵!),加上做的是减运算(会有进退位),所以问题就来了,不好意思!对比了一下由窗体属性设置的无边框窗口,发现VB6还去掉了窗口的WS_MAXIMIZEBOX等风格,于是修改代码如下:Dim Style As Long
    Style = GetWindowLong(hwnd, GWL_STYLE)
    Style = Style And Not WS_CAPTION ‘这里改成位运算,不会出现进退位问题
    Style = Style And Not WS_SYSMENU
    Style = Style And Not WS_MAXIMIZEBOX
    Style = Style And Not WS_MINIMIZEBOX
    Style = Style And Not WS_SIZEBOX
    SetWindowLong hwnd, GWL_STYLE, Style
    '下一句去掉窗口的扩展风格,不去掉窗口显示会有问题,实际去掉的是什么风格,我没测试,这里的"0”是从VB6窗口属性设置的无边框窗口得到的,应用到其它含有和边框无关的扩展风格的窗口可能会有问题
    SetWindowLong hwnd, GWL_EXSTYLE, 0 
      

  5.   

    Dim Style As Long
    Style = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
    If Style And WS_BORDER Then
      MsgBox "有边框"
    Else
      MsgBox "无边框"
    End If
    中的Style = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
    改为Style = GetWindowLong(Me.hwnd, GWL_STYLE)
      

  6.   

    刚才又测试了一下,显示不正常与扩展风格无关,是窗口的大小改变了引起的,用SetWindowPos重新设置Dim Style As Long
    Style = GetWindowLong(hwnd, GWL_STYLE)Style = Style And Not WS_CAPTION
    Style = Style And Not WS_SYSMENU
    Style = Style And Not WS_MAXIMIZEBOX
    Style = Style And Not WS_MINIMIZEBOX
    Style = Style And Not WS_SIZEBOXSetWindowLong hwnd, GWL_STYLE, Style'SetWindowLong hwnd, GWL_EXSTYLE, 0
    Dim swpFlag As Long
    swpFlag = SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOREDRAW Or SWP_NOOWNERZORDER Or SWP_NOCOPYBITS Or SWP_NOACTIVATE Or SWP_FRAMECHANGED Or WM_NCCALCSIZE
    SetWindowPos hwnd, 0, 0, 0, 0, 0, swpFlag试了几个其它窗口,没发现问题
      

  7.   

    这是查看窗口有没有边框的代码:
    Dim Style As Long
    Style = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
    If Style And WS_BORDER Then
      MsgBox "有边框"
    Else
      MsgBox "无边框"
    End If