28
Appendix B - Programming Options
The following example code demonstrates how to obtain Z data. For a complete
example, see the included source code for ZAXIS.EXE.
#include "mmioctl.h"
HANDLE hndFile;
// Win32 handle of "MMDev" device
LONG
IoctlCode;
// Function to perform
ULONG
DataLength;
// Output buffer data length
DWORD
ReturnedLength;
// Actual number of bytes returned
LONG
IOBuffer;
// Input/output system buffer
BOOL
IoctlResult;
// Result of operation
//
// Open Win32 touchscreen device(MMDev)
//
hndFile = CreateFile(
// Open the device "MMDev"
"\\\\.\\MMDev",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (hndFile == INVALID_HANDLE_VALUE) {// Was the device opened?
MessageBox(NULL, "Unable to open touchscreen",
"Driver Loaded?", MB_OK);
return(0);
}
// See if controller supports Z before going any further
IOBuffer = 0;
IoctlCode = IOCTL_MM_ZAXIS_SUPPORT;
IoctlResult = 0;
DataLength = 4;
IoctlResult = DeviceIoControl(
hndFile,
// Handle to device
IoctlCode,
// IO Control code for Read
NULL,
// We don't need input data
0,
// No input buffer required, NULL bytes
&IOBuffer,
// Buffer from driver.
DataLength,
// Length of buffer in bytes.
&ReturnedLength,
// Bytes placed in DataBuffer.
NULL
// NULL means wait till op. completes.
);
if (!IoctlResult)
// No z
MessageBox(NULL, "This controller does not support Z reporting
capabilities",
"NO Z", MB_OK | MB_ICONEXCLAMATION);
//
// Call the driver to get Z values
//
IOBuffer = 0;
IoctlResult = 0;
DataLength = sizeof(LONG);