qtewin.cpp

来自「远程桌面登陆软件 用rdesktop 但不基于Xwindows 可基于(nano」· C++ 代码 · 共 2,176 行 · 第 1/5 页

CPP
2,176
字号
    if (g_fullscreen)     {       desktop = g_App->desktop();       w = desktop->width();              // returns screen width       h = desktop->height();             // returns screen height       if (w == g_width && h == g_height)       {         g_MW->resize(g_width - 4, g_height - 4);       }       g_App->grabKeyboard();	  QCopChannel::send ( "QPE/KeyHelper" , "disable()" );	  g_SV->setVScrollBarMode(QScrollView::AlwaysOff);	  g_SV->setHScrollBarMode(QScrollView::AlwaysOff);       g_SV->showFullScreen();     }    return True;}/******************************************************************************/void QMyScrollView::timerEvent(QTimerEvent * e){	QMyDialog * d;	//QWidget * Desktop;	//int dw;	//int dh;	char disk[256];	QScrollView::timerEvent(e);	killTimer(timer_id);  	d = new QMyDialog(this);	if (d->exec() == 1) // ok clicked	{		switch (d->WidthHeight)		{			case 0: 				g_width = 640;				g_height = 480;				break;			case 1: 				g_width = 800;				g_height = 600;				break;			case 2: 				g_width = 1024;				g_height = 768;				break;		}		g_fullscreen = d->FullScreen;		switch (d->Color){		case 0:			g_server_depth = 8;			break;		case 1:			g_server_depth = 15;			break;		case 2:			g_server_depth = 16;			break;		case 3:			g_server_depth = 24;			break;		}				if (d->PortNo > 0 && d->PortNo < 65536)			g_tcp_port_rdp = d->PortNo;		g_key = d->KBD;		g_Ctrl = d->Ctrl;		g_OK = d->OK;		g_LeftHand = d->Left;		packet_encryption = d->Enc;		switch (d->Cache)		{			case 0: g_bitmap_cache = 0; break; //"キャッシュなし"			case 1: break; //"キャッシュあり"			case 2: g_bitmap_cache_persist_enable = 1; break; //"~/へ费鲁弄キャッシュ"			case 3: g_bitmap_cache_persist_enable = 1;				g_bitmap_cache_persist_enableSD = 1; break; //"SDへ费鲁弄キャッシュ"			case 4: g_bitmap_cache_persist_enable = 1;				g_bitmap_cache_persist_enableHDD = 1; break; //"HDDへ费鲁弄キャッシュ"		}		g_console_session = d->Console;		switch (d->Sound)		{			case 0: break;			case 1: g_rdpsnd = 1; break;			case 2: g_flags |= RDP_LOGON_LEAVE_AUDIO; break;		}		if (!d->RDP5Exp1)			g_rdp5_performanceflags |= RDP5_NO_WALLPAPER;		if (!d->RDP5Exp2)			g_rdp5_performanceflags |= RDP5_NO_FULLWINDOWDRAG;		if (!d->RDP5Exp3)			g_rdp5_performanceflags |= RDP5_NO_MENUANIMATIONS;		if (!d->RDP5Exp4)			g_rdp5_performanceflags |= RDP5_NO_THEMING;		switch (d->Disk)		{			case 0:				break;			case 1:				sprintf(disk, "%s", ":home=/home/zaurus/Documents");				disk_enum_devices(&g_num_devices, disk);				break;			case 2:				sprintf(disk, "%s", ":SD=/mnt/card");				disk_enum_devices(&g_num_devices, disk);				break;			case 3:				sprintf(disk, "%s", ":home=/home/zaurus/Documents,SD=/mnt/card");				disk_enum_devices(&g_num_devices, disk);				break;			case 4:				if (d->DiskArg == "")					break; 				sprintf(disk, ":%s", (const char *)d->DiskArg);				disk_enum_devices(&g_num_devices, disk);				break;		}		if (d->Comp == 1 )			g_flags |= (RDP_LOGON_COMPRESSION | RDP_LOGON_COMPRESSION2);		sprintf(g_server, "%s", (const char*)d->ServerIP);		sprintf(g_username, "%s", (const char*)d->UserName);		sprintf(g_password, "%s", (const char*)d->Password);		if (QString(d->Password) != "")			g_flags |= RDP_LOGON_AUTO;#ifdef WITH_RDPSND		//init sound		if (g_rdpsnd)		{			rdpsnd_init();		}#endif		rdpdr_init();		cliprdr_init();		if (!rdp_connect(g_server, g_flags, g_domain, g_password, g_shell, g_directory))		{			delete d;			g_SV->close();			return;		}		if (!packet_encryption)		{			g_encryption = False;		}		memset(g_password, 0, sizeof(g_password));		g_Clip = True;		ui_create_window();		delete d;	}	else // cancel clicked	{		delete d;		g_SV->close();	}}/******************************************************************************/QMyMainWindow::QMyMainWindow() : QWidget(g_SV->viewport()){  PopupMenu = new QPopupMenu(this);  PopupMenu->insertItem(tr("Right click"), 1, 0);  PopupMenu->insertItem(tr("Double click"), 2, 1);  PopupMenu->insertItem(tr("Toggle fullscreen"), 3, 2);  PopupMenu->insertItem(tr("Reset keyboard"), 4, 3);  connect(PopupMenu, SIGNAL(activated(int)), this, SLOT(MemuClicked(int)));  bAddressCheck = False;  bClickCheck = False;  bAddressPressed = False;  bOKPressed = False;}/******************************************************************************/QMyMainWindow::~QMyMainWindow(){  delete PopupMenu;}/******************************************************************************/void QMyMainWindow::SetScreen(void){  QWidget* Desktop;  if (g_fullscreen)    {      g_fullscreen = 0;      g_App->ungrabKeyboard();      g_SV->setVScrollBarMode(QScrollView::AlwaysOn);      g_SV->setHScrollBarMode(QScrollView::AlwaysOn);      g_SV->showNormal();      g_SV->showMaximized();	  QCopChannel::send ( "QPE/KeyHelper" , "enable()" );    }    else    {	Desktop = g_App->desktop();	PopupMenu->popup(mapToGlobal(QPoint((Desktop->width() - PopupMenu->width())/ 2, (Desktop->height() - PopupMenu->height())/ 2)));    }}/******************************************************************************/void QMyMainWindow::timerEvent(QTimerEvent * e){  QWidget::timerEvent(e);  if (e->timerId() == timer_id)  {  }  killTimer(timer_id);}/******************************************************************************/void QMyMainWindow::MemuClicked(int MenuID){  QWidget * Desktop;  int dw;  int dh;  if (MenuID == 1) // right click  {    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2,                   mx, my);    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2,                   mx, my);  }  else if (MenuID == 2) // double click  {    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1,                   mx, my);    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1,                   mx, my);    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1,                   mx, my);    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1,                   mx, my);  }  else if (MenuID == 3) // toggle full screen  {    g_fullscreen = ~g_fullscreen;    if (g_fullscreen)    {      Desktop = g_App->desktop();      dw = Desktop->width();      dh = Desktop->height();      if (dw == g_width && dh == g_height)        g_MW->resize(g_width - 4, g_height - 4);      g_App->grabKeyboard();	  QCopChannel::send ( "QPE/KeyHelper" , "disable()" );	  g_SV->setVScrollBarMode(QScrollView::AlwaysOff);	  g_SV->setHScrollBarMode(QScrollView::AlwaysOff);      g_SV->showFullScreen();    }    else    {      g_SV->showNormal();      g_SV->showMaximized();      g_MW->resize(g_width, g_height);    }  }  else if (MenuID == 4) // reset keyboard  {    rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x2a, 0); // shift    rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0); // control    rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x38, 0); // alt  }}/******************************************************************************/void QMyMainWindow::mouseMoveEvent(QMouseEvent* e){  int x, y;  x = e->x();  y = e->y();  if (g_dragscroll == 1 ){	  if (gmx != 0)		  g_SV->scrollBy((gmx - e->globalX()), (gmy - e->globalY()));  }  else {	  /*if (timer_id)	    {	    x = x - mx;	    y = y - my;	    if (x < -10 || x > 10 || y < -10 || y > 10)	    {	       killTimer(timer_id);	       timer_id = 0;	    }	    }*/	  rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_MOVE, e->x(),			  e->y());  }}/******************************************************************************/void QMyMainWindow::mousePressEvent(QMouseEvent* e){   //timer_id = startTimer(1000);   mx = e->x();   my = e->y();  if (g_dragscroll == 1 ){	  gmx = e->globalX();	  gmy = e->globalY();  }  else {   if ((e->button() == LeftButton) && (bAddressPressed))   {      //Double Click      if (g_LeftHand == 1)      {       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y());       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y());       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);      }      else      {       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, e->x(), e->y());       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, e->x(), e->y());       rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);      }      bClickCheck = True;      return;   }   if (bAddressCheck)   {     //Right Click     if (g_LeftHand == 1)     {      rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, e->x(), e->y());     }     else     {      rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y());     }      return;   }   if (e->button() == LeftButton)    //Click    if (g_LeftHand ==1)    {     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y());    }    else    {     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, e->x(), e->y());    }   /*else if (e->button() == RightButton)     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y());   else if (e->button() == MidButton)     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON3, e->x(), e->y());*/  }}/******************************************************************************/void QMyMainWindow::mouseReleaseEvent(QMouseEvent* e){    //killTimer(timer_id);    //timer_id = 0;    if (g_dragscroll == 1 ){	  gmx = 0;	  gmy = 0;  }  else {    if (bAddressCheck) { //Right Click    if (g_LeftHand == 1)    {     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, e->x(), e->y());    }    else    {     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, e->x(), e->y());    }    bAddressCheck = False;    return;   }  if (e->button() == LeftButton)    if (g_LeftHand ==1)    {     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, e->x(), e->y());    }    else    {     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, e->x(), e->y());    }   /*else if (e->button() == RightButton)     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, e->x(), e->y());   else if (e->button() == MidButton)     rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON3, e->x(), e->y());*/  }}/******************************************************************************/void QMyMainWindow::wheelEvent(QWheelEvent* e){  /*if (e->delta() > 0)    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON4, c2sx(e->x()),                   c2sy(e->y()));  else if (e->delta() < 0)    rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON5, c2sx(e->x()),                   c2sy(e->y()));*/}/******************************************************************************/// adjust coordinates for cliping rectbool WarpCoords(int * x, int * y, int * cx, int * cy, int * srcx, int * srcy){  int dx, dy;  QRect InRect(*x, *y, *cx, *cy);  QRect OutRect;  QRect CRect = g_ClipRect->boundingRect();  OutRect = InRect.intersect(CRect);  if (OutRect.isEmpty())  {    return False;  }  dx = OutRect.x() - InRect.x();  dy = OutRect.y() - InRect.y();  *x = OutRect.x();  *y = OutRect.y();  *cx = OutRect.width();  *cy = OutRect.height();  *srcx = *srcx + dx;  *srcy = *srcy + dy;  return True;}/*************

⌨️ 快捷键说明

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