ketan Ram Patil Ответов: 1

Как передать пользовательский элемент управления TWAIN wpfwindowmessagehook в WPF.


для TWAIN я имею в виду этот проект GitHub - tmyroadctfig/twaindotnet

в этом проекте их функция WpfWindowMessageHook, которая принимает окно.

Но проблема в том, что я хочу передать пользовательский контроль

Я не знаю, как передать объект пользовательского элемента управления в WpfWindowMessageHook.

Что я уже пробовал:

и пользовательская контрольная нагрузка :=

_twain = New Twain(New WpfWindowMessageHook(Me))  
 
            AddHandler _twain.TransferImage, AddressOf TransferImage
 
            AddHandler _twain.ScanningComplete, AddressOf ScanComplete



функция WpfWindowMessageHook-это

public WpfWindowMessageHook(Window window)'How to Pass The user Control.
{
try
{

_source = (HwndSource)PresentationSource.FromDependencyObject(window);
_interopHelper = new WindowInteropHelper(window); 
}
catch (TwainException ex)
{
MessageBox.Show(ex.Message);
}

}

1 Ответов

Рейтинг:
11

ketan Ram Patil

изменение в файле WpfWindowMessageHook.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Interop;

namespace TwainDotNet.Wpf
{
    /// <summary>
    /// A windows message hook for WPF applications.
    /// </summary>
    /// 

    public class WpfWindowMessageHook : IWindowsMessageHook
    {
        HwndSource _source;
        System.IntPtr _interopHelper;
        WindowInteropHelper _window;
        bool FlagWindow;
      
        bool _usingFilter;
       
        //public System.IntPtr _handle = IntPtr.Zero;
    
        //public Window TheMainWindow { get { return App.Current.MainWindow; } }
        public WpfWindowMessageHook(Window window) 
        {
            _source = (HwndSource)PresentationSource.FromDependencyObject(window);
            _window = new WindowInteropHelper(window);
            FlagWindow = true;
        }
      
        public  WpfWindowMessageHook(System.Windows.Controls.UserControl window)
        {
           
            _source = (HwndSource)PresentationSource.FromDependencyObject(window);
            HwndSource source = (HwndSource)HwndSource.FromVisual(window);
        
          
            _interopHelper = source.Handle;
           

        }
  

        public IntPtr FilterMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            if (FilterMessageCallback != null)
            {
                return FilterMessageCallback(hwnd, msg, wParam, lParam, ref handled);
            }

            return IntPtr.Zero;
        }

        public bool UseFilter
        {
            get
            {
                return _usingFilter;
            }
            set 
            {
                if (!_usingFilter && value == true)
                {
                    _source.AddHook(FilterMessage);
                    _usingFilter = true;
                }

                if (_usingFilter && value == false)
                {
                    _source.RemoveHook(FilterMessage);
                    _usingFilter = false;
                }
            }
        }

        public FilterMessage FilterMessageCallback { get; set; }

        public IntPtr WindowHandle {
            get {
                if (FlagWindow == false)
                {
                    return _interopHelper;
                }
                else
                {
                   return _window.Handle;

                }
              
               
            } }

                    }
}


Graeme_Grant

Является ли это ответом на вашу проблему или вы обновляете вопрос?

ketan Ram Patil

это решено :)
это ответ.