virtdisp.cpp

来自「老外的一个开源项目」· C++ 代码 · 共 1,089 行 · 第 1/3 页

CPP
1,089
字号
			v_fSingleTap = TRUE;
		} else {
			ShowErr (TEXT("Couldn't find functions"));
			FreeLibrary (hAYGShell);
		}
	}

	// Don't free library since functions are called later.
}

void
DoSIPStuff (HWND hWnd, BOOL fActivate, BOOL fInitDialog)
{
	SHMENUBARINFO	SHMenuBarInfo;

	// Are we on a PocketPC?
	if (pfSipPref && pfFullScreen && pfCreateMenu) {
		if (fActivate) {
			if (fInitDialog) {
				memset ((char *)&SHMenuBarInfo, 0, sizeof(SHMenuBarInfo));
				SHMenuBarInfo.cbSize = sizeof(SHMenuBarInfo);
				SHMenuBarInfo.hwndParent = hWnd;
				SHMenuBarInfo.dwFlags = SHCMBF_EMPTYBAR;
				pfCreateMenu (&SHMenuBarInfo);
			}
			
			pfSipPref (hWnd, SIP_INPUTDIALOG);
			pfSipPref (hWnd, SIP_UP);
			pfFullScreen (hWnd, SHFS_SHOWSIPBUTTON);
		} else {
			pfSipPref (hWnd, SIP_DOWN);
		}
	}
}


