⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursor.cpp

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int gc1 = 1;
	int gc2 = 1;
	flag1x = flag2x = flag1y = flag2y = 0;

	// Depnding on cursor position ...
	if ( !(m_nMQFlag & VERTICAL_LAYOUT) )
	{
		if (x >= CursorData.us1GCWidth)
		{
			x -= CursorData.us1GCWidth;		// for panning
			if (CursorData.usCursorOn == AT_00_BY_GC2)
			{
				CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
				gc2 = 0;
				if (CursorData.usStatus == HOT_AT_GC2)
				{
				   CursorData.usStatus = HOT_AT_GC1;
					CursorData.usGC1VPL = CursorData.usGC1VPL2;
					CursorData.usGC1VPR = CursorData.usGC1VPR2;
					CursorData.usGC2VPL2 = CursorData.usGC2VPL;
					CursorData.usGC2VPR2 = CursorData.usGC2VPR;
				}
			}
			else
			{
				CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
				gc1 = 0;
				if (CursorData.usStatus == HOT_AT_GC1)
				{
				   CursorData.usStatus = HOT_AT_GC2;
					CursorData.usGC2VPL = CursorData.usGC2VPL2;
					CursorData.usGC2VPR = CursorData.usGC2VPR2;
					CursorData.usGC1VPL2 = CursorData.usGC1VPL;
					CursorData.usGC1VPR2 = CursorData.usGC1VPR;
				}
			}
		}
		else
		if (x > CursorData.us1GCWidth - 64)
		{
			if (CursorData.usCursorOn == AT_00_BY_GC2)
			{
				flag1x = 1;
				dx1 = CursorData.us1GCWidth - x;
				gc1 = 0;
				if (CursorData.usStatus == HOT_AT_GC1)
				{
				   CursorData.usStatus = HOT_AT_GC2;
					CursorData.usGC2VPL = CursorData.usGC2VPL2;
					CursorData.usGC2VPR = CursorData.usGC2VPR2;
				}
			}
			else
			{
				flag2x = 1;
				dx2 = CursorData.us1GCWidth - x;
				gc2 = 0;
				if (CursorData.usStatus == HOT_AT_GC2)
				{
				   CursorData.usStatus = HOT_AT_GC1;
					CursorData.usGC1VPL = CursorData.usGC1VPL2;
					CursorData.usGC1VPR = CursorData.usGC1VPR2;
				}
			}
			CursorData.usCursorEnable = (ENABLE_GC1_CURSOR | ENABLE_GC2_CURSOR);
		}
		else
		{
			if (CursorData.usCursorOn == AT_00_BY_GC2)
			{
				CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
				gc1 = 0;
				if (CursorData.usStatus == HOT_AT_GC1)
				{
				   CursorData.usStatus = HOT_AT_GC2;
					CursorData.usGC2VPL = CursorData.usGC2VPL2;
					CursorData.usGC2VPR = CursorData.usGC2VPR2;
				}
			}
			else
			{
				CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
				gc2 = 0;
				if (CursorData.usStatus == HOT_AT_GC2)
				{
				   CursorData.usStatus = HOT_AT_GC1;
					CursorData.usGC1VPL = CursorData.usGC1VPL2;
					CursorData.usGC1VPR = CursorData.usGC1VPR2;
				}
			}
		}
	}
	else
	{
		// Check on Y
		if (y >= CursorData.us1GCHeight)
		{
			y -= CursorData.us1GCHeight;	// for panning
			if (CursorData.usCursorOn == AT_00_BY_GC2)
			{
				CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
				gc2 = 0;
				if (CursorData.usStatus == HOT_AT_GC2)
				{
				   CursorData.usStatus = HOT_AT_GC1;
					CursorData.usGC1VPT = CursorData.usGC1VPT2;
					CursorData.usGC1VPB = CursorData.usGC1VPB2;
					CursorData.usGC2VPT2 = CursorData.usGC2VPT;
					CursorData.usGC2VPB2 = CursorData.usGC2VPB;
				}
			}
			else
			{
				CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
				gc1 = 0;
				if (CursorData.usStatus == HOT_AT_GC1)
				{
				   CursorData.usStatus = HOT_AT_GC2;
					CursorData.usGC2VPT = CursorData.usGC2VPT2;
					CursorData.usGC2VPB = CursorData.usGC2VPB2;
					CursorData.usGC1VPT2 = CursorData.usGC1VPT;
					CursorData.usGC1VPB2 = CursorData.usGC1VPB;
				}
			}
		}
		else
		if (y > CursorData.us1GCHeight - 64)
		{
			if (CursorData.usCursorOn == AT_00_BY_GC2)
			{
				flag1y = 1;
				dy1 = CursorData.us1GCHeight - y;
				gc1 = 0;
				if (CursorData.usStatus == HOT_AT_GC1)
				{
				   CursorData.usStatus = HOT_AT_GC2;
					CursorData.usGC2VPT = CursorData.usGC2VPT2;
					CursorData.usGC2VPB = CursorData.usGC2VPB2;
				}
			}
			else
			{
				flag2y = 1;
				dy2 = CursorData.us1GCHeight - y;
				gc2 = 0;
				if (CursorData.usStatus == HOT_AT_GC2)
				{
				   CursorData.usStatus = HOT_AT_GC1;
					CursorData.usGC1VPT = CursorData.usGC1VPT2;
					CursorData.usGC1VPB = CursorData.usGC1VPB2;
				}
			}
			CursorData.usCursorEnable = (ENABLE_GC1_CURSOR | ENABLE_GC2_CURSOR);
		}
		else
		{
			if (CursorData.usCursorOn == AT_00_BY_GC2)
			{
				CursorData.usCursorEnable = ENABLE_GC2_CURSOR;
				gc1 = 0;
				if (CursorData.usStatus == HOT_AT_GC1)
				{
				   CursorData.usStatus = HOT_AT_GC2;
					CursorData.usGC2VPT = CursorData.usGC2VPT2;
					CursorData.usGC2VPB = CursorData.usGC2VPB2;
				}
			}
			else
			{
				CursorData.usCursorEnable = ENABLE_GC1_CURSOR;
				gc2 = 0;
				if (CursorData.usStatus == HOT_AT_GC2)
				{
				   CursorData.usStatus = HOT_AT_GC1;
					CursorData.usGC1VPT = CursorData.usGC1VPT2;
					CursorData.usGC1VPB = CursorData.usGC1VPB2;
				}
			}
		}
	}
	
	// Adjust for both GCs
	UpdateCursorVP(x,y,3);

	if (!(CursorData.usCursorEnable & ENABLE_GC1_CURSOR))
	{
		ulTemp = gc1READ(GC1_CONTROL) & HC_DISABLE;
  		gc1REG(GC1_CONTROL, ulTemp);
	}
	else
	if (!(CursorData.usCursorEnable & ENABLE_GC2_CURSOR))
	{
		ulTemp = gc2READ(GC2_CONTROL) & HC_DISABLE;
  		gc2REG(GC2_CONTROL, ulTemp);
	}
	else
  	if (x == -1)
  	{
     	// Disable both cursor anyhow
     	//
		ulTemp = gc1READ(GC1_CONTROL) & HC_DISABLE;
  		gc1REG(GC1_CONTROL, ulTemp);
		ulTemp = gc2READ(GC2_CONTROL) & HC_DISABLE;
  		gc2REG(GC2_CONTROL, ulTemp);
  	}

	// Panning for GC1
	ulGC1Delta = CursorData.usGC1VPT * m_ulScreenStride +
					 CursorData.usGC1VPL * m_nBytesPerPixel;
	if (gc1)
		gc1REG(IW1_START_ADDR, m_nIW1StartAddr + ulGC1Delta);
	
	// Panning for GC2
	ulGC2Delta = CursorData.usGC2VPT * m_ulScreenStride +
					 CursorData.usGC2VPL * m_nBytesPerPixel;
	if (gc2)
		gc2REG(IW2_START_ADDR, m_nIW2StartAddr + ulGC2Delta);
						 
	// Adjust cursor position
	x1 = x - CursorData.usGC1VPL;
	y1 = y - CursorData.usGC1VPT;
	x2 = x - CursorData.usGC2VPL;
	y2 = y - CursorData.usGC2VPT;

	int newx1 = x1 - m_nXHot;	// Hot spot is currently 32,32
	int newy1 = y1 - m_nYHot;

	if( newx1 < 0 )
	{
	   dx1 = -newx1;
	   newx1 = 0;
	}
	if( newy1 < 0 )
	{
	   dy1 = -newy1;
	   newy1 = 0;
	}

	// Set up cursor position and offset variables
	//
