用了Webbrowser控件后,怎么样调出关于webbrowser下的"查找"的对话窗口,谢谢

解决方案 »

  1.   

    http://www.csdn.net/Develop/article/16/16938.shtm
      

  2.   

    注:以下代码是Amoon的原创
    '===============| 窗体的代码 |=============
    Private Sub Form_Load()
        gHTxtWnd = RichTextBox1.hwnd
    End SubPrivate Sub mnuFind_Click()
        Dim szFindString As String  ' 要查找的字符串
        Dim hCmdBtn As Long        ' 对话框上的"查找下一个"按钮的句柄
        Dim strArr() As Byte        ' API使用的动态字节数组
        Dim i As Integer            ' 循环变量
        
        '初始化要查找的字符串
        szFindString = "Find Me"
        
        '根据字符串长度重新定义数组
        ReDim strArr(0 To Len(szFindString) - 1)
        
        '将字符串中的字符的ASCII码存入数组
        For i = 1 To Len(szFindString)
            strArr(i - 1) = Asc(Mid(szFindString, i, 1))
        Next i    '初始化结构 frText
        With frText
            .lpfnHook = 0&
            .lpTemplateName = 0&
            .lStructSize = Len(frText)
            .hwndOwner = Me.hwnd
            .hInstance = App.hInstance
            .lpstrFindWhat = VarPtr(strArr(0))
            .lpstrReplaceWith = 0&
            .wFindWhatLen = Len(szFindString)
            .wReplaceWithLen = 0
            .lCustData = 0
        End With    '显示查找对话框
        gHDlg = FindText(frText)
        
        '取得"查找下一个"按钮的窗口句柄
        hCmdBtn = GetDlgItem(gHDlg, 1)
        
        '取得"查找下一个"按钮原来的窗口函数地址
        gOldDlgWndHandle = GetWindowLong(hCmdBtn, GWL_WNDPROC)
        
        '用FindTextHookProc函数替换"查找下一个"按钮原来的窗口函数(即子类化"查找下一个"按钮)
        If SetWindowLong(hCmdBtn, GWL_WNDPROC, AddressOf FindTextHookProc) = 0 Then
          gOldDlgWndHandle = 0
        End If
    End SubPrivate Sub mnuReplace_Click()
        msgbox "呵呵,就照着查找自己写些吧。"
    End Sub'获得要被查找的字符串
    Private Sub RichTextBox1_Change()
        gTxtSrc = RichTextBox1.Text
    End Sub'=========| 模块的代码 |==========
    Option ExplicitPublic Type FINDREPLACE
            lStructSize As Long
            hwndOwner As Long
            hInstance As Long
            flags As Long
            lpstrFindWhat As Long
            lpstrReplaceWith As Long
            wFindWhatLen As Integer
            wReplaceWithLen As Integer
            lCustData As Long
            lpfnHook As Long
            lpTemplateName As Long
    End TypePublic Declare Function FindText Lib "comdlg32.dll" Alias "FindTextA" (pFindreplace As FINDREPLACE) As Long
    Public Declare Function ReplaceText Lib "comdlg32.dll" Alias "ReplaceTextA" _
    (pFindreplace As FINDREPLACE) As Long
    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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex 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 GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
    Public Declare Function IsDlgButtonChecked Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long) As Long
    Public Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As LongPublic Const GWL_WNDPROC = (-4)
    Public Const WM_LBUTTONDOWN = &H201Public Const FR_DIALOGTERM = &H40
    Public Const FR_DOWN = &H1
    Public Const FR_ENABLEHOOK = &H100
    Public Const FR_ENABLETEMPLATE = &H200
    Public Const FR_ENABLETEMPLATEHANDLE = &H2000
    Public Const FR_FINDNEXT = &H8
    Public Const FR_HIDEMATCHCASE = &H8000
    Public Const FR_HIDEUPDOWN = &H4000
    Public Const FR_HIDEWHOLEWORD = &H10000
    Public Const FR_MATCHCASE = &H4
    Public Const FR_NOMATCHCASE = &H800
    Public Const FR_NOUPDOWN = &H400
    Public Const FR_NOWHOLEWORD = &H1000
    Public Const FR_REPLACE = &H10
    Public Const FR_REPLACEALL = &H20
    Public Const FR_SHOWHELP = &H80
    Public Const FR_WHOLEWORD = &H2Public Const EM_SETSEL = &HB1Public Const MaxPatternLen = 50  ' Maximum Pattern LengthGlobal gOldDlgWndHandle As Long
    Global frText As FINDREPLACE
    Global gTxtSrc As String
    Global gHDlg As Long
    Global gHTxtWnd As LongFunction FindTextHookProc(ByVal hDlg As Long, ByVal uMsg As Long, _
      ByVal wParam As Long, ByVal lParam As Long) As LongDim strPtn As String    ' pattern string
    Dim hTxtBox As Long    ' handle of the text box in dialog box
    Dim ptnLen As Integer  ' actual length read by GetWindowString
    Dim sp As Integer      ' start point of matching string
    Dim ep As Integer      ' end point of matchiing string
    Dim ret As Long        ' return value for SendMessagestrPtn = Space(MaxPatternLen)    Select Case uMsg
            Case WM_LBUTTONDOWN
                ' Get the pattern string
                ptnLen = GetDlgItemText(gHDlg, &H480, strPtn, MaxPatternLen)
                
                ' Call default window procedure
                If gOldDlgWndHandle <> 0 Then
                    FindTextHookProc = CallWindowProc(gOldDlgWndHandle, _
                        hDlg, uMsg, wParam, lParam)
                End If
                
                ' Customize the winodw procedure
                If ptnLen <> 0 Then
                    strPtn = Left(strPtn, ptnLen)
                    SetFocus gHTxtWnd
                    
                    ' Get the MatchCase option
                    If IsDlgButtonChecked(gHDlg, &H411) = 0 Then
                        sp = InStr(LCase(gTxtSrc), LCase(strPtn))
                    Else
                        sp = InStr(gTxtSrc, strPtn)
                    End If
                    
                    sp = IIf(sp = 0, -1, sp - 1)
                    
                    If sp = -1 Then
                        Call MessageNoFound
                    End If
                    
                    ep = Len(strPtn)
                    ret = SendMessage(gHTxtWnd, EM_SETSEL, sp, sp + ep)
                End If
                    
            Case Else
                ' Call the default window procedure
                If gOldDlgWndHandle <> 0 Then
                  FindTextHookProc = CallWindowProc(gOldDlgWndHandle, _
                      hDlg, uMsg, wParam, lParam)
                End If
        End Select
    End FunctionSub MessageNoFound()
        MsgBox "呵呵,不要开玩笑啦,根本就没有嘛!"
    End Sub
      

  3.   

    TechnoFantasy :文不对题,也不看清楚
    dsclub : WebBrowser不适用,一取hwnd就报错“对象HWND的方法IWebBrowser2失败”楼主也是,怎么还给分,纯属误导嘛