//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	DWORD	dwThreadID;
    NOTIFYICONDATA  tnid;
	static	DWORD dwInHelp;
	TCHAR	szTempStr[256];

	switch (message) {
	case WM_INITDIALOG :
		InitSIPStuff ();
		
		// Set notification icon
        tnid.cbSize = sizeof(NOTIFYICONDATA); 
        tnid.hWnd = hWnd; 
        tnid.uID = 13; 
        tnid.uFlags = NIF_MESSAGE | NIF_ICON; 
        tnid.uCallbackMessage = IDM_TASKBAR_NOTIFY;

		v_hNotifyIcon = (HICON )LoadImage( v_hInst, MAKEINTRESOURCE(IDI_VIRTDISP),
										   IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
		
		tnid.hIcon = v_hNotifyIcon;
		Shell_NotifyIcon (NIM_ADD, &tnid);
/*
		// Set a 10 second timer
		SetTimer (hWnd, 5, 10000, NULL);

		// Send ourselves a WM_HELP cmd to show the copyright info
		PostMessage (hWnd, WM_HELP, 0, 0);

		SetFocus (GetDlgItem (hWnd, ID_HIDE));
*/
		return FALSE;
    case IDM_TASKBAR_NOTIFY:
        if((lParam == WM_LBUTTONDBLCLK) || ((lParam == WM_LBUTTONDOWN) && v_fSingleTap)) {
			SetForegroundWindow(hWnd);
            ShowWindow(hWnd, SW_SHOWNORMAL);

			// Pretend I got a Timer message
			PostMessage (hWnd, WM_TIMER, 0, 0);
        }
        break;

	case WM_PALETTECHANGED :
		// ShowErr (TEXT("Got WM_PALETTECHANGED"));
		v_fPaletteChanged = TRUE;
		break;

	case WM_TIMER :
		if (INVALID_SOCKET == Sock) {
			SetWindowText (GetDlgItem(v_hWnd, IDC_STAT1), TEXT(""));
			SetWindowText (GetDlgItem(v_hWnd, IDC_STAT2), TEXT(""));
		} else {
			wsprintf (szTempStr, TEXT("Frames %d, Skip=%d"), dwTotal, dwSkip);
			SetWindowText (GetDlgItem(v_hWnd, IDC_STAT1), szTempStr);
		}
		if (v_hHelpWnd) {
			dwInHelp++;
			if (3 == dwInHelp) {
				PostMessage (v_hHelpWnd, WM_COMMAND, IDOK, 0); 
			}
		}
		break;

	case WM_HELP :
		dwInHelp = 0;
		DialogBox(v_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)AboutDlg);
		break;

	case IDM_CHK_STAT :
		DEBUGMSG (1, (TEXT("Got Check Status\r\n")));
		if (INVALID_SOCKET == Sock) {
			SetWindowText (GetDlgItem(v_hWnd, ID_CONNECT), TEXT("&Connect"));
		} else {
			SetWindowText (GetDlgItem(v_hWnd, ID_CONNECT), TEXT("Dis&connect"));
		}
		break;
		
	case WM_COMMAND:
		wmId    = LOWORD(wParam); 
		wmEvent = HIWORD(wParam); 
		// Parse the menu selections:
		switch (wmId) {	
		case ID_TOOLS_CONNECT :
			v_hConnectThread = CreateThread (NULL, 0, DoConnect, 0, 0, &dwThreadID);
			SetWindowText (GetDlgItem(v_hWnd, ID_CONNECT), TEXT("Dis&connect"));
			ShowWindow (hWnd, SW_HIDE);
			break;
		case ID_EXIT :
			if (INVALID_SOCKET != Sock) {
				closesocket (Sock);
				Sock = INVALID_SOCKET;
			}
			if (INVALID_HANDLE_VALUE != v_hInputThread) {
				DEBUGMSG (1, (TEXT("WndProc(ID_EXIT): Waiting for input thread to exit\r\n")));
				WaitForSingleObject (v_hInputThread, INFINITE);
				CloseHandle (v_hInputThread);
				v_hInputThread = INVALID_HANDLE_VALUE;
			}
			if (INVALID_HANDLE_VALUE != v_hConnectThread) {
				DEBUGMSG (1, (TEXT("WndProc(ID_EXIT): Waiting for connect thread to exit\r\n")));
				WaitForSingleObject (v_hConnectThread, INFINITE);
				CloseHandle (v_hInputThread);
				v_hConnectThread = INVALID_HANDLE_VALUE;
			}
			DestroyWindow (hWnd);
			break;
		case ID_HIDE :
			ShowWindow (hWnd, SW_HIDE);
			break;
		case ID_CONNECT :
			// Are we connected?
			if (INVALID_SOCKET == Sock) {
				if (IDOK == DialogBox (v_hInst, (LPCTSTR)IDD_CONNECT, hWnd, (DLGPROC)ConnectDlg)) {
					v_hConnectThread = CreateThread (NULL, 0, DoConnect, 0, 0, &dwThreadID);
					ShowWindow (hWnd, SW_HIDE);
					SetWindowText (GetDlgItem(v_hWnd, ID_CONNECT), TEXT("Dis&connect"));
				}
			} else {
				// Disconnect
				closesocket (Sock);
				Sock = INVALID_SOCKET;
				if (INVALID_HANDLE_VALUE != v_hInputThread) {
					DEBUGMSG (1, (TEXT("WndProc(ID_CONNECT): Waiting for input thread to exit\r\n")));
					WaitForSingleObject (v_hInputThread, INFINITE);
					CloseHandle (v_hInputThread);
					v_hInputThread = INVALID_HANDLE_VALUE;
				}
				if (INVALID_HANDLE_VALUE != v_hConnectThread) {
					DEBUGMSG (1, (TEXT("WndProc(ID_CONNECT): Waiting for connect thread to exit\r\n")));
					WaitForSingleObject (v_hConnectThread, INFINITE);
					CloseHandle (v_hInputThread);
					v_hConnectThread = INVALID_HANDLE_VALUE;
				}
				SetWindowText (GetDlgItem(v_hWnd, ID_CONNECT), TEXT("&Connect"));
			}
			break;
		case ID_SETTINGS :
			DialogBox (v_hInst, (LPCTSTR)IDD_SETTINGS, hWnd, (DLGPROC)SettingsDlg);
			break;
		default:
			ShowErr (TEXT("Unexpected cmd %d\r\n"), wmId);
		}
		break;
    case WM_DESTROY:
        tnid.cbSize = sizeof(NOTIFYICONDATA); 
        tnid.hWnd = hWnd; 
        tnid.uID = 13; 
		Shell_NotifyIcon(NIM_DELETE, &tnid); 
        PostQuitMessage(0);
        break;

	default:
		break;
   }
   return FALSE;
}



// Message handler for the About box.
LRESULT CALLBACK AboutDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	TCHAR	szTempStr[256];
	
	switch (message) {
	case WM_INITDIALOG:
		v_hHelpWnd = hDlg;
		wsprintf (szTempStr, TEXT("Remote Control for Windows CE Version %d.%02d"), v_Info.dwMajorVersion, v_Info.dwMinorVersion);
		SetWindowText (GetDlgItem (hDlg, IDC_VERSION), szTempStr);
		return TRUE; 

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK) {
			v_hHelpWnd = NULL;
			EndDialog(hDlg, LOWORD(wParam));
			return TRUE;
		}
		break;
	}
    return FALSE;
}


