/////////////////////////////////////////////////////////////////////// private CWintabContext OpenTestSystemContext( int width_I = m_TABEXTX, int height_I = m_TABEXTY, bool ctrlSysCursor = true) { bool status = false; CWintabContext logContext = null; try { // Get the default system context. // Default is to receive data events. //logContext = CWintabInfo.GetDefaultDigitizingContext(ECTXOptionValues.CXO_MESSAGES); logContext = CWintabInfo.GetDefaultSystemContext(ECTXOptionValues.CXO_MESSAGES); // Set system cursor if caller wants it. if (ctrlSysCursor) { logContext.Options |= (uint)ECTXOptionValues.CXO_SYSTEM; } if (logContext == null) { TraceMsg("FAILED to get default digitizing context.\n"); return(null); } // Modify the digitizing region. logContext.Name = "WintabDN Event Data Context"; WintabAxis tabletX = CWintabInfo.GetTabletAxis(EAxisDimension.AXIS_X); WintabAxis tabletY = CWintabInfo.GetTabletAxis(EAxisDimension.AXIS_Y); logContext.InOrgX = 0; logContext.InOrgY = 0; logContext.InExtX = tabletX.axMax; logContext.InExtY = tabletY.axMax; logContext.OutOrgX = (int)SystemParameters.VirtualScreenLeft; logContext.OutOrgY = (int)SystemParameters.VirtualScreenTop; logContext.OutExtX = (int)SystemParameters.VirtualScreenWidth; // In Wintab, the tablet origin is lower left. Move origin to upper left // so that it coincides with screen origin. logContext.OutExtY = -(int)SystemParameters.VirtualScreenHeight; // Open the context, which will also tell Wintab to send data packets. status = logContext.Open(); TraceMsg("Context Open: " + (status ? "PASSED [ctx=" + logContext.HCtx + "]" : "FAILED") + "\n"); } catch (Exception ex) { TraceMsg("OpenTestDigitizerContext ERROR: " + ex.ToString()); } return(logContext); }
/////////////////////////////////////////////////////////////////////// /// <summary> /// Opens a Wintab default system context /// </summary> /// <param name="ctrlSysCursor"></param> /// <returns></returns> private CWintabContext OpenTestSystemContext(bool ctrlSysCursor = true) { bool status = false; CWintabContext logContext = null; try { // Get the default system context. // Default is to receive data events. logContext = CWintabInfo.GetDefaultSystemContext(ECTXOptionValues.CXO_MESSAGES); // Set system cursor if caller wants it. if (ctrlSysCursor) { logContext.Options |= (uint)ECTXOptionValues.CXO_SYSTEM; } else { logContext.Options &= ~(uint)ECTXOptionValues.CXO_SYSTEM; } if (logContext == null) { TraceMsg("FAILED to get default wintab context.\n"); return(null); } // ---------------------------------------------------------------------- // Modify the tablet extents to set what part of the tablet is used. Rectangle newTabletInRect = new Rectangle(); Rectangle newTabletOutRect = new Rectangle(); SetTabletExtents(ref logContext, newTabletInRect, newTabletOutRect); // ---------------------------------------------------------------------- // Modify the system extents to control where cursor is allowed to move on desktop. Rectangle newScreenRect = new Rectangle(); SetSystemExtents(ref logContext, newScreenRect); // Open the context, which will also tell Wintab to send data packets. status = logContext.Open(); TraceMsg("Context Open: " + (status ? "PASSED [ctx=" + logContext.HCtx + "]" : "FAILED") + "\n"); } catch (Exception ex) { TraceMsg("OpenTestDigitizerContext ERROR: " + ex.ToString()); } return(logContext); }
/// <summary> /// Tries initializing the tablet reading logic. Returns false on failure. /// </summary> public bool Start() { try { winTabContext = CWintabInfo.GetDefaultSystemContext(ECTXOptionValues.CXO_MESSAGES | ECTXOptionValues.CXO_SYSTEM); winTabData = new CWintabData(winTabContext); // Failed to get the system context if (winTabContext == null) { return(false); } winTabContext.Name = "DynamicDraw Tablet Event Data Context"; WintabAxis tabletX = CWintabInfo.GetTabletAxis(EAxisDimension.AXIS_X); WintabAxis tabletY = CWintabInfo.GetTabletAxis(EAxisDimension.AXIS_Y); winTabContext.InOrgX = 0; winTabContext.InOrgY = 0; winTabContext.InExtX = tabletX.axMax; winTabContext.InExtY = tabletY.axMax; // Tablet origin is usually lower left, invert it to be upper left to match screen coord system. winTabContext.OutExtY = -winTabContext.OutExtY; bool didOpen = winTabContext.Open(); winTabData.SetWTPacketEventHandler(UpdateTabletData); return(true); } catch (DllNotFoundException) { // winTab32.dll is missing. Tablet users will have it; non-tablet users don't need it. return(false); } }