SetParent将窗体Form2放到窗体Form1内部之后,点击Form2,Form1就失去焦点(标题栏颜色变化了),如何防止?
也就是说,我想通过SetWindowLong之类的办法,将Form2的表现特性变成跟Form2是Form1的一个控件一样,比如说象是PictureBox一样,外观看不出区别.
主要是窗口的激活问题.不要告诉我把标题栏和边框去掉就可以.

解决方案 »

  1.   

    嗯,看过几个关于自绘控件的帖子。我说一下,说错了请楼主或者楼下的包涵。自己在写一个窗口函数替代Form2的窗口函数,拦截绘制窗体的消息,然后自己重绘。我只能说这些了。
      

  2.   

    peekmessage,屏蔽FORM2的WM_LBUTTONDOWN和WM_LBUTTONDBLCLK事件。前提条件是,你确信放弃FORM2的鼠标点击事件。因为这样你点FORM2的时候跟没点一样。
      

  3.   

    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const GWL_STYLE = (-16)
    Private Const WS_CHILD = &H40000000
    Private Const WS_VISIBLE = &H10000000SetWindowLong frm.hwnd, GWL_STYLE, WS_CHILD Or WS_TABSTOP Or WS_VISIBLE
      

  4.   

    少一行
    Private Const WS_TABSTOP = &H10000
      

  5.   

    试试先把form2的样式改成WS_CHILD
      

  6.   

    Option ExplicitPrivate Const WM_NCACTIVATE = &H86
    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_Click()Form2.ShowSetParent Form2.hwnd, Frame1.hwnd
        
    SendMessage Form2.hwnd, WM_NCACTIVATE, 1, 0
        
    End SubPrivate Sub Form_Activate()
    SendMessage Form2.hwnd, WM_NCACTIVATE, 1, 0End Sub
    WM_NCACTIVATE这个常数也通常用来写一些控件诸如ComboBox的下拉框。