如题
看见有人将一个VB窗体嵌入到另一个窗体中,并固定子窗体位置。http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7276c828d4829c3933fc239045c013ca3ec74740704a5c0766301a85e5c9cf32172410037b7ec92ce1583afd7756fde2870200b863005a312b8ba3732b1248729e3b81996ad863784d8d3c4de2444ba55120a82e7fb2e1762b9&p=8e769a46d69b11a05becc12f454396&user=baidu&fm=sc&query=vb+%B9%CC%B6%A8+%D7%D3%B4%B0%BF%DA&qid=d90814ee0379ede6&p1=13&fast=y我参照其编程,但是使用SetWindowLong时,对DOS窗体无效。这是怎么回事呢?
看见有人将一个VB窗体嵌入到另一个窗体中,并固定子窗体位置。http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7276c828d4829c3933fc239045c013ca3ec74740704a5c0766301a85e5c9cf32172410037b7ec92ce1583afd7756fde2870200b863005a312b8ba3732b1248729e3b81996ad863784d8d3c4de2444ba55120a82e7fb2e1762b9&p=8e769a46d69b11a05becc12f454396&user=baidu&fm=sc&query=vb+%B9%CC%B6%A8+%D7%D3%B4%B0%BF%DA&qid=d90814ee0379ede6&p1=13&fast=y我参照其编程,但是使用SetWindowLong时,对DOS窗体无效。这是怎么回事呢?
basOption 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 DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam 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 Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPublic Const GWL_WNDPROC = (-4)
Public Const WM_NCHITTEST = &H84
Public Const HTCAPTION = 2Public oldhwnd As Long
Public Flag As BooleanPublic Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Flag = False Then
Flag = True
Debug.Print "WndprocHandle="; hWnd
End If
If uMsg = WM_NCHITTEST Then
If DefWindowProc(hWnd, uMsg, wParam, lParam) = HTCAPTION Then
WndProc = 1
Exit Function
End If
End If
WndProc = CallWindowProc(oldhwnd, hWnd, uMsg, wParam, lParam)
End Functionform1Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPrivate Sub Command1_Click() Dim commandstring As String
Dim TaskID As Long
Dim hWnd As Long
TaskID = Shell("cmd.exe", vbNormalNoFocus)
MsgBox "开始运行DOS"
hWnd = FindWindow("ConsoleWindowClass", "C:\WINDOWS\system32\cmd.exe")
SetParent hWnd, Form1.hWnd
oldhwnd = SetWindowLong(hWnd, -4, AddressOf WndProc)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Unload Form1
End Sub