コード例 #1
0
ファイル: Pictfile.cpp プロジェクト: karlnicholas/GeneThon
void
CPictFile::LineRight()
{
	int	xpoint, ypoint;

	putc ( RGBfgndOp[0], m_OutFile );
	putc ( RGBfgndOp[1], m_OutFile );

	PutColor( RGB(0,0,0) );

	putc ( PenPattOp[0], m_OutFile );
	putc ( PenPattOp[1], m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );
	putc ( -1, m_OutFile );

              	
	putc ( LineOp[0], m_OutFile );
	putc ( LineOp[1], m_OutFile );

	xpoint = m_xpos + m_dev_xsize - m_dev_xsize - 1;
	ypoint = m_ypos - m_dev_ysize;
	MakePoint( xpoint, ypoint );
	xpoint = m_xpos + m_dev_xsize - m_dev_xsize - 1;
	ypoint = m_ypos - 1;
	MakePoint( xpoint, ypoint );
             
	return;
}
コード例 #2
0
ファイル: Bullet.cpp プロジェクト: maslovsa/asteroids
Bullet::Bullet()
            : isLive(true) {
    size = Game::getInstance().getWidth() / 10 / 8;
    vAngle = 0.9f;
    scale = 1.0f;
    Vertex vertex;
    vertex.Color = vec4(1, 0, 0, 1);

    MakePoint(-size / 2, size / 2);
    MakePoint(size / 2, size / 2);
    MakePoint(size / 2, -size / 2);
    MakePoint(-size / 2, -size / 2);
}
コード例 #3
0
/*****************************************************************************
.						
. Función C:			PRE_ActualizarTransmision
. Responsable:			César Armando Cruz Mendoza
. Descripcion: 			Actualiza la informacion de la transmision que se
.						ha editado en el sistema
. Parámetro de entrada:	ninguno
. Parámetro de salida:	cero
. Fecha de creación:	11 de Marzo de 2014
.
*****************************************************************************/
int PRE_ActualizarTransmision()
{
	char cMensajeError[500]={0};	//mensaje de error que se haya detectado
	char cDescripcion[250]={0};		//nombre asignado a la transmision
	int iNumVelocidades=0;			//numero de velocidades asociadas
	double dRelacion=0;				//valor de la relacion de velocidad
	char cVelocidad[5]={0};			//numero de velocidad en cadena
	int iLadoManipulador=0;			//indica el lado del manipulador (0 izq 1 der)
	int iId;						//identificador de la transmision
	double *pdListaRelaciones;		//lista de relaciones configuradas
	
	//se requeren implementar algunas validaciones antes de iniciar
	//el proceso de actualización de la transmision
	
	//obtiene el id de la transmision
	GetCtrlVal(iPanelCatTransmisiones, pCatTransm_lstTransmisiones, &iId);
	
	//verifica la informacion del numero de velocidades asocidadas
	GetCtrlVal (iPanelCatTransmisiones, pCatTransm_numNumeroVelocidades, &iNumVelocidades);
	if (iNumVelocidades == 1)
		strcat(cMensajeError,"- Se ha dejado el valor por defecto de 1 velocidad. \n");
	
	//vefifica los valores de relación para las velocidades capturadas
	pdListaRelaciones = malloc(sizeof(double)*iNumVelocidades);
	for (int i=0; i<iNumVelocidades; i++)
	{
		GetTableCellVal (iPanelCatTransmisiones, pCatTransm_tblRelaciones,
						 MakePoint(1,i+1), &dRelacion);
		pdListaRelaciones[i]=dRelacion;
		
		if (dRelacion == 0)
		{
			strcat(cMensajeError,
				   GRA_Strcat(3,"- Para la velocidad ",GRA_IntStr(i+1)," falta indicar la relación. \n"));
		}
	}
	
	GetCtrlVal (iPanelCatTransmisiones, pCatTransm_chkLadoIzquierdo, &iLadoManipulador);
	
	if (strlen(cMensajeError)>0)
	{
		MessagePopup ("Validación de información.", cMensajeError);
	}
	else
	{
		//inicia el proceso de guardado de la informacion, para lo cual obtiene
		//la lista de relaciones de las velocidades que se han configurado
		BDS_ActualizaTransmision(iId, iNumVelocidades, pdListaRelaciones, iLadoManipulador);
		
		MessagePopup ("Registro actualizado",
					  "Se ha actualizado la información correctamente.");
		
		//regresa la interfaz al modo menu principal
		PRE_CancelarProceso();
	}
	
	free(pdListaRelaciones);
	
	return 0;
}
コード例 #4
0
ファイル: Axis.cpp プロジェクト: martasect/gecko
void Axis::UpdateWithTouchAtDevicePoint(ScreenCoord aPos, uint32_t aTimestampMs) {
  // mVelocityQueue is controller-thread only
  AsyncPanZoomController::AssertOnControllerThread();

  if (aTimestampMs == mPosTimeMs) {
    // This could be a duplicate event, or it could be a legitimate event
    // on some platforms that generate events really fast. As a compromise
    // update mPos so we don't run into problems like bug 1042734, even though
    // that means the velocity will be stale. Better than doing a divide-by-zero.
    mPos = aPos;
    return;
  }

  float newVelocity = mAxisLocked ? 0.0f : (float)(mPos - aPos) / (float)(aTimestampMs - mPosTimeMs);
  if (gfxPrefs::APZMaxVelocity() > 0.0f) {
    ScreenPoint maxVelocity = MakePoint(gfxPrefs::APZMaxVelocity() * APZCTreeManager::GetDPI());
    mAsyncPanZoomController->ToLocalScreenCoordinates(&maxVelocity, mAsyncPanZoomController->PanStart());
    newVelocity = std::min(newVelocity, maxVelocity.Length());
  }

  mVelocity = newVelocity;
  mPos = aPos;
  mPosTimeMs = aTimestampMs;

  // Limit queue size pased on pref
  mVelocityQueue.AppendElement(std::make_pair(aTimestampMs, mVelocity));
  if (mVelocityQueue.Length() > gfxPrefs::APZMaxVelocityQueueSize()) {
    mVelocityQueue.RemoveElementAt(0);
  }
}
コード例 #5
0
float Axis::ToLocalVelocity(float aVelocityInchesPerMs) const {
  ScreenPoint velocity = MakePoint(aVelocityInchesPerMs * mAsyncPanZoomController->GetDPI());
  // Use ToScreenCoordinates() to convert a point rather than a vector by
  // treating the point as a vector, and using (0, 0) as the anchor.
  ScreenPoint panStart = mAsyncPanZoomController->ToScreenCoordinates(
      mAsyncPanZoomController->PanStart(),
      ParentLayerPoint());
  ParentLayerPoint localVelocity =
      mAsyncPanZoomController->ToParentLayerCoordinates(velocity, panStart);
  return localVelocity.Length();
}
コード例 #6
0
ファイル: Pictfile.cpp プロジェクト: karlnicholas/GeneThon
void
CPictFile::CharOut( char c, COLORREF ForeGround, COLORREF BackGround )
{
	int	xpoint, ypoint;

	putc ( RGBfgndOp[0], m_OutFile );
	putc ( RGBfgndOp[1], m_OutFile );

	PutColor( BackGround );
              	
	putc ( PaintRectOp[0], m_OutFile );
	putc ( PaintRectOp[1], m_OutFile );
	xpoint = m_xpos;
	ypoint = m_ypos - m_dev_ysize;
	MakePoint( xpoint, ypoint );
	xpoint = m_xpos + m_dev_xsize;
	ypoint = m_ypos;
	MakePoint( xpoint, ypoint );
             
	putc( RGBfgndOp[0], m_OutFile );
	putc( RGBfgndOp[1], m_OutFile );

	PutColor( ForeGround );

	putc ( LongTextOp[0], m_OutFile );
	putc ( LongTextOp[1], m_OutFile );

	xpoint = m_xpos;
	ypoint = m_ypos - m_fontdescent;

	MakePoint( xpoint, ypoint );

	putc ( 1, m_OutFile );
	putc ( c, m_OutFile );


	m_xpos = m_xpos + m_dev_xsize; // {need to move anyway}

	return;
}
コード例 #7
0
ファイル: Pictfile.cpp プロジェクト: karlnicholas/GeneThon
void 
CPictFile::SumFillRect( CRect& rect, COLORREF *pColor )
{
	int	xpoint, ypoint;

	putc ( RGBfgndOp[0], m_OutFile );
	putc ( RGBfgndOp[1], m_OutFile );

	PutColor( *pColor );

	putc ( PaintRectOp[0], m_OutFile );
	putc ( PaintRectOp[1], m_OutFile );

	CPoint tl = rect.TopLeft();
	xpoint = m_xpos + tl.x;
	ypoint = m_ypos - m_dev_ysize + tl.y;
	MakePoint( xpoint, ypoint );

	tl = rect.BottomRight();
	xpoint = m_xpos + tl.x;
	ypoint = m_ypos - m_dev_ysize + tl.y;
	MakePoint( xpoint, ypoint );

}
コード例 #8
0
ファイル: ap203min.cpp プロジェクト: DongwanCho/stepcode
SdaiAxis2_placement_3d * DefaultAxis( Registry * registry, InstMgr * instance_list ) {
    SdaiCartesian_point * pnt = MakePoint( registry, instance_list, 0.0, 0.0, 0.0 );
    SdaiDirection * axis = MakeDirection( registry, instance_list, 0.0, 0.0, 1.0 );
    SdaiDirection * refd = MakeDirection( registry, instance_list, 1.0, 0.0, 0.0 );

    SdaiAxis2_placement_3d * placement = ( SdaiAxis2_placement_3d * ) registry->ObjCreate( "AXIS2_PLACEMENT_3D" );
    placement->name_( "''" );
    placement->location_( pnt );
    placement->axis_( axis );
    placement->ref_direction_( refd );

    instance_list->Append( ( SDAI_Application_instance * ) placement, completeSE );

    return placement;
}
コード例 #9
0
bool LASReader::ReadPointAt(std::size_t n)
{
    bool ret = false;
    double time = 0;

    if (m_header.GetDataFormatId() == LASHeader::ePointFormat0)
        ret = m_pimpl->ReadPointAt(n, m_record);
    else
        ret = m_pimpl->ReadPointAt(n, m_record, time);

    if (ret)
    {
        MakePoint(time);
    }

    return ret;
}
コード例 #10
0
ファイル: CameraMod.c プロジェクト: zenki2001cn/SnippetCode
int sgl_grab(CameraSgl *camera)
{
	ImageInfo info;
	IMAQdxError 	error = 0;

	CameraData *data = &camera->data;
	int left = camera->rect_show.left;
	int top  = camera->rect_show.top;

	if (sgl_is_opend(camera)) {
		error = IMAQdxGrab (camera->session_id, data->image, TRUE, &data->buffer_num);
		if (error) {
			goto ERROR_MSG;
		}

		if (camera->attached_win != NULL) {
			if (camera->visible) {
				imaqDisplayImage (camera->data.image, camera->display_win_num, FALSE);
				if (error) {
					goto ERROR_MSG;
				}

				// 获取额外的信息
				imaqGetImageInfo (data->image, &info);

				imaqMoveWindow ( camera->display_win_num, MakePoint( left, top) );
				imaqShowWindow (camera->display_win_num, TRUE);
//				printf("grab ---- visible\n");
			}
			else {
				imaqShowWindow (camera->display_win_num, FALSE);
//				printf("grab ---- invisible\n");
			}
		}
	}

	return 0;

ERROR_MSG:
	sgl_camera_message_error(error, camera->error_callback);

	return -1;
}
コード例 #11
0
ファイル: SearchCtrl.cpp プロジェクト: michaellukashov/ConEmu
static bool EditIconHintOverIcon(HWND hEditCtrl, CEIconHintInfo* p, LPARAM* lpParam)
{
	RECT rcClient = {}; GetClientRect(hEditCtrl, &rcClient);
	rcClient.right -= HIWORD(p->nMargins);
	rcClient.left = rcClient.right - GetSystemMetrics(SM_CXSMICON);

	POINT ptCur = {};
	if (lpParam)
	{
		ptCur = MakePoint((short)LOWORD(*lpParam),(short)HIWORD(*lpParam));
	}
	else
	{
		GetCursorPos(&ptCur);
		MapWindowPoints(NULL, hEditCtrl, &ptCur, 1);
	}

	bool bOverIcon = (PtInRect(&rcClient, ptCur) != 0);
	return bOverIcon;
}
コード例 #12
0
LASPoint const& LASReader::operator[](std::size_t n)
{
    if (m_header.GetPointRecordsCount() <= n)
    {
        throw std::out_of_range("point subscript out of range");
    }

    bool ret = false;
    double time = 0;

    if (m_header.GetDataFormatId() == LASHeader::ePointFormat0)
        ret = m_pimpl->ReadPointAt(n, m_record);
    else
        ret = m_pimpl->ReadPointAt(n, m_record, time);

    if (!ret)
    {
        throw std::out_of_range("no point record at given position");
    }

    MakePoint(time);

    return m_point;
}
コード例 #13
0
ファイル: ETsumoDriver.cpp プロジェクト: ChukoK/robo2011
bool ETsumoDriver::drive()
{
#if 0 //臨時スイープ 調整中(まともに走りません><)
    K_THETADOT = 6.5F;
    K_PHIDOT = 25.0F;
    if (!mInitState) {
        if(mSearchPoint == 1){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_1; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_1;}
        if(mSearchPoint == 2){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_2; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_2;mGps.adjustDirection(mGps.getDirection() + 30);}
        if(mSearchPoint == 3){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_1; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_1 -150;mGps.adjustDirection(mGps.getDirection() + 30);}
        if(mSearchPoint == 4){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_2 + 150; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_2;}
        if(mSearchPoint == 5){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_1; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_1 -300;}
        if(mSearchPoint == 6){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_2 + 300; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_2;}
        if(mSearchPoint == 7){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_1; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_1 -450;}
        if(mSearchPoint == 8){mPoint.X = GPS_ETSUMO_SEARCH_X_SWEEP_2 + 450; mPoint.Y = GPS_ETSUMO_SEARCH_Y_SWEEP_2;}
        if(mSearchPoint > 8)mSearchPoint = 1;
        mTripodCoordinateTrace.setTargetCoordinate(mPoint);//
        mInitState = true;
        mIsArrived = false;
        mTripodCoordinateTrace.setAllowableError(30);
        mTripodCoordinateTrace.setForward(50);
        mTimeCounter = 0;
    }
    if (mTripodCoordinateTrace.isArrived())
    {
        mInitState = false;
        mTimeCounter = 0;
        mSearchPoint++;
        return 0;
    }
    mTripodCoordinateTrace.execute();
    return 0;
#endif
    
    
    
#if 0 //超信地旋回調査用
    gDoSonar = true;
    K_THETADOT = 6.5F;
    K_PHIDOT = 25.0F;
    if(mTimeCounter < 100000){
        VectorT<float> command(50, 0);//第一要素:進行速度、第二要素:旋回速度
        mActivator.run(command);//制御機器にセット
    }
    else{
        VectorT<float> command2(0, 100);//第一要素:進行速度、第二要素:旋回速度
        mActivator.run(command2);//制御機器にセット
    }
    mTimeCounter++;
    return 0;
#endif
    
#if 0 //超信地旋回調査用
    if (mState == ETsumoDriver::INIT) { // 初期化状態
        gDoSonar = true;
        if(gSonarIsDetected){
            mInitState = true;
            mState = ETsumoDriver::DOHYO_IN;
            updateTargetCoordinates();
            //mTargetX = mTargetTotalX;
            //mTargetY = mTargetTotalY;
            return 0;
        }
        K_THETADOT = 6.5F;
        K_PHIDOT = 20.0F;
        mTimeCounter++;
        
        if (!mInitState) {
            if(mSearchPoint == 1){mPoint.X = GPS_ETSUMO_SEARCH_X; mPoint.Y = GPS_ETSUMO_SEARCH_Y;}
            if(mSearchPoint == 2){mPoint.X = GPS_ETSUMO_SEARCH_X + 200; mPoint.Y = GPS_ETSUMO_SEARCH_Y -200;}
            if(mSearchPoint == 3){mPoint.X = GPS_ETSUMO_SEARCH_X + 400; mPoint.Y = GPS_ETSUMO_SEARCH_Y -400;}
            if(mSearchPoint == 4){mPoint.X = GPS_ETSUMO_SEARCH_X + 600; mPoint.Y = GPS_ETSUMO_SEARCH_Y -600;}
            mCoordinateTrace.setTargetCoordinate(mPoint);//
            mInitState = true;
            mIsArrived = false;
            mCoordinateTrace.setAllowableError(30);
            mCoordinateTrace.setForward(50);
            mTimeCounter = 0;
        }
        if (mCoordinateTrace.isArrived()) {mIsArrived = true; mTimeCounter = 0; mMyAngle = mGps.getDirection();}
        if(mIsArrived){
            if((mGps.getDirection() <= mMyAngle - 720) || (mGps.getDirection() >= mMyAngle +720)){
                mInitState = false;
                mTimeCounter = 0;
                mSearchPoint++;
                return 0;
            }
            else{
                if((mSearchPoint % 2) == 0 ){
                    VectorT<float> command1(0, 100);//第一要素:進行速度、第二要素:旋回速度
                    mActivator.run(command1);//制御機器にセット
                }
                else{
                    VectorT<float> command2(0, -100);//第一要素:進行速度、第二要素:旋回速度
                    mActivator.run(command2);//制御機器にセット
                }
            }
            return 0;
        }
        mCoordinateTrace.execute();
        return 0;
    }
#endif

    //試走会用ライントレース
    /*
    if (mState == ETsumoDriver::INIT) { // 初期化状態
        if (mInitState) {
            gDoSonar = false;
            K_THETADOT = 7.5F;
            K_PHIDOT = 25.0F;
            mLineTrace.setForward(100);
            mInitState = false;
        }
        mLineTrace.execute();
    }
    */
    
    if (mState == ETsumoDriver::INIT) { // 初期化状態
        gDoSonar = false;
        mTimeCounter = 0;
        mOrigK_THETADOT =  K_THETADOT; // 後で戻すために保存
        mOrigK_PHIDOT = K_PHIDOT; // 後で戻すために保存
        K_THETADOT = 6.5F;
        K_PHIDOT = 20.0F;
        mScanState = UNKNOWN;
        mLightSensor.setLamp(0);//試しにライトセンサOFF
        
        //状態遷移
        mInitState = true;
        mState = ETsumoDriver::PREPARE_SPOTSEARCH;
    }

    if (mState == ETsumoDriver::PREPARE_SPOTSEARCH) {
        if (mInitState) {
            gDoSonar = false;
            K_THETADOT = 6.5F;
            K_PHIDOT = 60.0F;
            mTimeCounter = 0;
            mCoordinateTrace.setTargetCoordinate(MakePoint(GPS_ETSUMO_SEARCH_X, GPS_ETSUMO_SEARCH_Y));// @todo要再設定
            mCoordinateTrace.setForward(50.0);
            mCoordinateTrace.setAllowableError(30);
            mInitState = false;
            mIsArrived = false;
        }
        // 移動完了
        if (mCoordinateTrace.isArrived()) {
            mInitState = true;
            //mState = ETsumoDriver::SWINGSEARCH;
            mState = ETsumoDriver::SPOTSEARCH;
        }
        mCoordinateTrace.execute();
    }
    
    
    if (mState == ETsumoDriver::SPOTSEARCH) {
        if (mInitState) {
            gDoSonar = false; // 
            K_PHIDOT = K_PHIDOT_FOR_MOVE;
            mTimeCounter = 0;
            mAngleTrace.setForward(0);
            mAngleTrace.setTargetAngle(360.0);
            mAngleTrace.setAllowableError(2.0); // 2度
            mInitState = false;
            mIsArrived = false;
            mSonarDetectCount = 0;
            mTargetTotalX = 0;
            mTargetTotalY = 0;
        }
        // 方向転換完了
        if (! mIsArrived && mAngleTrace.isArrived()) {
            K_PHIDOT = K_PHIDOT_FOR_SEARCH;
            gDoSonar = true;
            mIsArrived = true;
        }
        // 方向転換完了してからスポットサーチ開始
        if(mIsArrived && (mTimeCounter % 20 == 0) && (mTimeCounter >= 100)){
            if(gSonarIsDetected){
                mSonarDetectCount++;
                updateTargetCoordinates();
                if(SUMO_DEBUG) {mSpeaker.playTone(1000, 1, 10);}
            }
            else if(mTimeCounter % 100 == 0){
                float setangle = mGps.getDirection() - 100;//この数値は十分大きいため、調整不要のはず
                mAngleTrace.setTargetAngle(setangle);
            }
        }
        
        //スポットサーチ範囲内で探知成功!
        if(mSonarDetectCount >= 3){
            mInitState = true;
            mTargetX = mTargetTotalX / mSonarDetectCount;
            mTargetY = mTargetTotalY / mSonarDetectCount;
            mState = ETsumoDriver::DOHYO_IN;
        }
        //スポットサーチ範囲内にペットボトルが無いことを確認、スイングサーチへ移行
        else if((Gps::marge180(mGps.getDirection()) <= -90.0) && mIsArrived){
            mInitState = true;
            mState = ETsumoDriver::SPOTSEARCH_to_SWINGSEARCH;
        }
        mAngleTrace.execute();
    }
    
    if (mState == ETsumoDriver::SPOTSEARCH_to_SWINGSEARCH) {
        if (mInitState) {
            gDoSonar = false;
            K_PHIDOT = 60.0F;
            mTimeCounter = 0;
            mCoordinateTrace.setTargetCoordinate(MakePoint(GPS_ETSUMO_SEARCH_X + 200.0, GPS_ETSUMO_SEARCH_Y - 200.0));// @todo要再設定
            mCoordinateTrace.setForward(RIKISHI_FORWARD);
            mCoordinateTrace.setAllowableError(30);
            mInitState = false;
            mIsArrived = false;
        }
        // 移動完了
        if (mCoordinateTrace.isArrived()) {
            mInitState = true;
            mState = ETsumoDriver::SWINGSEARCH;
        }
        mCoordinateTrace.execute();
    }
        
    if (mState == ETsumoDriver::SWINGSEARCH) {
        if (mInitState) {
            gDoSonar = false;
            K_PHIDOT = K_PHIDOT_FOR_MOVE;
            mTimeCounter = 0;
            mSonarDetectCount = 0;
            mAngleTrace.setForward(0);
            mAngleTrace.setTargetAngle(480);
            //mAngleTrace.setTargetAngle(415);
            mAngleTrace.setAllowableError(2.0); // 2度
            mInitState = false;
            mIsArrived = false;
            mTargetTotalX = 0;
            mTargetTotalY = 0;
        }
        // 方向転換完了
        if (! mIsArrived && mAngleTrace.isArrived()) {
            mIsArrived = true;
            mTimeCounter = 0;
            K_PHIDOT = K_PHIDOT_FOR_SEARCH;
            gDoSonar = true; // ソナー起動
        }
        // 方向転換完了してからスイングサーチ開始
        if(mIsArrived && (mTimeCounter % 20 == 0)){
            if(gSonarIsDetected){
                mSonarDetectCount++;
                updateTargetCoordinates();
                if(SUMO_DEBUG) {mSpeaker.playTone(500, 1, 20);}
            }
            else if((mTimeCounter % 100 == 0) && (mTimeCounter > 100)){
                float setangle = mGps.getDirection() - 100;
                mAngleTrace.setTargetAngle(setangle);
            }
        }
        
        //スイングサーチ範囲内で探知成功!
        if(mSonarDetectCount >= 3){
            mInitState = true;
            mTargetX = mTargetTotalX / mSonarDetectCount;
            mTargetY = mTargetTotalY / mSonarDetectCount;
            mState = ETsumoDriver::DOHYO_IN;
        }
        mAngleTrace.execute();
    }
    
    if (mState == ETsumoDriver::DOHYO_IN) {
        if (mInitState) {
            mTimeCounter = 0;
            K_PHIDOT = 60.0F;
            mTargetAngle = calcTargetAngle(mTargetX, mTargetY);//ターゲットのアングルを-180〜180で返す
            if((mTargetAngle > -45) && (mTargetAngle < 135)){
                mCoordinateTrace.setTargetCoordinate(MakePoint(mTargetX - 300, mTargetY));
            }
            else{
                mCoordinateTrace.setTargetCoordinate(MakePoint(mTargetX, mTargetY + 300));
            }
            mCoordinateTrace.setForward(RIKISHI_FORWARD);
            mCoordinateTrace.setAllowableError(30);
            mInitState = false;
            mIsArrived = false;
            gDoSonar = false; 
        }
        // 移動完了
        if (! mIsArrived && mCoordinateTrace.isArrived()) {
            mInitState = true;
            mState = ETsumoDriver::HAKKE_READY;
        }
        mCoordinateTrace.execute();
    }
    
    
    if (mState == ETsumoDriver::HAKKE_READY) {
        if (mInitState) {
            gDoSonar = false; 
            mTimeCounter = 0;
            mAngleTrace.setForward(0);
            K_PHIDOT = K_PHIDOT_FOR_MOVE;
            mTargetAngle = calcTargetAngle(mTargetX, mTargetY);//ターゲットのアングルを-180〜180で返す
            if((mTargetAngle > -45) && (mTargetAngle < 135)){
                mAngleTrace.setTargetAngle(45);
            }
            else{
                mAngleTrace.setTargetAngle(-45);
            }            
            mAngleTrace.setAllowableError(2.0); // 2度
            mInitState = false;
            mIsArrived = false;
        }
        // 方向転換完了
        if (! mIsArrived && mAngleTrace.isArrived()) {
            mIsArrived = true;
            mTimeCounter = 0;
            K_PHIDOT = K_PHIDOT_FOR_SEARCH;
        }
        // 方向転換完了してから落ち着くまで待機
        if(mIsArrived && (mTimeCounter > 100)){
            mInitState = true;
            mState = ETsumoDriver::SCAN;
        }
        
        mAngleTrace.execute();
    }
    if (mState == ETsumoDriver::SCAN) {
        if (mInitState) {
            gDoSonar = true; // ソナー起動
            K_PHIDOT = K_PHIDOT_FOR_SEARCH;
            mTimeCounter = 0;
            mSonarDetectCount = 0;
            mFailScanCounter = 0;
            mTargetTotalX = 0;
            mTargetTotalY = 0;
            mAngleTrace.setForward(0);
            mInitState = false;
            mIsArrived = false;
            mScanState = SWINGRIGHT;
        }
        //最初は右回りにスキャン、ターゲットロスト後に左回りにスキャン
        if(mTimeCounter % 20 == 0){
            if(gSonarIsDetected){
                mFailScanCounter = 0; //検知したら検知失敗回数をリセット
                mSonarDetectCount++;
                updateTargetCoordinates();
                if(SUMO_DEBUG) {mSpeaker.playTone(1000, 1, 10);}
            }
            else{
                mFailScanCounter++;
                if(mFailScanCounter > 255){
                    mFailScanCounter = 255;//念のため
                }
            }
            //右回りにスキャン
            if((mTimeCounter % 100 == 0) && (mScanState == SWINGRIGHT)){
                float setangle = mGps.getDirection() - 100;
                mAngleTrace.setTargetAngle(setangle);
            }
            //左回りにスキャン
            else if((mTimeCounter % 100 == 0) && (mScanState == SWINGLEFT)){
                float setangle = mGps.getDirection() + 100;
                mAngleTrace.setTargetAngle(setangle);
            }
        }
        //ターゲットロスト後に状態遷移
        if((mFailScanCounter >= 10) && (mSonarDetectCount >= 2)){
            //右回りなら左回りへ状態遷移
            if(mScanState == SWINGRIGHT){
                mFailScanCounter = 0;
                mPrevSonarDetectCount = mSonarDetectCount; //右回りの時の検知回数を保存
                mSonarDetectCount = 0;                     //右回りの時の検知回数をクリア
                mTimeCounter = 0;
                mScanState = SWINGLEFT;
            }
            //
            else if(mScanState == SWINGLEFT){
                gDoSonar = false;
                mTimeCounter = 0;
                mTargetX = mTargetTotalX / (mSonarDetectCount + mPrevSonarDetectCount);
                mTargetY = mTargetTotalY / (mSonarDetectCount + mPrevSonarDetectCount);
                mInitState = true;
                mState = ETsumoDriver::NOKOTTA_GO;
            }
        }
        mAngleTrace.execute();
    }

    if (mState == ETsumoDriver::NOKOTTA_GO) {
        if (mInitState) {
            gDoSonar = false; //
            K_PHIDOT = 30.0F;
            mTimeCounter = 0;
            mAngleTrace.setForward(0);
            mTargetAngle = calcTargetAngle(mTargetX, mTargetY);//ターゲットのアングルを-180〜180で返す
            mAngleTrace.setTargetAngle(mTargetAngle + 0);//左右視力の違い?補正 @todo機体依存か要調査
            mAngleTrace.setAllowableError(1.0); // 1度
            mInitState = false;
            mIsArrived = false;
            mOshidashiFlag = false;
        }
        if (! mIsArrived) {
            mTargetAngle = calcTargetAngle(mTargetX, mTargetY);//精度向上のため、動的にターゲットアングルを更新する
            mAngleTrace.setTargetAngle(mTargetAngle + 0);//左右視力の違い?補正 @todo機体依存か要調査
        }
            
        // 方向転換完了
        if (! mIsArrived && mAngleTrace.isArrived()) {
            mIsArrived = true;
            mTimeCounter = 0;
        }
        //ゆっくり押し出し、時々張り手
        if(!mOshidashiFlag && mIsArrived && (mTimeCounter > 100)){
            mAngleTrace.setForward(OSHIDASHI_FORWARD);//@todoベストな値を要検証
        }
        //押し出し判定
        if((mGps.getXCoordinate() > (GPS_ETSUMO_SEARCH_X + 800)) || (mGps.getYCoordinate() < (GPS_ETSUMO_SEARCH_Y - 800))){//@todoベストな値を要検証
            mAngleTrace.setForward(-30);//判定が出たらゆっくり後退
            mTimeCounter = 0;
            mOshidashiFlag = true;
            mLightSensor.setLamp(1);//ライトセンサON
        }
        //そっと4秒ほど後退後状態遷移
        if(mOshidashiFlag && (mTimeCounter > 500)){    
            //mState = ETsumoDriver::KACHI_NANORI;
            //mInitState = true;
        }
        mAngleTrace.execute();
    }
    /*メモリが足りない?ためコメントアウト
    if (mState == ETsumoDriver::KACHI_NANORI) {
        if (mInitState) {
            gDoSonar = false;
            K_PHIDOT = 60.0F;
            mTimeCounter = 0;
            mCoordinateTrace.setTargetCoordinate(MakePoint(0, 0));
            mCoordinateTrace.setForward(30);
            mCoordinateTrace.setAllowableError(30);
            mInitState = false;
            mIsArrived = false;
        }
        // 移動完了
        if (mCoordinateTrace.isArrived()) {
            mInitState = true;
            mState = ETsumoDriver::SPOTSEARCH_to_SWINGSEARCH;
        }
        mCoordinateTrace.execute();
    }
    */
    mTimeCounter++;
    return 0;
}
コード例 #14
0
ファイル: FrameHolder.cpp プロジェクト: huyiice/ConEmu
// returns false if message not handled
bool CFrameHolder::ProcessNcMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult)
{
#ifdef _DEBUG
	if (mb_NcAnimate)
	{
		wchar_t szDbg[1024], szMsg[128], szInfo[255]; szInfo[0] = 0;
		switch (uMsg)
		{
		case WM_ERASEBKGND:
			lstrcpy(szMsg, L"WM_ERASEBKGND"); break;
		case WM_PAINT:
			lstrcpy(szMsg, L"WM_PAINT"); break;
		case WM_NCPAINT:
			lstrcpy(szMsg, L"WM_NCPAINT"); break;
		case WM_NCACTIVATE:
			lstrcpy(szMsg, L"WM_NCACTIVATE"); break;
		case WM_NCCALCSIZE:
			lstrcpy(szMsg, L"WM_NCCALCSIZE"); break;
		case WM_NCHITTEST:
			lstrcpy(szMsg, L"WM_NCHITTEST"); break;
		case WM_NCLBUTTONDOWN:
			lstrcpy(szMsg, L"WM_NCLBUTTONDOWN"); break;
		case WM_NCMOUSEMOVE:
			lstrcpy(szMsg, L"WM_NCMOUSEMOVE"); break;
		case WM_NCMOUSELEAVE:
			lstrcpy(szMsg, L"WM_NCMOUSELEAVE"); break;
		case WM_NCMOUSEHOVER:
			lstrcpy(szMsg, L"WM_NCMOUSEHOVER"); break;
		case WM_NCLBUTTONDBLCLK:
			lstrcpy(szMsg, L"WM_NCLBUTTONDBLCLK"); break;
		case 0xAE: /*WM_NCUAHDRAWCAPTION*/
			lstrcpy(szMsg, L"WM_NCUAHDRAWCAPTION"); break;
		case 0xAF: /*WM_NCUAHDRAWFRAME*/
			lstrcpy(szMsg, L"WM_NCUAHDRAWFRAME"); break;
		case 0x31E: /*WM_DWMCOMPOSITIONCHANGED*/
			lstrcpy(szMsg, L"WM_DWMCOMPOSITIONCHANGED"); break;
		case WM_WINDOWPOSCHANGED:
			lstrcpy(szMsg, L"WM_WINDOWPOSCHANGED"); break;
		case WM_SYSCOMMAND:
			lstrcpy(szMsg, L"WM_SYSCOMMAND"); break;
		case WM_GETTEXT:
			lstrcpy(szMsg, L"WM_GETTEXT"); break;
		case WM_PRINT:
			lstrcpy(szMsg, L"WM_PRINT"); break;
		case WM_PRINTCLIENT:
			lstrcpy(szMsg, L"WM_PRINTCLIENT"); break;
		case WM_GETMINMAXINFO:
			lstrcpy(szMsg, L"WM_GETMINMAXINFO"); break;
		case WM_WINDOWPOSCHANGING:
			lstrcpy(szMsg, L"WM_WINDOWPOSCHANGING"); break;
		case WM_MOVE:
			lstrcpy(szMsg, L"WM_MOVE");
			wsprintf(szInfo, L"{%ix%i}", (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam));
			break;
		case WM_SIZE:
			lstrcpy(szMsg, L"WM_SIZE");
			wsprintf(szInfo, L"%s {%ix%i}",
				(wParam==SIZE_MAXHIDE) ? L"SIZE_MAXHIDE" :
				(wParam==SIZE_MAXIMIZED) ? L"SIZE_MAXIMIZED" :
				(wParam==SIZE_MAXSHOW) ? L"SIZE_MAXSHOW" :
				(wParam==SIZE_MINIMIZED) ? L"SIZE_MINIMIZED" :
				(wParam==SIZE_RESTORED) ? L"SIZE_RESTORED" : L"???",
				(int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam));
			break;
		default:
			wsprintf(szMsg, L"%u=x%X", uMsg, uMsg);
		}

		wsprintf(szDbg, L"MsgInAnimage(%s, %u, %u%s%s)\n", szMsg, (DWORD)wParam, (DWORD)lParam,
			szInfo[0] ? L" - " : L"", szInfo);
		OutputDebugString(szDbg);
	}
#endif

	bool lbRc;
	static POINT ptLastNcClick = {};

	switch (uMsg)
	{
	case WM_ERASEBKGND:
		DBGFUNCTION(L"WM_ERASEBKGND \n");
		lResult = TRUE;
		return true;

	case WM_PAINT:
		DBGFUNCTION(L"WM_PAINT \n");
		lResult = OnPaint(hWnd, NULL/*use BeginPaint,EndPaint*/, WM_PAINT); return true;

	case WM_NCPAINT:
		DBGFUNCTION(L"WM_NCPAINT \n");
		lResult = OnNcPaint(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCACTIVATE:
		DBGFUNCTION(L"WM_NCACTIVATE \n");
		lResult = OnNcActivate(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCCALCSIZE:
		DBGFUNCTION(L"WM_NCCALCSIZE \n");
		lResult = OnNcCalcSize(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCHITTEST:
		DBGFUNCTION(L"WM_NCHITTEST \n");
		lResult = OnNcHitTest(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCLBUTTONDOWN:
	case WM_NCLBUTTONUP:
	case WM_NCRBUTTONDOWN:
	case WM_NCRBUTTONUP:
	case WM_NCMBUTTONDOWN:
	case WM_NCMBUTTONUP:
	case WM_NCMOUSEMOVE:
	case WM_NCMOUSELEAVE:
	case WM_NCMOUSEHOVER:
		#ifdef _DEBUG
		switch (uMsg)
		{
		case WM_NCLBUTTONDOWN:
			DBGFUNCTION(L"WM_NCLBUTTONDOWN \n"); break;
		case WM_NCLBUTTONUP:
			DBGFUNCTION(L"WM_NCLBUTTONUP \n"); break;
		case WM_NCRBUTTONDOWN:
			DBGFUNCTION(L"WM_NCRBUTTONDOWN \n"); break;
		case WM_NCRBUTTONUP:
			DBGFUNCTION(L"WM_NCRBUTTONUP \n"); break;
		case WM_NCMBUTTONDOWN:
			DBGFUNCTION(L"WM_NCMBUTTONDOWN \n"); break;
		case WM_NCMBUTTONUP:
			DBGFUNCTION(L"WM_NCMBUTTONUP \n"); break;
		case WM_NCMOUSEMOVE:
			DBGFUNCTION(L"WM_NCMOUSEMOVE \n"); break;
		case WM_NCMOUSELEAVE:
			DBGFUNCTION(L"WM_NCMOUSELEAVE \n"); break;
		case WM_NCMOUSEHOVER:
			DBGFUNCTION(L"WM_NCMOUSEHOVER \n"); break;
		}
		#endif

		ptLastNcClick = MakePoint(LOWORD(lParam),HIWORD(lParam));

		if ((uMsg == WM_NCMOUSEMOVE) || (uMsg == WM_NCLBUTTONUP))
			gpConEmu->isSizing(uMsg); // могло не сброситься, проверим

		if (gpSet->isTabsInCaption)
		{
			//RedrawLock();
			lbRc = gpConEmu->mp_TabBar->ProcessNcTabMouseEvent(hWnd, uMsg, wParam, lParam, lResult);
			//RedrawUnlock();
		}
		else
		{
			// Табов чисто в заголовке - нет
			lbRc = false;
		}

		if (!lbRc)
		{
			if ((wParam == HTSYSMENU) && (uMsg == WM_NCLBUTTONDOWN))
			{
				gpConEmu->mp_Menu->OnNcIconLClick();
				lResult = 0;
				lbRc = true;
			}
			else if ((wParam == HTSYSMENU || wParam == HTCAPTION)
				&& (uMsg == WM_NCRBUTTONDOWN || uMsg == WM_NCRBUTTONUP))
			{
				if (uMsg == WM_NCRBUTTONUP)
				{
					LogString(L"ShowSysmenu called from (WM_NCRBUTTONUP)");
					gpConEmu->mp_Menu->ShowSysmenu((short)LOWORD(lParam), (short)HIWORD(lParam));
				}
				lResult = 0;
				lbRc = true;
			}
			else if ((uMsg == WM_NCRBUTTONDOWN || uMsg == WM_NCRBUTTONUP)
				&& (wParam == HTCLOSE || wParam == HTMINBUTTON || wParam == HTMAXBUTTON))
			{
				switch (LOWORD(wParam))
				{
				case HTMINBUTTON:
				case HTCLOSE:
					Icon.HideWindowToTray();
					break;
				case HTMAXBUTTON:
					gpConEmu->DoFullScreen();
					break;
				}
				lResult = 0;
				lbRc = true;
			}
		}
		return lbRc;

	//case WM_LBUTTONDBLCLK:
	//	{
	//		// Глюк? DblClick по иконке приводит к WM_LBUTTONDBLCLK вместо WM_NCLBUTTONDBLCLK
	//		POINT pt = MakePoint(LOWORD(lParam),HIWORD(lParam));
	//		if (gpConEmu->PtDiffTest(pt, ptLastNcClick.x, ptLastNcClick.y, 4))
	//		{
	//			PostScClose();
	//			lResult = 0;
	//			return true;
	//		}
	//	}
	//	return false;

	case WM_MOUSEMOVE:
		DBGFUNCTION(L"WM_MOUSEMOVE \n");
		// Табов чисто в заголовке - нет
		#if 0
		RedrawLock();
		if (gpConEmu->mp_TabBar->GetHoverTab() != -1)
		{
			gpConEmu->mp_TabBar->HoverTab(-1);
		}
		#if defined(USE_CONEMU_TOOLBAR)
		// Ну и с кнопок убрать подсветку, если была
		gpConEmu->mp_TabBar->Toolbar_UnHover();
		#endif
		RedrawUnlock();
		#endif
		return false;

	case WM_NCLBUTTONDBLCLK:
		if (wParam == HTCAPTION)
		{
			mb_NcAnimate = TRUE;
		}

		if (wParam == HT_CONEMUTAB)
		{
			_ASSERTE(gpSet->isTabsInCaption && "There is not tabs in 'Caption'");
			//RedrawLock(); -- чтобы отрисовать "клик" по кнопке
			lbRc = gpConEmu->mp_TabBar->ProcessNcTabMouseEvent(hWnd, uMsg, wParam, lParam, lResult);
			//RedrawUnlock();
		}
		else if (gpConEmu->OnMouse_NCBtnDblClk(hWnd, uMsg, wParam, lParam))
		{
			lResult = 0; // DblClick на рамке - ресайз по ширине/высоте рабочей области экрана
		}
		else
		{
			lResult = DefWindowProc(hWnd, uMsg, wParam, lParam);
		}

		if (wParam == HTCAPTION)
		{
			mb_NcAnimate = FALSE;
		}
		return true;

	case WM_KEYDOWN:
	case WM_KEYUP:
		if (gpSet->isTabSelf && (wParam == VK_TAB || gpConEmu->mp_TabBar->IsInSwitch()))
		{
			if (isPressed(VK_CONTROL) && !isPressed(VK_MENU) && !isPressed(VK_LWIN) && !isPressed(VK_RWIN))
			{
				if (gpConEmu->mp_TabBar->ProcessTabKeyboardEvent(hWnd, uMsg, wParam, lParam, lResult))
				{
					return true;
				}
			}
		}
		return false;

	//case WM_NCCREATE: gpConEmu->CheckGlassAttribute(); return false;

	case 0xAE: /*WM_NCUAHDRAWCAPTION*/
		lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true;
	case 0xAF: /*WM_NCUAHDRAWFRAME*/
		lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true;
	case 0x31E: /*WM_DWMCOMPOSITIONCHANGED*/
		lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true;

	case WM_SYSCOMMAND:
		if (wParam == SC_MAXIMIZE || wParam == SC_MINIMIZE || wParam == SC_RESTORE)
		{
			// Win 10 build 9926 bug?
			if ((wParam == SC_MAXIMIZE) && IsWin10())
			{
				if (!gpConEmu->isMeForeground(false,false))
				{
					return true;
				}
			}
			mb_NcAnimate = TRUE;
			//GetWindowText(hWnd, ms_LastCaption, countof(ms_LastCaption));
			//SetWindowText(hWnd, L"");
		}
		lResult = gpConEmu->mp_Menu->OnSysCommand(hWnd, wParam, lParam, WM_SYSCOMMAND);
		if (wParam == SC_MAXIMIZE || wParam == SC_MINIMIZE || wParam == SC_RESTORE)
		{
			mb_NcAnimate = FALSE;
			//SetWindowText(hWnd, ms_LastCaption);
		}
		return true;

	case WM_GETTEXT:
		//TODO: Во время анимации Maximize/Restore/Minimize заголовок отрисовывается
		//TODO: системой, в итоге мелькает текст и срезаются табы
		//TODO: Сделаем, пока, чтобы текст хотя бы не мелькал...
		if (mb_NcAnimate && gpSet->isTabsInCaption)
		{
			_ASSERTE(!IsWindows7); // Проверить на XP и ниже
			if (wParam && lParam)
			{
				*(wchar_t*)lParam = 0;
			}
			lResult = 0;
			return true;
		}
		break;

	default:
		break;
	}

	return false;
}
コード例 #15
0
ファイル: Remotely.c プロジェクト: jufei/BtsShell
int CVICALLBACK CheckUptime (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			 char buffer[20000]; char pathName[MAX_PATHNAME_LEN];		char dirName[MAX_PATHNAME_LEN];   FILE    *hFile;	  char *p = ""; int i=0; int lenth=0; char temp[20]; //char value[50];
			 int flag =0;		 int row = 0; int column = 0; int insertcolumn = 0;  int confirmresult = 0;	 
	 
			 typedef struct
				{ 
					int x;
					int y; 
				} Point;

			 confirmresult = ConfirmPopup ("Check uptime","Do you want to check uptime now?");
		 
			 if ((outputHandle = LoadPanel (0, "Remotely.uir", OUTPUTVIEW)) < 0)
				 {
				 SetCtrlVal (panelHandle, PANEL_TEXTBOX,  "Load check uptime panel error,please try again!\r\n"); 
			 	 return -1;
				 }
			 SetPanelAttribute (outputHandle, ATTR_TITLE, "CheckUptimeRecord");
			 SetCtrlAttribute (outputHandle, OUTPUTVIEW_OUTPUTBOX, ATTR_VISIBLE, 0);
			 SetCtrlAttribute (outputHandle, OUTPUTVIEW_TABLE, ATTR_VISIBLE, 1);    
			 GetProjectDir (dirName); 
			 MakePathname (dirName, "uptime.csv", pathName);
			 WriteLog();
		   	 ResetTextBox (panelHandle, PANEL_TEXTBOX, ""); 
		 
			 if (hFile = fopen(pathName, "r"))
			{
		    	while (fgets(buffer, (int)sizeof(buffer), hFile))
		    	{
					row++;
					InsertTableRows (outputHandle, OUTPUTVIEW_TABLE, -1, 1, VAL_CELL_STRING);
			
					column = 0;
					p = buffer;
					flag = 0;
					do
					{
						column++;
						if (insertcolumn == 0)
						{
							InsertTableColumns (outputHandle, OUTPUTVIEW_TABLE, -1, 1, VAL_CELL_STRING);
						}
						lenth = FindPattern (p, 0, -1, ",", 0, 0);   // strip  ","
						if (lenth >=0)
						{
							memset(temp,0,20);
							for (i=0;i<lenth;i++)
							{
								temp[i] = *p;
								p++;
							}
							p++;
							SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), temp);
						}
						else
						{

							lenth = FindPattern (p, 0, -1, "\n", 0, 0);	  // strip  "\n"
							if (lenth >=0)								 // if find "\n"  write last string to last column
							{
							    memset(temp,0,20);
								for (i=0;i<lenth;i++)
								{
									temp[i] = *p;
									p++;
								}
								SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), temp);
								flag = -1;
								insertcolumn = 1;
							}
							else		// if not find "\n", write all to last column
							{
								SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), p);
								flag = -1;
								insertcolumn = 1;
							}
		
						}
				
					}while( flag != -1);
					SetTableColumnAttribute (outputHandle, OUTPUTVIEW_TABLE, -1, ATTR_COLUMN_WIDTH, 80);
					memset(buffer,0,20000);
												 
		    	}
		    	fclose(hFile);
			} 
			if (confirmresult)    // if user select yes to check uptime  install popup
			 {
				InstallPopup(outputHandle);
			 }
			else				 // if user select no, discard panel due to load it at beginning of this function
			{
				if (outputHandle)
				    {
		               DiscardPanel (outputHandle);
			        }
			}
			break;
	}
	return 0;
}
コード例 #16
0
ファイル: window.cpp プロジェクト: AllegianceZone/Allegiance
DWORD Window::WndProc(
    UINT message,
    WPARAM wParam,
    LPARAM lParam
) {
    switch (message) {
        case WM_CLOSE:
            OnClose();
            return 0;

        case WM_DESTROY:
            OnDestroy();
            return 0;

        case WM_PAINT:
            PAINTSTRUCT paint;
            BeginPaint(GetHWND(), &paint);
            OnPaint(paint.hdc, paint.rcPaint);
            EndPaint(GetHWND(), &paint);
            return 0;

        case WM_MOVE:
        case WM_SIZE:
            UpdateRect();
            RectChanged();
            break;

        case WM_TIMER:
            if (OnTimer())
                return 0;
            break;

        case WM_HSCROLL:
            if (OnHScroll((int)LOWORD(wParam), (short int) HIWORD(wParam), (HWND)lParam))
                return 0;
            break;

        case WM_VSCROLL:
            if (OnVScroll((int)LOWORD(wParam), (short int) HIWORD(wParam), (HWND)lParam))
                return 0;
            break;

        case WM_COMMAND:
            if (OnCommand(wParam, lParam))
                return 0;
            break;

        case WM_SYSCOMMAND:
            if (OnSysCommand(wParam & 0xFFF0, MakePoint(lParam)))
                return 0;
            break;

        case WM_ACTIVATE:
            if (OnActivate(LOWORD(wParam), HIWORD(wParam) != 0))
                return 0;
            break;

        case WM_ACTIVATEAPP:
            if (OnActivateApp(wParam != 0))
                return 0;
            break;

        case WM_CHAR:
            {
                KeyState ks;
                ks.vk = wParam;
                ks.bShift = (GetKeyState(VK_SHIFT) & 0x8000) != 0;
                ks.bControl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
                ks.countRepeat = LOWORD(lParam);

                return !OnChar(ks);
            }
            break;

        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
        case WM_KEYUP:
        case WM_SYSKEYUP:
            {
                KeyState ks;
                ks.vk = wParam;
                ks.bShift = (GetKeyState(VK_SHIFT) & 0x8000) != 0;
                ks.bControl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
                ks.bAlt = (message == WM_SYSKEYUP || message == WM_SYSKEYDOWN) 
                    && (lParam & (1 << 29)); // See help for WM_SYSKEYDOWN
                ks.bDown = (message == WM_KEYDOWN || message == WM_SYSKEYDOWN);
                ks.countRepeat = LOWORD(lParam);

                return !OnKey(ks);
            }
            break;
		
		case WM_MOUSEWHEEL: //imago 8/13/09
		case WM_XBUTTONDOWN:
		case WM_XBUTTONUP: 
        case WM_MOUSEHOVER: // imago --^
        case WM_LBUTTONDOWN:
        case WM_RBUTTONDOWN:
        case WM_MBUTTONDOWN:
        case WM_LBUTTONUP:
        case WM_RBUTTONUP:
        case WM_MBUTTONUP:
        case WM_MOUSEMOVE:
        case WM_MOUSELEAVE:
		case WM_NCMOUSEHOVER: //Imago 7/10
		case WM_NCMOUSELEAVE: //<--^
            {
                WinPoint pointMouse;
                if (message != WM_MOUSEWHEEL) {
                    WinPoint point(MakePoint(lParam));
                    pointMouse = WinPoint(point.X(),m_rectClient.YSize() - 1 - point.Y());
                    m_lastPointMouse = pointMouse;
                } else {
                    pointMouse = m_lastPointMouse;
                }

                //
                // Handle mouse leave
                //

                if (message == WM_MOUSELEAVE || message == WM_NCMOUSELEAVE) {
                    if (m_bMouseInside) {
                        m_bMouseInside = false;
                        OnMouseMessage(WM_MOUSELEAVE, 0, pointMouse);
                    }
                } else {
                    //
                    // Handle mouse enter
                    //

                    if (!m_bMouseInside && (message != WM_NCMOUSEHOVER && message != WM_MOUSEHOVER && message != 0)) {
                        m_bMouseInside = true;
                        OnMouseMessage(0, 0, pointMouse);

                        if (s_pfnTrackMouseEvent) {
                            TRACKMOUSEEVENT tme;

                            tme.cbSize      = sizeof(TRACKMOUSEEVENT);
                            tme.dwFlags     = TME_LEAVE;
                            tme.hwndTrack   = m_hwnd;
                            tme.dwHoverTime = HOVER_DEFAULT;

                            ZVerify(s_pfnTrackMouseEvent(&tme));
                        }
                    }

                    //
                    // Handle the mouse message
                    //

                    DWORD ret = 
                          OnMouseMessage(message, wParam, pointMouse)
                        ? 0
                        : 1;
                }

                return true;
            }
            break;

        case WM_SETCURSOR:
            //
            // use the custom cursor for the client area
            //

            if (LOWORD(lParam) == HTCLIENT) {
                ::SetCursor(NULL);
            } else {
                ::SetCursor(GetCursor());
            }

            break;

        case WM_WINDOWPOSCHANGING:
            if (OnWindowPosChanging((LPWINDOWPOS)lParam)) 
                return 0;
            break;
    }

    return m_pfnWndProc(m_hwnd, message, wParam, lParam);
}
コード例 #17
0
ファイル: FrameHolder.cpp プロジェクト: CyberShadow/conemu
// returns false if message not handled
bool CFrameHolder::ProcessNcMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult)
{
#ifdef _DEBUG
	if (mb_NcAnimate)
	{
		wchar_t szDbg[1024], szMsg[128], szInfo[255]; szInfo[0] = 0;
		switch (uMsg)
		{
		case WM_ERASEBKGND:
			lstrcpy(szMsg, L"WM_ERASEBKGND"); break;
		case WM_PAINT:
			lstrcpy(szMsg, L"WM_PAINT"); break;
		case WM_NCPAINT:
			lstrcpy(szMsg, L"WM_NCPAINT"); break;
		case WM_NCACTIVATE:
			lstrcpy(szMsg, L"WM_NCACTIVATE"); break;
		case WM_NCCALCSIZE:
			lstrcpy(szMsg, L"WM_NCCALCSIZE"); break;
		case WM_NCHITTEST:
			lstrcpy(szMsg, L"WM_NCHITTEST"); break;
		case WM_NCLBUTTONDOWN:
			lstrcpy(szMsg, L"WM_NCLBUTTONDOWN"); break;
		case WM_NCMOUSEMOVE:
			lstrcpy(szMsg, L"WM_NCMOUSEMOVE"); break;
		case WM_NCMOUSELEAVE:
			lstrcpy(szMsg, L"WM_NCMOUSELEAVE"); break;
		case WM_NCMOUSEHOVER:
			lstrcpy(szMsg, L"WM_NCMOUSEHOVER"); break;
		case WM_NCLBUTTONDBLCLK:
			lstrcpy(szMsg, L"WM_NCLBUTTONDBLCLK"); break;
		case 0xAE: /*WM_NCUAHDRAWCAPTION*/
			lstrcpy(szMsg, L"WM_NCUAHDRAWCAPTION"); break;
		case 0xAF: /*WM_NCUAHDRAWFRAME*/
			lstrcpy(szMsg, L"WM_NCUAHDRAWFRAME"); break;
		case 0x31E: /*WM_DWMCOMPOSITIONCHANGED*/
			lstrcpy(szMsg, L"WM_DWMCOMPOSITIONCHANGED"); break;
		case WM_WINDOWPOSCHANGED:
			lstrcpy(szMsg, L"WM_WINDOWPOSCHANGED"); break;
		case WM_SYSCOMMAND:
			lstrcpy(szMsg, L"WM_SYSCOMMAND"); break;
		case WM_GETTEXT:
			lstrcpy(szMsg, L"WM_GETTEXT"); break;
		case WM_PRINT:
			lstrcpy(szMsg, L"WM_PRINT"); break;
		case WM_PRINTCLIENT:
			lstrcpy(szMsg, L"WM_PRINTCLIENT"); break;
		case WM_GETMINMAXINFO:
			lstrcpy(szMsg, L"WM_GETMINMAXINFO"); break;
		case WM_WINDOWPOSCHANGING:
			lstrcpy(szMsg, L"WM_WINDOWPOSCHANGING"); break;
		case WM_MOVE:
			lstrcpy(szMsg, L"WM_MOVE");
			wsprintf(szInfo, L"{%ix%i}", (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam));
			break;
		case WM_SIZE:
			lstrcpy(szMsg, L"WM_SIZE");
			wsprintf(szInfo, L"%s {%ix%i}",
				(wParam==SIZE_MAXHIDE) ? L"SIZE_MAXHIDE" :
				(wParam==SIZE_MAXIMIZED) ? L"SIZE_MAXIMIZED" :
				(wParam==SIZE_MAXSHOW) ? L"SIZE_MAXSHOW" :
				(wParam==SIZE_MINIMIZED) ? L"SIZE_MINIMIZED" :
				(wParam==SIZE_RESTORED) ? L"SIZE_RESTORED" : L"???",
				(int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)); 
			break;
		default:
			wsprintf(szMsg, L"%u=x%X", uMsg, uMsg);
		}

		wsprintf(szDbg, L"MsgInAnimage(%s, %u, %u%s%s)\n", szMsg, (DWORD)wParam, (DWORD)lParam,
			szInfo[0] ? L" - " : L"", szInfo);
		OutputDebugString(szDbg);
	}
#endif

	bool lbRc;
	static POINT ptLastNcClick = {};

	switch (uMsg)
	{
	case WM_ERASEBKGND:
		DBGFUNCTION(L"WM_ERASEBKGND \n");
		lResult = TRUE; return true;
		//return false;

	case WM_PAINT:
		DBGFUNCTION(L"WM_PAINT \n");
		lResult = OnPaint(hWnd, FALSE); return true;

	case WM_NCPAINT:
		DBGFUNCTION(L"WM_NCPAINT \n");
		lResult = OnNcPaint(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCACTIVATE:
		DBGFUNCTION(L"WM_NCACTIVATE \n");
		lResult = OnNcActivate(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCCALCSIZE:
		DBGFUNCTION(L"WM_NCCALCSIZE \n");
		lResult = OnNcCalcSize(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCHITTEST:
		DBGFUNCTION(L"WM_NCHITTEST \n");
		lResult = OnNcHitTest(hWnd, uMsg, wParam, lParam); return true;

	case WM_NCLBUTTONDOWN:
	case WM_NCLBUTTONUP:
	case WM_NCRBUTTONDOWN:
	case WM_NCRBUTTONUP:
	case WM_NCMBUTTONDOWN:
	case WM_NCMBUTTONUP:
	case WM_NCMOUSEMOVE:
	case WM_NCMOUSELEAVE:
	case WM_NCMOUSEHOVER:
		#ifdef _DEBUG
		switch (uMsg)
		{
		case WM_NCLBUTTONDOWN:
			DBGFUNCTION(L"WM_NCLBUTTONDOWN \n"); break;
		case WM_NCLBUTTONUP:
			DBGFUNCTION(L"WM_NCLBUTTONUP \n"); break;
		case WM_NCRBUTTONDOWN:
			DBGFUNCTION(L"WM_NCRBUTTONDOWN \n"); break;
		case WM_NCRBUTTONUP:
			DBGFUNCTION(L"WM_NCRBUTTONUP \n"); break;
		case WM_NCMBUTTONDOWN:
			DBGFUNCTION(L"WM_NCMBUTTONDOWN \n"); break;
		case WM_NCMBUTTONUP:
			DBGFUNCTION(L"WM_NCMBUTTONUP \n"); break;
		case WM_NCMOUSEMOVE:
			DBGFUNCTION(L"WM_NCMOUSEMOVE \n"); break;
		case WM_NCMOUSELEAVE:
			DBGFUNCTION(L"WM_NCMOUSELEAVE \n"); break;
		case WM_NCMOUSEHOVER:
			DBGFUNCTION(L"WM_NCMOUSEHOVER \n"); break;
		}
		#endif

		ptLastNcClick = MakePoint(LOWORD(lParam),HIWORD(lParam));

		if ((uMsg == WM_NCMOUSEMOVE) || (uMsg == WM_NCLBUTTONUP))
			gpConEmu->isSizing(); // могло не сброситься, проверим

		RedrawLock();
		lbRc = gpConEmu->mp_TabBar->ProcessTabMouseEvent(hWnd, uMsg, wParam, lParam, lResult);
		RedrawUnlock();
		if (!lbRc)
		{
			if ((wParam == HTSYSMENU && uMsg == WM_NCLBUTTONDOWN)
				/*|| (wParam == HTCAPTION && uMsg == WM_NCRBUTTONDOWN)*/)
			{
				//if (uMsg == WM_NCRBUTTONDOWN)
				//	gpConEmu->ShowSysmenu((SHORT)LOWORD(lParam),(SHORT)HIWORD(lParam));
				//else

				DWORD nCurTick = GetTickCount();
				DWORD nOpenDelay = nCurTick - gpConEmu->mn_SysMenuOpenTick;
				DWORD nCloseDelay = nCurTick - gpConEmu->mn_SysMenuCloseTick;
				DWORD nDoubleTime = GetDoubleClickTime();

				if (gpConEmu->mn_SysMenuOpenTick && (nOpenDelay < nDoubleTime))
				{
					PostMessage(ghWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
				}
				else if (gpConEmu->mn_SysMenuCloseTick && (nCloseDelay < (nDoubleTime/2)))
				{
					// Пропустить - кликом закрыли меню
					int nDbg = 0;
				}
				else
				{
					gpConEmu->ShowSysmenu();
				}
				lResult = 0;
				lbRc = true;
			}
		}
		return lbRc;

	//case WM_LBUTTONDBLCLK:
	//	{
	//		// Глюк? DblClick по иконке приводит к WM_LBUTTONDBLCLK вместо WM_NCLBUTTONDBLCLK
	//		POINT pt = MakePoint(LOWORD(lParam),HIWORD(lParam));
	//		if (gpConEmu->PtDiffTest(pt, ptLastNcClick.x, ptLastNcClick.y, 4))
	//		{
	//			PostMessage(ghWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
	//			lResult = 0;
	//			return true;
	//		}
	//	}
	//	return false;
		
	case WM_MOUSEMOVE:
		DBGFUNCTION(L"WM_MOUSEMOVE \n");
		RedrawLock();
		if (gpConEmu->mp_TabBar->GetHoverTab() != -1)
		{
			gpConEmu->mp_TabBar->HoverTab(-1);
		}
		// Ну и с кнопок убрать подсветку, если была
		gpConEmu->mp_TabBar->Toolbar_UnHover();
		RedrawUnlock();
		return false;
		
	case WM_NCLBUTTONDBLCLK:
		if (wParam == HTCAPTION)
		{
			mb_NcAnimate = TRUE;
		}
		
		if (wParam == HT_CONEMUTAB)
		{
			//RedrawLock(); -- чтобы отрисовать "клик" по кнопке
			lbRc = gpConEmu->mp_TabBar->ProcessTabMouseEvent(hWnd, uMsg, wParam, lParam, lResult);
			//RedrawUnlock();
		}
		else if (gpConEmu->OnMouse_NCBtnDblClk(hWnd, uMsg, wParam, lParam))
		{
			lResult = 0; // DblClick на рамке - ресайз по ширине/высоте рабочей области экрана
		}
		else
		{
			lResult = DefWindowProc(hWnd, uMsg, wParam, lParam);
		}
			
		if (wParam == HTCAPTION)
		{
			mb_NcAnimate = FALSE;
		}
		return true;
		
	case WM_KEYDOWN:
	case WM_KEYUP:
	    if (gpSet->isTabSelf && (wParam == VK_TAB || gpConEmu->mp_TabBar->IsInSwitch()))
	    {
	        if (isPressed(VK_CONTROL) && !isPressed(VK_MENU) && !isPressed(VK_LWIN) && !isPressed(VK_RWIN))
	        {
	            if (gpConEmu->mp_TabBar->ProcessTabKeyboardEvent(hWnd, uMsg, wParam, lParam, lResult))
	            {
	                return true;
                }
	        }
	    }
	    return false;
		
	//case WM_NCCREATE: gpConEmu->CheckGlassAttribute(); return false;

	case 0xAE: /*WM_NCUAHDRAWCAPTION*/
		lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true;
	case 0xAF: /*WM_NCUAHDRAWFRAME*/
		lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true;
	case 0x31E: /*WM_DWMCOMPOSITIONCHANGED*/
		lResult = OnDwmMessage(hWnd, uMsg, wParam, lParam); return true;

	case WM_WINDOWPOSCHANGED:
		lResult = OnWindowPosChanged(hWnd, uMsg, wParam, lParam); return true;
		
	case WM_SYSCOMMAND:
		if (wParam == SC_MAXIMIZE || wParam == SC_MINIMIZE || wParam == SC_RESTORE)
		{
			mb_NcAnimate = TRUE;
			//GetWindowText(hWnd, ms_LastCaption, countof(ms_LastCaption));
			//SetWindowText(hWnd, L"");
		}
		lResult = gpConEmu->OnSysCommand(hWnd, wParam, lParam);
		if (wParam == SC_MAXIMIZE || wParam == SC_MINIMIZE || wParam == SC_RESTORE)
		{
			mb_NcAnimate = FALSE;
			//SetWindowText(hWnd, ms_LastCaption);
		}
		return true;
		
	case WM_GETTEXT:
		//TODO: Во время анимации Maximize/Restore/Minimize заголовок отрисовывается 
		//TODO: системой, в итоге мелькает текст и срезаются табы                    
		//TODO: Сделаем, пока, чтобы текст хотя бы не мелькал...                     
		if (mb_NcAnimate && gpSet->isTabsInCaption)
		{
			if (wParam && lParam)
			{
				*(wchar_t*)lParam = 0;
			}
			lResult = 0;
			return true;
		}
		break;

	default:
		break;
	}

	return false;
}
コード例 #18
0
/// HIFN draws lines marking the spot pattern
void drawSpotLines(int Panel, int Canvas)
{
	// if the current SLM pattern is a spot pattern, we plot a grid
	// indicating the spot positions
	if (SLM_getCurrentPattern() == SLM_BEAMSPLIT_IFTA)
	{
		// get the canvas dimensions
		int CanvasX, CanvasY;
		GetCtrlAttribute(Panel, Canvas, ATTR_WIDTH,  &CanvasX);
		GetCtrlAttribute(Panel, Canvas, ATTR_HEIGHT, &CanvasY);
		
		// retrieve the current settings from the control panel
		int Nx, Ny, sigxoffset, sigyoffset, spotxoffset, spotyoffset, spotxspacing, spotyspacing;
		GetCtrlVal(TabPage_1_2, TABPANEL_5_NumXSpots,    &Nx);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_NumYSpots,    &Ny);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_SpotXOffset,  &spotxoffset);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_SpotYOffset,  &spotyoffset);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_SigXOffset,   &sigxoffset);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_SigYOffset,   &sigyoffset);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_SpotXSpacing, &spotxspacing);
		GetCtrlVal(TabPage_1_2, TABPANEL_5_SpotYSpacing, &spotyspacing);
		
		// convenience variables for the lattice periods
		double periodx = spotxspacing + 1.0;
		double periody = spotyspacing + 1.0;
		
		// compute the upper left spot coordinates in camera space
		int ulxpos = gOx + gCamMPx * (spotxoffset + sigxoffset + 1);
		int ulypos = gOy + gCamMPy * (spotyoffset + sigyoffset + 1);
		
		// compute the lower right spot coordinates
		int lrxpos = gOx + gCamMPx * ((spotxoffset + sigxoffset + 1) + (Nx - 1) * (periodx));
		int lrypos = gOy + gCamMPy * ((spotyoffset + sigyoffset + 1) + (Ny - 1) * (periody));
		
		// set the pen color
		SetCtrlAttribute(Panel, Canvas, ATTR_PEN_COLOR, 0x00AAAAAA);
		
		// draw a cross at the origin
		int xo = TransformBitmapToCamCanvasX(gOx);
		int yo = TransformBitmapToCamCanvasY(gOy);
		CanvasDrawLine(Panel, Canvas, MakePoint(xo, 0), MakePoint(xo, CanvasY));
		CanvasDrawLine(Panel, Canvas, MakePoint(0, yo), MakePoint(CanvasX, yo));
		
		// draw vertical lines indicating the grid
		for (int k = 0; k <= Nx; k++)
		{
			// get the coordinates of the endpoints of the gridline
			int xc = TransformBitmapToCamCanvasX((int) (ulxpos + gCamMx * SLM_getFocalUnitX() * (-periodx / 2.0 + k * periodx) / (gCamPixelSize * 1e6)));
			int y1 = TransformBitmapToCamCanvasY((int) (ulypos - gCamMy * SLM_getFocalUnitY() * periody * 0.5 / (gCamPixelSize * 1e6)));
			int y2 = TransformBitmapToCamCanvasY((int) (lrypos + gCamMy * SLM_getFocalUnitY() * periody * 0.5 / (gCamPixelSize * 1e6)));

			// draw the line
			CanvasDrawLine(Panel, Canvas, MakePoint(xc, y1), MakePoint(xc, y2));
		}

		// draw horizontal lines indicating the grid
		for (int l = 0; l <= Ny; l++)
		{
			// get the coordinates of the endpoints of the gridline
			int yc = TransformBitmapToCamCanvasY((int) (ulypos + gCamMy * SLM_getFocalUnitY() * (-periody / 2.0 + l * periody) / (gCamPixelSize * 1e6)));
			int x1 = TransformBitmapToCamCanvasX((int) (ulxpos - gCamMx * SLM_getFocalUnitX() * periodx * 0.5 / (gCamPixelSize * 1e6)));
			int x2 = TransformBitmapToCamCanvasX((int) (lrxpos + gCamMx * SLM_getFocalUnitX() * periodx * 0.5 / (gCamPixelSize * 1e6)));

			// draw the line
			CanvasDrawLine(Panel, Canvas, MakePoint(x1, yc), MakePoint(x2, yc));
		}
	}	
}
コード例 #19
0
ファイル: OutCourse.cpp プロジェクト: ChukoK/robo2011
/**
 * 適切なドライバを選択し、運転させる
 */
void OutCourse::drive()
{
#if 0 // ログ送信(0:解除、1:実施)
    LOGGER_SEND = 2;
    LOGGER_DATAS08[0] = (S8)(mState);
    LOGGER_DATAS08[1] = (S8)(mLineDetector.detect()); // 一瞬だけなのでログに残らない可能性あり
    LOGGER_DATAU16    = (U16)(mWallDetector.detect());
    LOGGER_DATAS16[0] = (S16)(mGps.getXCoordinate());
    LOGGER_DATAS16[1] = (S16)(mGps.getYCoordinate());
    LOGGER_DATAS16[2] = (S16)(mGps.getDirection());
    LOGGER_DATAS16[3] = (S16)(mGps.getDistance());
    LOGGER_DATAS32[0] = (S32)(mLeftMotor.getCount());
    LOGGER_DATAS32[1] = (S32)(mRightMotor.getCount());
    LOGGER_DATAS32[2] = (S32)(mLightSensor.get());
    LOGGER_DATAS32[3] = (S32)(mGyroSensor.get());
#endif
#if 0 // デバッグ(0:解除、1:実施)
    {
        //DESK_DEBUG = true;
        static int count = 0;
        if (count++ % 25 == 0) {
            Lcd lcd;
            lcd.clear();
            lcd.putf("sn", "OutCourse");
            lcd.putf("dn", mState);
            lcd.putf("dn", (S32)mGps.getXCoordinate());
            lcd.putf("dn", (S32)mGps.getYCoordinate());
            lcd.putf("dn", (S32)mGps.getDirection());
            lcd.putf("dn", (S32)mGps.getDistance());
            lcd.disp();
        }
    }
#endif
    if (mState == OutCourse::START) { // スタート後通常区間
        if (mNormalDriver.drive()) {
            float X = mGps.getXCoordinate();
            float Y = mGps.getYCoordinate();
            //if (inRegion(GPS_LOOKUP_START, MakePoint(X, Y)) || (13500.0 < mGps.getDistance())) { // 区間をルックアップ区間に更新
            //if (12500.0 < mGps.getDistance()) { // ルックアップ区間前減速
            //    mLineTrace.setForward(30);//ノーマルドライバ内でやる
            //}
            if (13500.0 < mGps.getDistance()) { // 区間をルックアップ区間に更新
                mState = OutCourse::LOOKUP;
            }
        }
    }
    else if (mState == OutCourse::LOOKUP) { // ルックアップ区間
        if (mLookUpGateDriver.drive()) {
            mState = OutCourse::ETSUMO;
            /*とりあえず終了したら遷移することにする
            float X = mGps.getXCoordinate();
            float Y = mGps.getYCoordinate();
        	if ((inRegion(GPS_ETSUMO_START, MakePoint(X, Y)))) { // 区間をET相撲区間に更新
                mState = OutCourse::ETSUMO;
            }
            */
        }
    }
    else if (mState == OutCourse::ETSUMO) { // ET相撲区間
        if (mETsumoDriver.drive()) {
            float X = mGps.getXCoordinate();
            float Y = mGps.getYCoordinate();
            if (inRegion(GPS_GARAGEIN_START, MakePoint(X, Y))) { // 区間をガレージ区間に更新
                mState = OutCourse::GARAGEIN;
            }
        }
    }
    else if (mState == OutCourse::GARAGEIN) { // ガレージ・イン区間
        mGarageDriver.drive();
    }
    // テストドライバ起動
    else {
        mTestDriver.drive();
    }
}
コード例 #20
0
/*----------------------------------------------------------------------------------------------
	Non-virtual window proc to call standard message handlers.  All handlers should be virtual.
	WARNING: This method is also called for dialogs.

	@param wm Windows message identifier.
	@param wp First message parameter.
	@param lp Second message parameter.
	@param lnRet Value to be returned to the system.  (return value for window procedure)

	@return true to prevent the message from being sent to other windows.
----------------------------------------------------------------------------------------------*/
bool AfWnd::FWndProcPre(uint wm, WPARAM wp, LPARAM lp, long & lnRet)
{
	AssertObj(this);

	bool fRet;

	switch (wm)
	{
	case WM_SYSCOLORCHANGE:
		// In an ActiveX control we may have no Papp().
		// It's a bit unusual to be handling a command in that situation, but it can happen.
		if (!AfApp::Papp())
			return false;
		// Push a color change command and enqueue a command indicating that we're done
		// processing color change messages.
		// NOTE: We get one of these per top level window.
		AfApp::Papp()->PushCid(kcidColorChange, this, wp, lp);
		AfApp::Papp()->EnqueueCid(kcidEndColorChange, this, wp, lp);
		return false;

	case WM_SETTINGCHANGE:
		// In an ActiveX control we may have no Papp().
		// It's a bit unusual to be handling a command in that situation, but it can happen.
		if (!AfApp::Papp())
			return false;
		// Push a color setting command and enqueue a command indicating that we're done
		// processing setting change messages.
		// NOTE: We may get many of these per top level window.
		AfApp::Papp()->PushCid(kcidSettingChange, this, wp, lp);
		AfApp::Papp()->EnqueueCid(kcidEndSettingChange, this, wp, lp);
		return false;

	case WM_MEASUREITEM:
		// Handle menu items.
		if (!wp && AfApp::GetMenuMgr(&m_pmum)->OnMeasureItem((MEASUREITEMSTRUCT *)lp))
			return true;
		return OnMeasureChildItem((MEASUREITEMSTRUCT *)lp);

	case WM_DRAWITEM:
		// Handle menu items.
		if (!wp && AfApp::GetMenuMgr(&m_pmum)->OnDrawItem((DRAWITEMSTRUCT *)lp))
			return true;
		return OnDrawChildItem((DRAWITEMSTRUCT *)lp);

	case WM_INITMENUPOPUP:
		// LOWORD(lp) specifies the zero-based relative position of the menu item that opens the
		// drop-down menu or submenu.
		// HIWORD(lp) If the menu is the window menu, this is TRUE; otherwise, it is FALSE.
		if (HIWORD(lp) == 0) // Ignore system menus.
		{
			AfApp::GetMenuMgr(&m_pmum)->ExpandMenuItems((HMENU)wp, LOWORD(lp));
		}
		return OnInitMenuPopup((HMENU)wp, LOWORD(lp), HIWORD(lp) != 0);

	case WM_MENUSELECT:
		if (!lp && HIWORD(wp) == 0xFFFF)
		{
			// Menu was closed if it had been open.
			AfApp::GetMenuMgr(&m_pmum)->OnMenuClose();
			AfMainWnd * pafw = MainWindow();
			if (pafw)
				pafw->SetContextInfo(NULL, MakePoint(0));
		}
		return OnMenuSelect((int)LOWORD(wp), (UINT)HIWORD(wp), (HMENU)lp);

	case WM_MENUCHAR:
		lnRet = AfApp::GetMenuMgr(&m_pmum)->OnMenuChar((achar)LOWORD(wp), (HMENU)lp);
		return lnRet != 0;

	case WM_PAINT:
		return OnPaint((HDC)wp);

	case WM_SIZE:
		fRet = OnSize(wp, LOWORD(lp), HIWORD(lp));
		OnClientSize();
		return fRet;

	case WM_COMMAND:
		return OnCommand(LOWORD(wp), HIWORD(wp), (HWND)lp);

	case WM_NOTIFY:
		return OnNotifyChild(wp, (NMHDR *)lp, lnRet);

	case WM_SETFOCUS:
		return OnSetFocus();

	case WM_CONTEXTMENU:
		return OnContextMenu((HWND)wp, MakePoint(lp));
	}

	// Keep passing the message.
	return false;
}
コード例 #21
0
/*----------------------------------------------------------------------------------------------
	Show the popup (using a modal loop) at the given location. *pival will contain the selected
	icon index when this method returns. If the icon selection is cancelled, pival will contain
	the previous selected index (the initial value of *pival).
	DoPopup returns false if the user cancels the color selection.
	@param cval number of buttons
	@param rid resource id of bitmap containing buttons. They are assumed to be 16 pixels wide
	and 15 high, as in a toolbar. Pink pixels are to be masked out.
	It is further assumed that rids from rid + 1 to rid + cval identify tooltip help for the
	buttons.
	@param prgfPressed is the button pressed
----------------------------------------------------------------------------------------------*/
bool IconComboPopup::DoPopup(WndCreateStruct & wcs, int * pival, POINT pt, int cval, int rid,
                             int cColumns, bool * prgfPressed, HIMAGELIST himl)
{
    AssertPtr(pival);

    m_cvals = cval;
    m_pival = pival;
    m_pt = pt;
    m_cColumns = cColumns;
    m_cRows = (cval + cColumns - 1) / cColumns;
    m_himl = himl;
    m_prgfPressed = prgfPressed;

    SuperClass::CreateAndSubclassHwnd(wcs);

    m_ivalOld = *m_pival;

    // Tooltip stuff
    UiToolTipPtr qwnd;
    qwnd.Create();
    m_hwndToolTip = qwnd->Create(m_hwnd);

    Rect rc;
    TOOLINFO ti = { isizeof(ti) };
    ti.hwnd = m_hwnd;
    ti.hinst = ModuleEntry::GetModuleHandle();
    for (int i = 0; i < cval; i++)
    {
        GetCellRect(i, rc);
        ti.lpszText = reinterpret_cast<achar *>(rid + i + 1);
        ti.rect = rc;
        ::SendMessage(m_hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
    }

    // Find which cell corresponds to the initial color.
    m_fMouseDown = true;

    ::SetCapture(m_hwnd);
    MSG msg;
    bool fContinue = true;
    // Start a modal message loop.
    while (fContinue && ::GetMessage(&msg, NULL, 0, 0))
    {
        if (msg.hwnd == m_hwnd)
        {
            ::SendMessage(m_hwndToolTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
            switch (msg.message)
            {
            case WM_LBUTTONDOWN:
                m_fMouseDown = true;
                ::InvalidateRect(m_hwnd, NULL, true);
                break;
            case WM_LBUTTONUP:
                fContinue = OnLButtonUp(msg.wParam, MakePoint(msg.lParam));
                break;
            case WM_PAINT:
                OnPaint();
                break;
            case WM_MOUSEMOVE:
                OnMouseMove(msg.wParam, LOWORD(msg.lParam), HIWORD(msg.lParam));
                break;
            case WM_KEYDOWN:
                fContinue = OnKeyDown(msg.wParam, LOWORD(msg.lParam));
                break;
            case WM_KILLFOCUS:
                fContinue = OnKillFocus((HWND)msg.wParam);
                break;
            default:
                DefWndProc(msg.message, msg.wParam, msg.lParam);
                break;
            }
        }
        else
        {
            // Dispatch the message the normal way.
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
        }
    }
    ::ReleaseCapture();

    return !m_fCanceled;
}
コード例 #22
0
/*****************************************************************************
.
. Función C:			PRE_InsertarNuevaTransmision
. Responsable:			César Armando Cruz Mendoza
. Descripcion: 			Inserta una nueva transmision en el sistema
. Parámetro de entrada:	ninguno
. Parámetro de salida:	cero
. Fecha de creación:	11 de Marzo de 2014
.
*****************************************************************************/
int PRE_InsertarNuevaTransmision()
{
	char cMensajeError[500]={0};	//mensaje de error que se haya detectado
	char cDescripcion[250]={0};		//nombre asignado a la transmision
	int iNumVelocidades=0;			//numero de velocidades asociadas
	double dRelacion=0;				//valor de la relacion de velocidad
	char cVelocidad[5]={0};			//numero de velocidad en cadena
	int iLadoManipulador=0;			//indica el lado del manipulador (0 izq 1 der)
	double *pdListaRelaciones;		//lista de relaciones configuradas
	
	//se requeren implementar algunas validaciones antes de iniciar
	//el proceso de guardado de la nueva transmision
	
	//se verifica que la información se encuentra al 100% requisitada
	GetCtrlVal (iPanelCatTransmisiones, pCatTransm_txtNombreTransmision, cDescripcion);
	if (strlen(cDescripcion) == 0)
		strcat(cMensajeError,"- No se ha especificado un nombre a la transmision. \n");

	//verifica la informacion del numero de velocidades asocidadas
	GetCtrlVal (iPanelCatTransmisiones, pCatTransm_numNumeroVelocidades, &iNumVelocidades);
	if (iNumVelocidades == 1)
		strcat(cMensajeError,"- Se ha dejado el valor por defecto de 1 velocidad. \n");
	
	//vefifica los valores de relación para las velocidades capturadas
	pdListaRelaciones = malloc(sizeof(double)*iNumVelocidades);
	for (int i=0; i<iNumVelocidades; i++)
	{
		GetTableCellVal (iPanelCatTransmisiones, pCatTransm_tblRelaciones,
						 MakePoint(1,i+1), &dRelacion);
		pdListaRelaciones[i]=dRelacion;
		
		if (dRelacion == 0)
		{
			strcat(cMensajeError,
				   GRA_Strcat(3,"- Para la velocidad ",GRA_IntStr(i+1)," falta indicar la relación. \n"));
		}
	}
	
	//debe verificar que el nombre de la transmision no exista ya en el sistema
	if (BDS_VerificaDescripcionTransmision(cDescripcion)== TRA_EXISTE)
		strcat(cMensajeError,"- Ya existe en el sistema una transmisión con el mismo nombre. \n");
	
	GetCtrlVal (iPanelCatTransmisiones, pCatTransm_chkLadoIzquierdo, &iLadoManipulador);
	
	if (strlen(cMensajeError)>0)
	{
		MessagePopup ("Validación de información.", cMensajeError);
	}
	else
	{
		//inicia el proceso de guardado de la informacion, para lo cual obtiene
		//la lista de relaciones de las velocidades que se han configurado
		BDS_InsertaTransmision(cDescripcion, iNumVelocidades, pdListaRelaciones, iLadoManipulador);
		
		MessagePopup ("Registro guardado",
					  "Se almacenó la información correctamente.");
		
		//regresa la interfaz al modo menu principal
		PRE_CancelarProceso();
	}
	
	free(pdListaRelaciones);
	
	return 0;
}