Dim TempLng     As Long
            
         TempLng = GetWindowLong(Form4.hwnd, GWL_STYLE)
          TempLng = TempLng And Not WS_CAPTION              (这儿的值应该等于“0”吧?)        SetWindowLong Form4.hwnd, GWL_STYLE, TempLng  (此处如果把“templng”直接换成“0”省略掉前面的部分可不可以呢?)
我换了之后边框就不能拉动了,如果不换的话,边框是可以拉动的!这是什么原因?

解决方案 »

  1.   

    楼主的代码格式有点乱,而且也没贴出API声明,不过我试了下只去掉WS_CAPTION是照样可以拉动边框的,原因应是还存在WS_THICKFRAME样式
    Option ExplicitPrivate Sub Form_Load()
        t1
    End SubSub t1()
        Dim lngWnd As Long, TempLng   As Long
        
        lngWnd = Me.hWnd
        TempLng = GetWindowLong(lngWnd, GWL_STYLE)
        TempLng = TempLng And Not WS_CAPTION  '            (这儿的值应该等于“0”吧?)
        
        SetWindowLong lngWnd, GWL_STYLE, TempLng
    End Sub
      

  2.   


    这里是VB的位运算,并非逻辑运算,所以结果不会是0,所以换成0就会错了。
    楼主要去了解一下VB的位运算。
      

  3.   

    [Quote=引用 2 楼 chinaboyzyq 的回复:]
    引用楼主 zgklem 的回复:TempLng = TempLng And Not WS_CAPTION (这儿的值应该等于“0”吧?)这里是VB的位运算,并非逻辑运算,所以结果不会是0,所以换成0就会错了。
    楼主要去了解一下VB的位运算。[/Quote
    的确数值不是零!这儿为什么使用位运算,使用位运算的依据是什么?
      

  4.   

    因为 GWL_STYLE 对应的样式都是位标记,约定是这样,调用当然要匹配。
      

  5.   

    其实很好理解吧,打个比方吧,这个4字节的参数共有32个二进制位,那它就可用来表示最多32个类似WS_CAPTION这样的标识是否有效啊,通常是0表示否1表示是. 基于类似这样的规定,你对某一个标识做读写操作时,当然就是要用"位运算"了.
      

  6.   

    依据就是GetWindowLong(Form4.hwnd, GWL_STYLE)的返回值是窗口样式;
    WS_CAPTION是带标题栏的,而Not WS_CAPTION就是不带标题栏的;
    窗口样式都是以位状态来决定的。    Dim TempLng As Long
        
        TempLng = GetWindowLong(Form4.hwnd, GWL_STYLE) 'GWL_STYLE:获得窗口风格(templng的值是窗口的风格)。
        TempLng = TempLng And Not WS_CAPTION '让窗口风格是不带标题栏的
        
        SetWindowLong Form4.hwnd, GWL_STYLE, TempLng '根据templng的风格设置form4的样式。