// Mesage handler for the Connect box.
LRESULT CALLBACK ConnectDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) {
	case WM_INITDIALOG:
		DoSIPStuff (hDlg, TRUE, TRUE);
		SetWindowText (GetDlgItem(hDlg, IDC_HOSTNAME), v_szHostname);
		SendMessage (GetDlgItem(hDlg, IDC_HOSTNAME), EM_LIMITTEXT, sizeof(v_szHostname)/sizeof(TCHAR), 0);
		return TRUE; 

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK :
			GetWindowText (GetDlgItem(hDlg, IDC_HOSTNAME), v_szHostname, sizeof(v_szHostname)/sizeof(TCHAR));
			SaveRegSettings();
			EndDialog(hDlg, LOWORD(wParam));
			DoSIPStuff (hDlg, FALSE, FALSE);
			return TRUE;
		case IDCANCEL :
			EndDialog(hDlg, LOWORD(wParam));
			DoSIPStuff (hDlg, FALSE, FALSE);
			return TRUE;
		}
			
		break;
	}
    return FALSE;
}

// Mesage handler for the Settings box.
LRESULT CALLBACK SettingsDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	TCHAR	szTempStr[256];
	
	switch (message) {
	case WM_INITDIALOG:
		DoSIPStuff (hDlg, TRUE, TRUE);
		wsprintf (szTempStr, TEXT("%d"), v_dwRefreshTime);
		SetWindowText (GetDlgItem(hDlg, IDC_REFRESHTIME), szTempStr);
		SendMessage (GetDlgItem(hDlg, IDC_REFRESHTIME), EM_LIMITTEXT, 10, 0);
		return TRUE; 

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDOK :
			GetWindowText (GetDlgItem(hDlg, IDC_REFRESHTIME), szTempStr, sizeof(szTempStr)/sizeof(TCHAR));
			v_dwRefreshTime = _ttoi(szTempStr);
			// A little sanity checking
			if (v_dwRefreshTime < 50) {
				v_dwRefreshTime = 50;
			}
			v_dwAllowRemote = SendMessage (GetDlgItem(hDlg, IDC_ALLOWCONNECT), BM_GETCHECK, 0, 0);
			SaveRegSettings();
			EndDialog(hDlg, LOWORD(wParam));
			DoSIPStuff (hDlg, FALSE, FALSE);
			return TRUE;
		case IDCANCEL :
			EndDialog(hDlg, LOWORD(wParam));
			DoSIPStuff (hDlg, FALSE, FALSE);
			return TRUE;
		}
			
		break;
	}
    return FALSE;
}




BOOL IsActiveSyncConnected(void)
{
  char strOutput[MAX_PATH];
  DWORD dwError;
  BOOL  bReturn;
  DWORD lpcb;
  DWORD lpcConnections;
  RASCONN rasconn;

  bReturn = FALSE;
  strOutput[0] = 0;

  rasconn.dwSize = sizeof(RASCONN);
  lpcb = sizeof(RASCONN);

  dwError = RasEnumConnections(&rasconn, &lpcb, &lpcConnections);
  if (dwError != 0)
  {
    DEBUGMSG(1,(L"IsActiveSyncConnected(): RasEnumConnections() failed, error %d\n", dwError));
    return FALSE;
  }
  else
    DEBUGMSG(1,(L"IsActiveSyncConnected(): RasEnumConnections() = %d\n", lpcConnections));

  if (lpcConnections > 0)
  {
    RASCONNSTATUS status;

    status.dwSize = sizeof(RASCONNSTATUS);

    dwError = RasGetConnectStatus(rasconn.hrasconn, &status);
    if (dwError == 0)
    {
      bReturn = TRUE;

      switch (status.rasconnstate)
      {
        case RASCS_OpenPort:
          strncat(strOutput, " Port Open", MAX_PATH);
          break;
        case RASCS_ConnectDevice:
          strncat(strOutput, " ConnectDevice", MAX_PATH);
          break;
      }
    }
    else
    {
      DEBUGMSG(1,(L"IsActiveSyncConnected(): GetConnectStatus() failed, error %d\n", dwError));
      return FALSE;
    }
  }
  else
  {
    bReturn = FALSE;
    DEBUGMSG(1,(L"IsActiveSyncConnected(): Not connected"));
  }

  return bReturn;
}


⌨️ 快捷键说明

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