#ifdef VC_OFFSET_BUG
	if (dy1 == 63)
		dy1--;
#endif
	if (flag1x)
		ulCurPos1 = (ULONG)newy1 << 16;
	else
	if (flag1y)
		ulCurPos1 = newx1;
	else
		ulCurPos1 = ((ULONG)newy1 << 16) | newx1;
	ulCurAddr1 = ((ULONG)dy1 << 24) | ((ULONG)dx1 << 16) | m_nCursorStart;

	int newx2 = x2 - m_nXHot;	// Hot spot is currently 32,32
	int newy2 = y2 - m_nYHot;

	if( newx2 < 0 )
	{
	   dx2 = -newx2;
	   newx2 = 0;
	}
	if( newy2 < 0 )
	{
	   dy2 = -newy2;
	   newy2 = 0;
	}

	// Set up cursor position and offset variables
	//
#ifdef VC_OFFSET_BUG
	if (dy2 == 63)
		dy2--;
#endif
	if (flag2x)
		ulCurPos2 = (ULONG)newy2 << 16;
	else
	if (flag2y)
		ulCurPos2 = newx2;
	else
		ulCurPos2 = ((ULONG)newy2 << 16) | newx2;
	ulCurAddr2 = ((ULONG)dy2 << 24) | ((ULONG)dx2 << 16) | m_nCursorStart;

	// Program cursor anyhow ...
  	gc1REG(HW_CURSOR1_POS, ulCurPos1);
  	gc1REG(HW_CURSOR1_ADDR, ulCurAddr1);
  	gc2REG(HW_CURSOR2_POS, ulCurPos2);
  	gc2REG(HW_CURSOR2_ADDR, ulCurAddr2);

