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; }
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); }
/***************************************************************************** . . 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; }
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); } }
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(); }
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; }
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 ); }
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; }
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; }
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; }
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; }
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; }
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; }
// 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; }
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; }
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); }
// 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; }
/// 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)); } } }
/** * 適切なドライバを選択し、運転させる */ 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(); } }
/*---------------------------------------------------------------------------------------------- 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; }
/*---------------------------------------------------------------------------------------------- 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; }
/***************************************************************************** . . 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; }