예제 #1
0
        /// <summary>
        /// タブレットのオープン
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public static IntPtr Open(IntPtr hWnd, WintabLogContext context)
        {
            IntPtr hCtx = IntPtr.Zero;

            try
            {
                hCtx = WintabFunctions.WTOpenA(hWnd, ref context, true);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Open : " + ex.Message);
            }

            return(hCtx);
        }
예제 #2
0
        /// <summary>
        /// デフォルトのコンテキスト情報を取得する
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
        public static WintabLogContext GetDefaultSystemContext(ECTXOptionValues options)
        {
            // パケットのサイズは、指定したビットによって可変となる。
            // 全てのビットを指定し、パケットのサイズを固定にする。
            uint pktData = (uint)EWintabPacketBit.PK_PKTBITS_ALL;
            uint pktMode = (uint)EWintabPacketBit.PK_BUTTONS;

            // デフォルトのコンテキストの取得
            WintabLogContext context = new WintabLogContext();

            // メモリの確保
            IntPtr pContext = WintabMemoryUtility.AllocUnmanagedBuffer(context);

            try
            {
                uint sz = WintabFunctions.WTInfoA((uint)EWTICategoryIndex.WTI_DEFSYSCTX, 0, pContext);
                context = WintabMemoryUtility.MarshalUnmanagedBuffer <WintabLogContext>(pContext, sz);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("GetDefaultSystemContext : " + ex.Message);
                throw ex;
            }
            finally
            {
                // メモリの開放を忘れないこと
                WintabMemoryUtility.FreeUnmanagedBuffer(pContext);
            }

            // パケットメッセージを受信するために指定
            context.lcOptions |= (uint)ECTXOptionValues.CXO_MESSAGES;
            // 指定されたオプション
            context.lcOptions |= (uint)options;

            // コンテキストのビット設定
            context.lcPktData   = pktData;
            context.lcPktMode   = pktMode;
            context.lcMoveMask  = pktData;
            context.lcBtnUpMask = context.lcBtnDnMask;

            return(context);
        }
예제 #3
0
        /// <summary>
        /// ペンタブレットを初期化します
        /// </summary>
        public static void Initialize()
        {
            if (WintabManager.IsWintabAvailable() == false || Application.Current.MainWindow == null)
            {
                return;
            }

            try
            {
                WintabLogContext context = WintabManager.GetDefaultSystemContext(ECTXOptionValues.CXO_SYSTEM);
                context.lcName = "Wintab sample";

                // ウインドウハンドルの取得
                WindowInteropHelper helper = new WindowInteropHelper(Application.Current.MainWindow);
                IntPtr hWnd = helper.Handle;

                // Wintabハンドル
                IntPtr m_hCtx = IntPtr.Zero;

                // タブレットの受信開始
                m_hCtx = WintabManager.Open(hWnd, context);
                if (m_hCtx != IntPtr.Zero)
                {
                    // ウインドウプロシージャをフックする
                    HwndSource source = HwndSource.FromHwnd(helper.Handle);
                    source.AddHook(new HwndSourceHook(WndProc));
                }

                maxPressure = WintabManager.GetDeviceNPressure().axMax;
                maxZ        = WintabManager.GetTabletAxis(EAxisDimension.AXIS_Z).axMax;
                Enable      = WintabManager.IsWintabAvailable();

                watchDogTimer.Tick += WatchDogTimer_Tick;
                watchDogTimer.Start();
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }
예제 #4
0
 public static extern IntPtr WTOpenA(IntPtr hWnd, ref WintabLogContext logContext, bool enable);