#ifndef USB_MOUSE // USB mouse enabled through MouseEvent ...
   if (x != -1)
   {
      // Enable cursor accordingly
      //
		if (CursorData.usCursorEnable & ENABLE_GC1_CURSOR)
		{
			ulTemp = gc1READ(GC1_CONTROL) | HC_ENABLE;
     		gc1REG(GC1_CONTROL, ulTemp);
		}

		if (CursorData.usCursorEnable & ENABLE_GC2_CURSOR)
		{
			ulTemp = gc2READ(GC2_CONTROL) | HC_ENABLE;
     		gc2REG(GC2_CONTROL, ulTemp);
      }
   }
#endif // USB_MOUSE
	return S_OK;
}
#endif // SUPPORT_LARGE_DESKTOP

void MQGC::UpdateCursorVP(
	int x,
	int y,
	int gcflag)
{
	int		Oft;

	if (gcflag & 1)
	{
		if (x < CursorData.usGC1VPL && x != -1)
		{
			Oft = CursorData.usGC1VPL - x;
			CursorData.usGC1VPL = x;
			CursorData.usGC1VPR -= Oft;
		}
		else
		if (x >= CursorData.usGC1VPR && x != -1)
		{
			Oft = x - CursorData.usGC1VPR;
			CursorData.usGC1VPL += Oft;
			CursorData.usGC1VPR = x;
		}
		
		if (y < CursorData.usGC1VPT)
		{
			Oft = CursorData.usGC1VPT - y;
			CursorData.usGC1VPT = y;
			CursorData.usGC1VPB -= Oft;
		}
		else
		if (y >= CursorData.usGC1VPB)
		{
			Oft = y - CursorData.usGC1VPB;
			CursorData.usGC1VPT += Oft;
			CursorData.usGC1VPB = y;
		}
	}

	if (gcflag & 2)
	{
		if (x < CursorData.usGC2VPL && x != -1)
		{
			Oft = CursorData.usGC2VPL - x;
			CursorData.usGC2VPL = x;
			CursorData.usGC2VPR -= Oft;
		}
		else
		if (x >= CursorData.usGC2VPR && x != -1)
		{
			Oft = x - CursorData.usGC2VPR;
			CursorData.usGC2VPL += Oft;
			CursorData.usGC2VPR = x;
		}

		if (y < CursorData.usGC2VPT)
		{
			Oft = CursorData.usGC2VPT - y;
			CursorData.usGC2VPT = y;
			CursorData.usGC2VPB -= Oft;
		}
		else
		if (y >= CursorData.usGC2VPB)
		{
			Oft = y - CursorData.usGC2VPB;
			CursorData.usGC2VPT += Oft;
			CursorData.usGC2VPB = y;
		}
	}
	return;
}

void MQGC::SetCursorColors(void)
{
	ULONG	ulCursorColor;
	ULONG	ulBGCursorColor;

	if (m_ulBPP >= 4)
	{
		if (m_nCursorColor > 15)
			m_nCursorColor = 0;
		ulCursorColor = *((ULONG *)&_rgbIdentity16[m_nCursorColor]);
	}
	else
	if (m_ulBPP == 2)
	{
		if (m_nCursorColor > 3)
			m_nCursorColor = 0;
		ulCursorColor = *((ULONG *)&_rgbIdentity4[m_nCursorColor]);
	}
	else
	{
		if (m_nCursorColor > 1)
			m_nCursorColor = 0;
		ulCursorColor = *((ULONG *)&_rgbIdentity2[m_nCursorColor]);
	}

   if(ulCursorColor&0x00ffffff)
		ulBGCursorColor = BG_WHITE;
	else
		ulBGCursorColor = BG_BLACK;
	
	// Set the color for both GCs anyhow
	//
	gc1REG(HW_CURSOR1_FGCLR, ulCursorColor);
	gc1REG(HW_CURSOR1_BGCLR, ulBGCursorColor);

	gc2REG(HW_CURSOR2_FGCLR, ulCursorColor);
	gc2REG(HW_CURSOR2_BGCLR, ulBGCursorColor);
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -