Пример #1
0
void CHeaderView::PreSubClassWnd() 
{
	m_pParentWnd = GetParent();
	ASSERT(m_pParentWnd);
	ClearImages();
	ReDraw(); 
}
Пример #2
0
//********************************************************************
void CGuiHeaderCtrl::PreSubclassWindow() 
{
	m_pParentWnd = GetParent();
	ASSERT(m_pParentWnd);
	CHeaderCtrl::PreSubclassWindow();
	ClearImages();
	ReDraw(); 
}
Пример #3
0
//*********************************************************************
void CHeaderView::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
	Default();
	Invalidate();
	UpdateWindow();
	ReDraw();

}
Пример #4
0
//*********************************************************************
void CGuiHeaderCtrl::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
	CHeaderCtrl::OnWindowPosChanged(lpwndpos);
	Invalidate();
	UpdateWindow();
	ReDraw();

}
Пример #5
0
void __fastcall TCallCenter_Sub_Form::Timer1Timer(TObject *Sender)
{
//假如Terminate,將Timer停掉
        if(Application->Terminated)
        {
                Timer1->Enabled = false;
                return;
        }
        ReDraw();
}
void EDA_DRAW_PANEL::OnPaint( wxPaintEvent& event )
{
    if( GetScreen() == NULL )
    {
        event.Skip();
        return;
    }

    INSTALL_PAINTDC( paintDC, this );

    wxRect region = GetUpdateRegion().GetBox();
    SetClipBox( paintDC, &region );
    ReDraw( &paintDC, true );
}
Пример #7
0
Acad::ErrorStatus CGraphListCtrl::InsertItem( int nItem, CGraphBlockViewWnd* pItem, LPCTSTR szTitleName, DWORD dwData )
{
	pItem->SetName(szTitleName);
	pItem->SetData(dwData);
	if(nItem >= GetItemCount())
	{
		m_arrayItem.Add(pItem);
	} 
	else
	{
		m_arrayItem.InsertAt(nItem, pItem);
	}

	ReDraw();
	return Acad::eOk;
}
Пример #8
0
//---------------------------------------------------------------------------
void __fastcall TCallCenter_Sub_Form::FormShow(TObject *Sender)
{
        if( m_pCar==NULL )
    	        return;
        ReDraw();
        //Image Status
	if(m_pImage_Car->Tag != m_pCar->m_pImage_Car->Tag)   //Change Car Image
        {
                m_pImage_Car->Tag = m_pCar->m_pImage_Car->Tag;
    	        CallCenter_Main_Form->ChangeCarImgByTag(m_pImage_Car,1);
    	        m_pImage_Car->Left = (Image_Map_Sub->Left) + (Image_Map_Sub->ClientWidth/2 - m_pImage_Car->Width/2);
    	        m_pImage_Car->Top = (Image_Map_Sub->Top) + (Image_Map_Sub->ClientHeight/2 - m_pImage_Car->Height/2);
        }
        Image_Map_Sub->ShowHint = true;
        Image_Map_Sub->Hint = AnsiString("追蹤監控視窗\n車號: ")+AnsiString(m_pCar->GetCarID());;
}
Пример #9
0
void WinEDA_DrawPanel::OnPaint(wxPaintEvent & event)
/***************************************************/
{
wxPaintDC paintDC(this);
EDA_Rect tmp;
wxRect PaintClipBox;
wxPoint org;

	PrepareGraphicContext(&paintDC);
	tmp = m_ClipBox;

	org = m_ClipBox.GetOrigin();

	wxRegionIterator upd(GetUpdateRegion()); // get the update rect list

	while ( upd )
	{
		PaintClipBox = upd.GetRect();
		upd++;

		PaintClipBox.x += org.x;
		PaintClipBox.y += org.y;

#ifdef WX_ZOOM
		m_ClipBox.m_Pos.x = PaintClipBox.x * GetZoom();
		m_ClipBox.m_Pos.y = PaintClipBox.y * GetZoom();
		m_ClipBox.m_Size.x = PaintClipBox.m_Size.x * GetZoom();
		m_ClipBox.m_Size.y = PaintClipBox.m_Size.y * GetZoom();
		PaintClipBox = m_ClipBox;
#else
		m_ClipBox.SetX(PaintClipBox.GetX());
		m_ClipBox.SetY(PaintClipBox.GetY());
		m_ClipBox.SetWidth(PaintClipBox.GetWidth());
		m_ClipBox.SetHeight(PaintClipBox.GetHeight());
#endif

		wxDCClipper * dcclip = new wxDCClipper(paintDC, PaintClipBox);
		ReDraw(&paintDC, TRUE);
		delete dcclip;
	}

	m_ClipBox = tmp;
		
}
Пример #10
0
int main (int argc, char *argv[])
{
    Uint8* mouse;
    bool start=false;
    bool exitstate=false;
    int clickx,clicky;

    ClearField();

    if(SDL_Init(SDL_INIT_VIDEO)<0)
    {
        printf("Unable to init SDL: %s\n",SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);

    SDL_WM_SetCaption("Life game","life");
    screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF);

    if(screen==NULL)
    {
        printf("unable to set 640x480 video %s\n",SDL_GetError());
        exit(1);
    }
    InitImages();
    DrawIMG(background,0,0);
    while(exitstate==false)
    {
        SDL_Event event;
        while(SDL_PollEvent(&event))
        {
            if(event.type==SDL_QUIT)
            {
                exitstate=true;
            }
            if(event.type==SDL_KEYDOWN)
            {
                if(event.key.keysym.sym=SDLK_ESCAPE)
                {
                    exitstate=true;
                }
            }
            if(event.type==SDL_MOUSEBUTTONUP)
            {
                clickx=event.button.x;
                clicky=event.button.y;
                if(clicky>450 && clickx<320)
                {
                    if(start==false)
                    {
                        start=true;
                    }
                    else
                    {
                        start=false;
                    }
                }
                if(clicky>450 && clickx>320)
                {
                    ClearField();
                    start=false;
                }
                if(clicky<450 && start==false)
                {
                    SetPoint(clickx,clicky);
                }

            }
        }
        if(start==true)
        {
            SDL_Delay(500);
            NextGen();
        }
        ReDraw();


    }
    return 0;
}
Пример #11
0
void __fastcall TCallCenter_Sub_Form::ReDraw_SubFormClick(TObject *Sender)
{
	ReDraw();
}
Пример #12
0
//---------------------------------------------------------------------------
void __fastcall TCallCenter_Sub_Form::FormResize(TObject *Sender)
{
	ReDraw();
    m_pImage_Car->Left = (Image_Map_Sub->Left) + (Image_Map_Sub->ClientWidth/2 - m_pImage_Car->Width/2);
    m_pImage_Car->Top = (Image_Map_Sub->Top) + (Image_Map_Sub->ClientHeight/2 - m_pImage_Car->Height/2);
}
Пример #13
0
void MriWatcherGUI::resizeEvent(QResizeEvent *e)
{
  ReDraw();
}
Пример #14
0
//********************************************************************
int CHeaderView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	ClearImages();
	ReDraw();
	return 0;
}
Пример #15
0
bool MriWatcherGUI::eventFilter(QObject* o, QEvent* e)
{
  switch( e->type() )
    {
    case QEvent::FileOpen:
            LoadFile(static_cast<QFileOpenEvent *>(e)->file());
	    break;
    case QEvent::KeyPress:
      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Right )
        {
        // printf("enter key right\n");
        for( int i = m_imageframelist.size() - 2; i >= 0; i-- )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            ImageFrameGUI* m_image = m_imageframelist[i];
            m_imageframelist[i] = m_imageframelist[i + 1];
            m_imageframelist[i + 1] = m_image;
            m_imageframelayout->swap(i, i + 1);
            // printf("Call eventFilter of keypress m_frame->height() = %d, m_frame->width()=%d \n", m_frame->height(), m_frame->width());
           m_imageframelayout->doLayout(QRect(m_frame->x(), m_frame->y(), m_frame->minimumHeight(), m_frame->minimumWidth() ), false);
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Left )
        {
        // printf("enter key left\n");
        for( unsigned int i = 1; i < m_imageframelist.size(); i++ )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            ImageFrameGUI* m_image = m_imageframelist[i];
            m_imageframelist[i] = m_imageframelist[i - 1];
            m_imageframelist[i - 1] = m_image;
            m_imageframelayout->swap(i - 1, i);
            // printf("call eventFilter key left m_frame->height() = %d, m_frame->width()=%d \n", m_frame->height(), m_frame->width());
            m_imageframelayout->doLayout(QRect(m_frame->x(), m_frame->y(), m_frame->minimumHeight(), m_frame->minimumWidth() ), false);
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Delete )
        {
        // printf("enter key delete\n");
        for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            std::vector<ImageFrameGUI *>::iterator it = m_imageframelist.begin();
            for( unsigned int k = 0; k < i; k++ )
              {
              ++it;
              }

            m_imagemanager.DelWindow2D(m_imageframelist[i]->g_imageframe);
            m_imageframelist.erase(it);

            m_imageframelayout->deleteItem(i);

            m_maxsize[0] = 0;
            m_maxsize[1] = 0;
            m_maxsize[2] = 0;
            for( unsigned int j = 0; j < m_imageframelist.size(); j++ )
              {
              QtWindow2DFloat::SizeType m_size = m_imageframelist[j]->g_imageframe->GetImageSize();
              if( m_size[0] > m_maxsize[0] )
                {
                m_maxsize[0] = m_size[0];
                }
              if( m_size[1] > m_maxsize[1] )
                {
                m_maxsize[1] = m_size[1];
                }
              if( m_size[2] > m_maxsize[2] )
                {
                m_maxsize[2] = m_size[2];
                }
              }

            i--;
            m_numberofimages--;
            ReDraw();
            // printf("call eventFilter key delete m_frame->height() = %d, m_frame->width()=%d \n", m_frame->height(), m_frame->width());
            m_imageframelayout->doLayout(QRect(m_frame->x(), m_frame->y(), m_frame->minimumHeight(), m_frame->minimumWidth() ), false);
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->matches(QKeySequence::SelectAll) )
        {
        // printf("enter key select all\n");
        for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
          {
          m_imageframelist[i]->Select();
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_O )
        {
        QString filename = QFileDialog::getOpenFileName(
            this,
            tr("Select one image files to open"),
            QDir::currentPath(),
            tr("*.jpg *.gipl* *.raw* *.hdr *.mha *.mhd* *.nhdr* *nrrd* *nii*") );
        if( filename != NULL )
          {
          ReaderType::Pointer reader = ReaderType::New();
          reader->SetFileName( filename.toLatin1().constData() );
          try
            {
            reader->Update();
            }
          catch( itk::ExceptionObject & e )
            {
            QMessageBox::information( this, "MriWatcher", "Unable to load file:\n" + filename.toLatin1() );
            return false;
            }

          m_originalimage = reader->GetOutput();
          if( m_originalimage.IsNotNull() )
            {
            for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
              {
              if( m_imageframelist[i]->IsSelected() )
                {
                m_imageframelist[i]->g_imageframe->SetInputOverlay(m_originalimage);
                }
              }
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_H )
        {
        for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            if( m_imageframelist[i]->g_imageframe->OverlayVisible() )
              {
              m_imageframelist[i]->g_imageframe->HideOverlay();
              }
            else
              {
              m_imageframelist[i]->g_imageframe->ShowOverlay();
              }
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_C )
        {
        for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            if( m_imageframelist[i]->g_imageframe->IsCrosshairVisible() )
              {
              m_imageframelist[i]->g_imageframe->SetCrosshairVisible(false);
              }
            else
              {
              m_imageframelist[i]->g_imageframe->SetCrosshairVisible(true);
              }
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_S )
        {
        QString filename = QFileDialog::getOpenFileName(
            this,
            tr("Select one image files to open"),
            QDir::currentPath(),
            tr("*.jpg *.gipl* *.raw* *.hdr *.mha *.mhd* *.nhdr* *nrrd* *nii*") );
        if( filename != NULL )
          {
          ReaderType::Pointer reader = ReaderType::New();
          reader->SetFileName( filename.toLatin1().constData() );
          try
            {
            reader->Update();
            }
          catch( itk::ExceptionObject & e )
            {
            QMessageBox::information( this, "MriWatcher", "Unable to load file:\n" + filename.toLatin1() );
            return false;
            }

          m_originalimage = reader->GetOutput();
          if( m_originalimage.IsNotNull() )
            {
            for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
              {
              if( m_imageframelist[i]->IsSelected() )
                {
                m_imageframelist[i]->g_imageframe->SetInputImage2(m_originalimage);
                }
              }
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Plus )
        {
        for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            if( m_imageframelist[i]->g_imageframe->cOverlayOpacity * 100 < 95 )
              {
              m_imageframelist[i]->g_imageframe->ChangeLabelOverlay( (int)(m_imageframelist[i]->g_imageframe->
                                                                           cOverlayOpacity * 100 + 5) );
              }
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Minus )
        {
        for( unsigned int i = 0; i < m_imageframelist.size(); i++ )
          {
          if( m_imageframelist[i]->IsSelected() )
            {
            if( m_imageframelist[i]->g_imageframe->cOverlayOpacity * 100  > 5 )
              {
              m_imageframelist[i]->g_imageframe->ChangeLabelOverlay( (int)(m_imageframelist[i]->g_imageframe->
                                                                           cOverlayOpacity * 100 - 5) );
              }
            }
          }
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Alt )
        {
        m_keyalt = true;
        }

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Control )
        {
        m_keyctrl = true;
        }

      break;

    case QEvent::KeyRelease:

      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Alt )
        {
        m_keyalt = false;
        }
      if( static_cast<QKeyEvent *>( e )->key() == Qt::Key_Control )
        {
        m_keyctrl = false;
        }

      break;

    default: break;
    }

  return false;
}
Пример #16
0
void MriWatcherGUI::LoadFile(const QString& filename)
{
  ReaderType::Pointer reader = ReaderType::New();
  ImageType::Pointer  image = reader->GetOutput();

  reader->SetFileName( filename.toLatin1().constData() );
  try
    {
    reader->Update();
    }
  catch( itk::ExceptionObject & e )
    {
    // std::cerr << "Exception in file reader " << std::endl;
    // std::cerr << e << std::endl;
    QMessageBox::information( this, "MriWatcher",
                              "Unable to load file:\n" + filename);

    return;
    }

  m_numberofimages++;

  ImageFrameGUI* m_imageframe = new ImageFrameGUI(m_frame);

  connect(m_imageframe->g_imageframe, SIGNAL( Clicked(int) ), this, SLOT( ImageFrameClicked() ) );
  connect(m_imageframe, SIGNAL( GetFiles(const QString &) ), this, SLOT( LoadOverlay(const QString &) ) );

  m_imageframe->g_imageframe->SetManager(&m_imagemanager);
  m_imageframe->g_imageframe->SetSlider(g_slice_slider);
  m_imageframe->g_imageframe->SetId(m_direction);
  QFileInfo info(filename);
  m_imageframe->g_imageframe->SetImageName(info.baseName() );
  m_imageframe->g_imageframe->DrawPosition(g_draw_position->isChecked() );
  m_imageframe->g_imageframe->DrawIntensity(g_draw_intensity->isChecked() );

  // This string should  only be used for display purposes it is not
  // safe to use this for comparison of types
  //  QString pixeltypestring(reader->GetImageIO()->GetComponentTypeInfo().name());
  QString pixeltypestring(QString::fromStdString(reader->GetImageIO()->GetComponentTypeAsString(
                                                   reader->GetImageIO()->GetComponentType() ) ) );
  m_imageframe->g_imageframe->DrawImageName(g_draw_name->isChecked() );

  m_imagesize =  image->GetLargestPossibleRegion().GetSize();
  m_imagespacing = image->GetSpacing();

  int m_cimagesize[3];
  m_cimagesize[0] = m_imagesize[0];
  m_cimagesize[1] = m_imagesize[1];
  m_cimagesize[2] = m_imagesize[2];
  float m_cpixdim[3];
  m_cpixdim[0] = m_imagespacing[0];
  m_cpixdim[1] = m_imagespacing[1];
  m_cpixdim[2] = m_imagespacing[2];

  m_imageframe->g_imageframe->SetImageInfo(m_cimagesize, m_cpixdim, pixeltypestring);
  m_imageframe->g_imageframe->DrawImageInfo(g_draw_info->isChecked() );

  typedef MinimumMaximumImageCalculator<ImageType> CalculatorType;
  CalculatorType::Pointer calculator = CalculatorType::New();
  calculator->SetImage(image);
  calculator->Compute();
  ImageType::PixelType m_min = calculator->GetMinimum();
  ImageType::PixelType m_max = calculator->GetMaximum();
  if( m_max > m_imagemax )
    {
    m_imagemax = m_max;
    }
  if( m_min < m_imagemin )
    {
    m_imagemin = m_min;
    }

  m_imageframe->g_imageframe->SetImageMinMax(m_min, m_max);

  if( m_numberofimages == 1 )
    {
    m_imagemanager.SetSourceImage(image);
    }
  m_imageframe->g_imageframe->SetInputImage(image);
  m_imageframe->g_imageframe->ChangeAlpha(100);

  ReDraw();

  g_slice_slider->setEnabled(true);

  m_frame->setGeometry(QRect(m_frame->x(), m_frame->y(), m_frame->height(), m_frame->width() ) );

  // gridLayout_imageWindows->addWidget(m_imageframe);

  m_imageframelayout->addWidget(m_imageframe);
  m_imageframelist.push_back(m_imageframe);
  // m_imageframe->setLayout(m_imageframelayout);

  m_imageframe->show();
//    g_scrollArea->setWidget(m_imageframe);

  if( m_imageframelist.size() == 1 )
    {
    m_imagemanager.SetCrosshair(m_imagesize[0] / 2, m_imagesize[1] / 2, m_imagesize[2] / 2);
    }
  else
    {
    m_imagemanager.UpdateCrosshair();
    }

  if( m_imagesize[0] > m_maxsize[0] )
    {
    m_maxsize[0] = m_imagesize[0];
    }
  if( m_imagesize[1] > m_maxsize[1] )
    {
    m_maxsize[1] = m_imagesize[1];
    }
  if( m_imagesize[2] > m_maxsize[2] )
    {
    m_maxsize[2] = m_imagesize[2];
    }

  UpdateLabel();

/*
    if (!filename.isEmpty()) {
         QImage image(filename);
         if (image.isNull()) {
             QMessageBox::information(this, tr("Image Viewer"),
                                      tr("Cannot load %1.").arg(filename));
             return;
         }
     //   imageLabel->setPixmap(QPixmap::fromImage(image));
     }
*/
}
// ---------------------------------------------------------
// CPosPSYListView::ActivateL
// 
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosPSYListView::ActivateL()
    {
    ReDraw();
    }
// ---------------------------------------------------------
// CPosPSYStartView::ActivateL
// 
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosPSYStartView::ActivateL()
    {
    ReDraw();
    }
Пример #19
0
void
ObjectView::MessageReceived(BMessage *inMsg)
{
	BPoint delta(0, 0), where(0, 0);
	if (inMsg->WasDropped()) {
		where = inMsg->DropPoint(&delta);
		ConvertFromScreen(&where);
	}
	switch (inMsg->what) {
	
	case REDISPLAY_OBJECT: {
		BRect		r;
		BMessageQueue	*q = Window()->MessageQueue();
		BMessage	*m=nullptr;
		
		if (inMsg->HasRect("rect")) {
			r = inMsg->FindRect("rect");
		} else {
			r = Bounds();
		}
		for (int count=0; m=q->FindMessage(REDISPLAY_OBJECT, count); count++) {
			ObjectView	*ov=nullptr;
			m->FindPointer("object", (void**)&ov);
			if (ov == this) {
				BRect	s;
				if (m->HasRect("rect")) {
					s = m->FindRect("rect");
					s.left = Min(s.left,r.left);
					s.right = Max(s.right, r.right);
					m->ReplaceRect("rect", s);
				} else {
					s = r;
					m->AddRect("rect", s);
				}
				return;
			}
		}
		Draw(r);
		break;
	}
	
	case SET_COLOR: {
		rgb_color		*p;
		ssize_t			sz;
		
		inMsg->FindData("color", B_RAW_TYPE, (const void **)&p, &sz);
		color.red = p->red;
		color.green = p->green;
		color.blue = p->blue;
		ReDraw();
		break;
	}
	
	case SET_DISPLAY_MODE: {
		rgb_color		*p;
		int32			md = inMsg->FindInt32("display mode");
		SetDisplayMode(md);
		break;
	}
	
	default:
		BView::MessageReceived(inMsg);
		break;
		
	}
}
Пример #20
0
/*********************  Start of window procedure  **********************/
MRESULT EXPENTRY MyWindowProc( HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2 )
{
  USHORT command;                       /* WM_COMMAND command value     */
  HPS    hps;                           /* Presentation Space handle    */
  RECTL  rc;                            /* Rectangle coordinates        */
  POINTL pt;                            /* String screen coordinates    */

  switch( msg )
  {
    case WM_CREATE:
      if( State == RUNNING ) break;
      /******************************************************************/
      /* Window initialization is performed here in WM_CREATE processing*/
      /* WinLoadString loads strings from the resource file.            */
      /******************************************************************/
      InitIt( "DSTD32", Hab, hwnd );
      ReDraw( hwnd );
      break;

    case WM_COMMAND:
      /******************************************************************/
      /* When the user chooses option 1, 2, or 3 from the Options pull- */
      /* down, the text string is set to 1, 2, or 3, and                */
      /* WinInvalidateRegion sends a WM_PAINT message.                  */
      /* When Exit is chosen, the application posts itself a WM_CLOSE   */
      /* message.                                                       */
      /******************************************************************/
      command = SHORT1FROMMP(mp1);      /* Extract the command value    */
      switch (command)
      {
        case ID_LOAD:
          if( State == RUNNING ) break;
          if( State != NONE ) {
              KillIt();
              State = NONE;
          }
          if( LoadIt() ) {
              State = LOADED;
          }
          ReDraw( hwnd );
          break;
        case ID_RUN:
          if( State == RUNNING ) break;
          State = RUNNING;
          ReDraw( hwnd );
          if( InHardMode ) {
              WinLockInput( 0, FALSE );
              InHardMode = FALSE;
          }
          State = RunIt() ? BROKE : TERMINATED;
          if( HardMode ) {
              WinLockInput( 0, TRUE );
              InHardMode = TRUE;
          }
          ReDraw( hwnd );
          break;
        case ID_KILL:
          if( State == RUNNING ) break;
          if( InHardMode ) {
              WinLockInput( 0, FALSE );
              InHardMode = FALSE;
          }
          if( State != NONE ) {
              KillIt();
              State = NONE;
          }
          ReDraw( hwnd );
          break;
        case ID_HARD:
          if( State == RUNNING ) break;
          HardMode = !HardMode;
          TellHardMode( HardMode ? (char)-1 : 0 );
          ReDraw( hwnd );
          break;
        case ID_EXITPROG:
          if( InHardMode ) {
              WinLockInput( 0, FALSE );
              InHardMode = FALSE;
          }
          if( State == RUNNING ) break;
          WinPostMsg( hwnd, WM_CLOSE, 0L, 0L );
          break;
        default:
          return WinDefWindowProc( hwnd, msg, mp1, mp2 );
      }
      break;
    case WM_ERASEBACKGROUND:
      /******************************************************************/
      /* Return TRUE to request PM to paint the window background       */
      /* in SYSCLR_WINDOW.                                              */
      /******************************************************************/
      return (MRESULT)( TRUE );
    case WM_PAINT:
      /******************************************************************/
      /* Window contents are drawn here in WM_PAINT processing.         */
      /******************************************************************/
                                        /* Create a presentation space  */
      hps = WinBeginPaint( hwnd, NULL, &rc );
      pt.x = 50; pt.y = 50;             /* Set the text coordinates,    */
      GpiSetColor( hps, CLR_NEUTRAL );         /* colour of the text,   */
      GpiSetBackColor( hps, CLR_BACKGROUND );  /* its background and    */
      GpiSetBackMix( hps, BM_OVERPAINT );      /* how it mixes,         */
                                               /* and draw the string...*/
      strcpy( WhatItIs[ State ] +HARD_POS, IsHardMode[ HardMode ] );
      GpiCharStringAt( hps, &pt, (LONG)strlen( WhatItIs[ State ] ), WhatItIs[ State ] );
      WinEndPaint( hps );                      /* Drawing is complete   */
      break;
    case WM_CLOSE:
      /******************************************************************/
      /* This is the place to put your termination routines             */
      /******************************************************************/
      if( State == RUNNING ) break;
      FiniIt();
      WinPostMsg( hwnd, WM_QUIT, 0L, 0L );  /* Cause termination        */
      break;
    default:
      /******************************************************************/
      /* Everything else comes here.  This call MUST exist              */
      /* in your window procedure.                                      */
      /******************************************************************/

      return WinDefWindowProc( hwnd, msg, mp1, mp2 );
  }
  return FALSE;
}
Пример #21
0
LRESULT FAR PASCAL WndProc( HWND hWnd,
                         UINT Message,
                         WPARAM wParam,
                         LPARAM lParam)
{
    DWORD dwImmRet = 0;        // return value of ImmSrvProcessKey()

    try {

        switch (Message)
        {
            case CONIME_CREATE:
                DBGPRINT(("CONIME: CONIME_CREATE: Console Handle=%08x\n", wParam));
                return InsertNewConsole(hWnd,(HANDLE)wParam,(HWND)lParam);

            case CONIME_DESTROY:
                DBGPRINT(("CONIME: CONIME_DESTROY: Console Handle=%08x\n", wParam));
                return RemoveConsole(hWnd, (HANDLE)wParam);

            case CONIME_SETFOCUS:
                DBGPRINT(("CONIME: CONIME_SETFOCUS: Console Handle=%08x\n", wParam));
                return ConsoleSetFocus(hWnd, (HANDLE)wParam, (HKL)lParam);

            case CONIME_KILLFOCUS:
                DBGPRINT(("CONIME: CONIME_KILLFOCUS: Console Handle=%08x\n", wParam));
                return ConsoleKillFocus(hWnd, (HANDLE)wParam);

            case CONIME_GET_NLSMODE:
                DBGPRINT(("CONIME: CONIME_GET_NLSMODE: Console Handle=%08x\n", wParam));
                return GetNLSMode(hWnd, (HANDLE)wParam);

            case CONIME_SET_NLSMODE:
                DBGPRINT(("CONIME: CONIME_SET_NLSMODE: Console Handle=%08x\n", wParam));
                return SetNLSMode(hWnd, (HANDLE)wParam, (DWORD)lParam);

            case CONIME_HOTKEY:
                DBGPRINT(("CONIME: CONIME_HOTKEY\n"));
                return ConimeHotkey(hWnd, (HANDLE)wParam, (DWORD)lParam);

            case CONIME_NOTIFY_VK_KANA:
                DBGPRINT(("CONIME: CONIME_NOTIFY_VK_KANA\n"));
                return ImeUISetConversionMode(hWnd);

            case CONIME_NOTIFY_SCREENBUFFERSIZE: {
                COORD ScreenBufferSize;
                DBGPRINT(("CONIME: CONIME_NOTIFY_SCREENBUFFERSIZE: Console Handle=%08x\n", wParam));
                ScreenBufferSize.X = LOWORD(lParam);
                ScreenBufferSize.Y = HIWORD(lParam);
                return ConsoleScreenBufferSize(hWnd, (HANDLE)wParam, ScreenBufferSize);
            }

            case CONIME_INPUTLANGCHANGE: {
                DBGPRINT(("CONIME: CONIME_INPUTLANGCHANGE: Console Handle=%08x \n",wParam));
                ConImeInputLangchange(hWnd, (HANDLE)wParam, (HKL)lParam );
                return TRUE;
            }

            case CONIME_NOTIFY_CODEPAGE: {
                BOOL Output;
                WORD Codepage;

                Codepage = HIWORD(lParam);
                Output = LOWORD(lParam);
                DBGPRINT(("CONIME: CONIME_NOTIFY_CODEPAGE: Console Handle=%08x %04x %04x\n",wParam, Output, Codepage));
                return ConsoleCodepageChange(hWnd, (HANDLE)wParam, Output, Codepage);
            }

            case WM_KEYDOWN    +CONIME_KEYDATA:
            case WM_KEYUP      +CONIME_KEYDATA:
            case WM_SYSKEYDOWN +CONIME_KEYDATA:
            case WM_SYSKEYUP   +CONIME_KEYDATA:
            case WM_DEADCHAR   +CONIME_KEYDATA:
            case WM_SYSDEADCHAR+CONIME_KEYDATA:
            case WM_SYSCHAR    +CONIME_KEYDATA:
            case WM_CHAR       +CONIME_KEYDATA:
                CharHandlerFromConsole( hWnd, Message, (ULONG)wParam, (ULONG)lParam );
                break;
            case WM_KEYDOWN:
            case WM_KEYUP:
            case WM_SYSKEYDOWN:
            case WM_SYSKEYUP:
            case WM_DEADCHAR:
            case WM_SYSDEADCHAR:
            case WM_SYSCHAR:
            case WM_CHAR:
                CharHandlerToConsole( hWnd, Message, (ULONG)wParam, (ULONG)lParam );
                break;

            case WM_INPUTLANGCHANGE:
                DBGPRINT(("CONIME: CONIME_INPUTLANGCHANGE: Console Handle=%08x \n",wParam));
                InputLangchange(hWnd, (DWORD)wParam, (HKL)lParam );
                return TRUE;

            case WM_INPUTLANGCHANGEREQUEST:
                // Console IME never receive this message for this window is hidden
                // and doesn't have focus.
                //
                // However, Hot key of IME_CHOTKEY_IME_NONIME_TOGGLE/IME_THOTKEY_IME_NONIME_TOGGLE
                // are send this message by ImmSimulateHotKey API.
                //
                // If nothing processing by this message, then DefWindowProc calls
                // ActivateKeyboardLayout on kernel side.
                // And, ActivateKeyboardLayout send WM_INPUTLANGCHANGE message to focus window
                // on this message queue.
                // It window is console window procedure.
                // Console window procedure can do send CONIME_INPUTLANGCHANGE message to
                // console IME window.
                // In console window is windowed case, this sequence as well.
                // But, In console window is full screen case, message queue have not focus.
                // WM_INPUTLANGCHANGE message can not send to console window procedure.
                //
                // This code avoid console full screen mode problem.
                // Send message to console window procedure when this window receive it.
                //
                {
                    PCONSOLE_TABLE ConTbl;

                    ConTbl = SearchConsole(LastConsole);
                    if (ConTbl == NULL) {
                        return DefWindowProc(hWnd, Message, wParam, lParam);
                    }

                    PostMessage(ConTbl->hWndCon, Message, wParam, lParam);
                }
                return TRUE;    // TRUE : process this message by application

            case CONIME_INPUTLANGCHANGEREQUEST:
                DBGPRINT(("CONIME: CONIME_INPUTLANGCHANGEREQUEST: Console Handle=%08x \n",wParam));
                return ConImeInputLangchangeRequest(hWnd, (HANDLE)wParam, (HKL)lParam, CONIME_DIRECT);

            case CONIME_INPUTLANGCHANGEREQUESTFORWARD:
                DBGPRINT(("CONIME: CONIME_INPUTLANGCHANGEREQUEST: Console Handle=%08x \n",wParam));
                return ConImeInputLangchangeRequest(hWnd, (HANDLE)wParam, (HKL)lParam, CONIME_FORWARD);

            case CONIME_INPUTLANGCHANGEREQUESTBACKWARD:
                DBGPRINT(("CONIME: CONIME_INPUTLANGCHANGEREQUEST: Console Handle=%08x \n",wParam));
                return ConImeInputLangchangeRequest(hWnd, (HANDLE)wParam, (HKL)lParam, CONIME_BACKWARD);

#ifdef DEBUG_MODE
            case WM_MOVE:
                ImeUIMoveCandWin( hWnd );
                break;

            case WM_COMMAND: // message: command from application menu

                // Message packing of wparam and lparam have changed for Win32,
                // so use the GET_WM_COMMAND macro to unpack the commnad

                switch (LOWORD(wParam)) {
                    case MM_EXIT:
                        PostMessage(hWnd,WM_CLOSE,0,0L);
                        break;

                    case MM_ACCESS_VIOLATION:
                        {
                            PBYTE p = 0;
                            *p = 0;
                        }
                        break;
                }
                break;
#endif

            case WM_IME_STARTCOMPOSITION:
                ImeUIStartComposition( hWnd );
                break;
            case WM_IME_ENDCOMPOSITION:
                ImeUIEndComposition( hWnd );
                break;
            case WM_IME_COMPOSITION:
                ImeUIComposition( hWnd, wParam, lParam );
                break;
            case WM_IME_COMPOSITIONFULL:
                break;
            case WM_IME_NOTIFY:
                if ( !ImeUINotify( hWnd, wParam, lParam ) ) {
                    return DefWindowProc(hWnd, Message, wParam, lParam);
                }
                break;
            case WM_IME_SETCONTEXT:
                //
                // The application have to pass WM_IME_SETCONTEXT to DefWindowProc.
                // When the application want to handle the IME at the timing of
                // focus changing, the application should use WM_GETFOCUS or
                // WM_KILLFOCUS.
                //
                lParam &= ~ISC_SHOWUIALL;

                return DefWindowProc( hWnd, Message, wParam, lParam );
            case WM_IME_SYSTEM:
                switch (wParam) {
                    case IMS_CLOSEPROPERTYWINDOW:
                    case IMS_OPENPROPERTYWINDOW:
                        ImeSysPropertyWindow(hWnd, wParam, lParam);
                        break;
                    default:
                        return DefWindowProc( hWnd, Message, wParam, lParam );
                }
                break;

            case WM_CREATE:
                return Create(hWnd);
                break;

            case WM_DESTROY:
                DBGPRINT(("CONIME:Recieve WM_DESTROY\n"));
                ExitList(hWnd);
                PostQuitMessage(0);
                return 0;
                break;

            case WM_CLOSE:
                DBGPRINT(("CONIME:Recieve WM_CLOSE\n"));
                DestroyWindow(hWnd);
                return 0;
                break;

            case WM_ENABLE:{
                PCONSOLE_TABLE FocusedConsole;
                if (!wParam) {
                    FocusedConsole = SearchConsole(LastConsole);
                    if (FocusedConsole != NULL &&
                        FocusedConsole->hConsole != NULL) {
                        FocusedConsole->Enable = FALSE;
                        EnableWindow(FocusedConsole->hWndCon,FALSE);
                        gfDoNotKillFocus = TRUE;
                    }
                }
                else{
                    DWORD i;
                    LockConsoleTable();
                    for ( i = 1; i < NumberOfConsoleTable; i ++){
                        FocusedConsole = ConsoleTable[i];
                        if (FocusedConsole != NULL)
                        {
                            if ((FocusedConsole->hConsole != NULL)&&
                                (!FocusedConsole->Enable)&&
                                (!IsWindowEnabled(FocusedConsole->hWndCon))){
                                EnableWindow(FocusedConsole->hWndCon,TRUE);
                                FocusedConsole->Enable = TRUE;
                                if (!FocusedConsole->LateRemove)
                                    SetForegroundWindow(FocusedConsole->hWndCon);
                            }
                        }
                    }
                    UnlockConsoleTable();
                }
                return DefWindowProc(hWnd, Message, wParam, lParam);
                break;
            }

#ifdef DEBUG_MODE
            case WM_SETFOCUS:
                CreateCaret( hWnd,
                             NULL,
                             IsUnicodeFullWidth( ConvertLine[xPos] ) ?
                             CaretWidth*2 : CaretWidth,
                             (UINT)cyMetrics );
                SetCaretPos( xPos * cxMetrics, 0 );
                ShowCaret( hWnd );
                break;

            case WM_KILLFOCUS:
                HideCaret( hWnd );
                DestroyCaret();
                break;

            case WM_PAINT:
                {
                    PAINTSTRUCT pstruc;
                    HDC  hDC;
                    hDC = BeginPaint(hWnd,&pstruc);
                    ReDraw(hWnd);
                    EndPaint(hWnd,&pstruc);
                    break;
                }
#endif

            case WM_QUERYENDSESSION:
#ifdef HIRSHI_DEBUG
                /*
                 * If specified ntsd debugger on this process,
                 * then never catch WM_QUERYENDSESSION when logoff/shutdown because
                 * this process will terminate when ntsd process terminated.
                 */
                {
                    int i;
                    i = MessageBox(hWnd,TEXT("Could you approve exit session?"), TEXT("Console IME"),
                                   MB_ICONSTOP | MB_YESNO);
                    return (i == IDYES ? TRUE : FALSE);
                }
#endif
                return TRUE;           // Logoff or shutdown time.

            case WM_ENDSESSION:
                DBGPRINT(("CONIME:Recieve WM_ENDSESSION\n"));
                ExitList(hWnd);
                return 0;

            default:          // Passes it on if unproccessed
                return DefWindowProc(hWnd, Message, wParam, lParam);
        }

    } except (InputExceptionFilter(GetExceptionInformation())) {

        if (dwConsoleThreadId)
        {
            DBGPRINT(("CONIME: Exception on WndProc!!\n"));
            UnregisterConsoleIME();
            dwConsoleThreadId = 0;

            DestroyWindow(hWnd);
            return 0;
        }

    }


    return TRUE;
}