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 + -
显示快捷键?