平台FreeScale i.MX51
1. Define a global variable to determine if show the cursor
C:/WINCE600/PLATFORM/COMMON/SRC/SOC/COMMON_FSL_V2/IPUV3/DDRAW/ddipu.h
class DDIPU : public DDGPE
{
protected:
BOOL m_bCursorHide;
.. .
2. Init the m_bCursorHide and create a thread to monitor cursor state
C:/WINCE600/PLATFORM/COMMON/SRC/SOC/COMMON_FSL_V2/IPUV3/DDRAW/ddipu.cpp
BOOL DDIPU::Init(VOID)
{
m_bCursorHide = TRUE; // Hide cursor as default state
3. According m_bCursorHide, decide to do DDIPU::CursorOn or not.
C:/WINCE600/PLATFORM/COMMON/SRC/SOC/COMMON_FSL_V2/IPUV3/DDRAW/ddipu_cursor.cpp
VOID DDIPU::CursorOn(VOID)
{
...
If (m_bCursorHide)
{
// do nothing..
}
else
{
// handle the cursor state..
}
...
}
4. add wistron custom ioctl in the DrvEscape()
C:/WINCE600/PLATFORM/COMMON/SRC/SOC/COMMON_FSL_V2/IPUV3/DDRAW/ddipu_misc.cpp
#define DDIPU_CURSOR_HIDE 100100
#define DDIPU_CURSOR_SHOW 100101
ULONG DDIPU::DrvEscape(..)
{..
switch(iEsc)
{
...
case DDIPU_CURSOR_HIDE:
m_bCursorHide = TRUE;
break;
case DDIPU_CURSOR_SHOW:
m_bCursorHide = FALSE;
break;
..
..
}
5. Test the ioctl in the app
#define DDIPU_CURSOR_HIDE 100100
#define DDIPU_CURSOR_SHOW 100101
HDC hdc;
hdc = GetDC(hWnd);
ExtEscape(hdc, DDIPU_CURSOR_SHOW, 0, NULL, 0, NULL); // Show cursor
ExtEscape(hdc, DDIPU_CURSOR_HIDE, 0, NULL, 0, NULL);
ReleaseDC(hWnd, hdc);