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