remnet.c
来自「wince下的源代码集合打包」· C语言 代码 · 共 1,669 行 · 第 1/4 页
C
1,669 行
/******************************************************************************Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved.remnet.c : Remote networking******************************************************************************/#include <windows.h>#include <windowsx.h>#include <tchar.h>#include "string.h"#include "memory.h"#include "commctrl.h"#include "wcommctl.h"//#include "shlobj.h"//#include "wceshell.h"//#include "aygshell.h"#ifdef USE_SIP# include <sipapi.h>#endif#include "resource.h"#include "remnet.h"#ifdef DEBUGDBGPARAM dpCurSettings = { TEXT("RemoteNet"), { TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),TEXT("Unused"), TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),TEXT("Unused"), TEXT("Unused"),TEXT("Unused"),TEXT("Unused"),TEXT("Misc"), TEXT("Alloc"),TEXT("Function"),TEXT("Warning"),TEXT("Error") }, 0x0000C000 //0xFFFF}; #endif // DEBUGITEMINFO EditItem;HINSTANCE v_hInst;HWND v_hMainWnd;HWND v_hListWnd;HWND v_hCmdBar;HWND v_hDialogWnd;HFONT v_hfont;RECT v_ClientRect;RECT v_ListRect;DWORD v_WizDialog;DWORD v_PrevWizDialog;BOOL v_fInRename;BOOL v_fPortrait;#ifdef USE_SIPLPFNSIP g_pSipGetInfo, g_pSipSetInfo;LPFNSIPSTATUS g_pSipStatus;HINSTANCE g_hSipLib;#endifextern DWORD v_EnteredAsAWizard;DWORD v_DialogPages[DLG_NUMDLGS] = { IDD_RAS_WIZ_1, IDD_RAS_WIZ_2, IDD_RAS_WIZ_3, IDD_RAS_WIZ_4, IDD_RAS_WIZ_5, IDD_RAS_TCPIP_GEN, IDD_RAS_TCPIP_NAME_SERV};const TCHAR szAppName[] = TEXT("RemoteNet");TCHAR szTitle[36];const static TBBUTTON tbButton[] = { {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1}, {STD_DELETE+12,ID_FILE_DELETE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1}, {STD_PROPERTIES+12,ID_FILE_PROPERTIES,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1}, {VIEW_LARGEICONS, ID_VIEW_LARGEICON,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0,0,-1}, {VIEW_SMALLICONS, ID_VIEW_SMALLICON,TBSTATE_ENABLED,TBSTYLE_CHECKGROUP,0,0,0,-1}, {VIEW_DETAILS, ID_VIEW_DETAILS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0, 0, -1},}; static TBBUTTON tbButtonPortrait[] = { {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1}, {0,ID_CONN_CONN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1}, {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0, -1},// {0, ID_CONN_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1}, {STD_PROPERTIES+12,ID_CONN_EDIT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1}, {STD_DELETE+12,ID_CONN_DELETE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0,-1},}; TCHAR nonStr[10];TCHAR deleteStr[30];TCHAR propertiesStr[30];TCHAR largeIconStr[30];TCHAR smallIconStr[30];TCHAR detailsStr[30];const LPTSTR ToolTipsTbl[] = { nonStr, deleteStr, propertiesStr, largeIconStr, smallIconStr, detailsStr};const LPTSTR ToolTipsTblPortrait[] = { nonStr, largeIconStr, smallIconStr, propertiesStr, deleteStr,};// Declare the CommCtrl stuff.DECLARE_COMMCTRL_TABLE;void FAR PASCAL RegisterIPClass(HINSTANCE);void FAR PASCAL UnregisterIPClass(HINSTANCE);void PositionSIP(int nSipState){#ifdef USE_SIP // Do we have the sip function? if (g_pSipGetInfo && g_pSipSetInfo) { SIPINFO si; // See whether the SIP is up or down memset(&si, 0, sizeof(SIPINFO)); si.cbSize = sizeof(SIPINFO); if ((*g_pSipGetInfo)(&si)) { // Has the SIP state changed? if ((!(si.fdwFlags & SIPF_ON) && SIP_UP == nSipState) || (si.fdwFlags & SIPF_ON && !(SIP_UP == nSipState))) { si.fdwFlags ^= SIPF_ON; (*g_pSipSetInfo)(&si); } } }#endif}BOOLCreateShortcut(TCHAR *pEntryName){ TCHAR szFmtStr[256]; TCHAR szPath[256]; TCHAR szFile[256]; char szAnsiTarget[128]; HANDLE hFile; int nLinks = 1; int Len; LoadString(v_hInst, IDS_DESKTOP_PATH, szFmtStr, sizeof(szFmtStr)/sizeof(TCHAR)); wsprintf(szPath, szFmtStr, pEntryName); hFile = CreateFile(szPath, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); while (hFile == INVALID_HANDLE_VALUE) { if (nLinks++ > 20) return FALSE; LoadString(v_hInst, IDS_DESKTOP_PATH2, szFmtStr, sizeof(szFmtStr)/sizeof(TCHAR)); wsprintf(szPath, szFmtStr, pEntryName, nLinks); hFile = CreateFile(szPath, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); } LoadString(v_hInst, IDS_SHORTCUT_STRING, szFmtStr, sizeof(szFmtStr)/sizeof(TCHAR)); wsprintf(szFile, szFmtStr, pEntryName); Len = _tcslen(szFile); wsprintf(szPath, TEXT("%d#%s"), Len, szFile); Len = WideCharToMultiByte(CP_ACP, 0, szPath, -1, szAnsiTarget, 128, NULL, NULL); WriteFile(hFile, szAnsiTarget, Len, &Len, NULL); CloseHandle(hFile); return TRUE;}VOIDUpdateView (DWORD What){ HMENU hMenu; hMenu = CallCommCtrlFunc(CommandBar_GetMenu)(v_hCmdBar, 0); if (ID_VIEW_LARGEICON == What) CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON, ID_VIEW_DETAILS, ID_VIEW_LARGEICON, MF_BYCOMMAND); if (ID_VIEW_SMALLICON == What) CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON, ID_VIEW_DETAILS, ID_VIEW_SMALLICON, MF_BYCOMMAND); if (ID_VIEW_DETAILS == What) CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND); SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_LARGEICON, MAKELONG((ID_VIEW_LARGEICON == What) ? TRUE : FALSE, 0)); SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_SMALLICON, MAKELONG((ID_VIEW_SMALLICON == What) ? TRUE : FALSE, 0)); SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_DETAILS, MAKELONG((ID_VIEW_DETAILS == What) ? TRUE : FALSE, 0));}VOIDSetMenu(){ HMENU hMenu; DWORD cb; LV_ITEM lvi; MENUITEMINFO MenuItemInfo; TCHAR szTemp[128]; cb = ListView_GetSelectedCount (v_hListWnd); lvi.iItem = ListView_GetNextItem(v_hListWnd, -1, LVNI_SELECTED); hMenu = CallCommCtrlFunc(CommandBar_GetMenu)(v_hCmdBar, 0); // Set the File->Connect/Create menu to connect MenuItemInfo.cbSize = sizeof(MENUITEMINFO); MenuItemInfo.fMask = MIIM_TYPE; MenuItemInfo.dwTypeData = szTemp; MenuItemInfo.cch = sizeof(szTemp)/sizeof(TCHAR); GetMenuItemInfo(hMenu, ID_FILE_CONNECTCREATE, FALSE, &MenuItemInfo); MenuItemInfo.fMask = MIIM_TYPE; MenuItemInfo.cch = LoadString(v_hInst, IDS_CONNECT, MenuItemInfo.dwTypeData, sizeof(szTemp)/sizeof(TCHAR)); SetMenuItemInfo(hMenu, ID_FILE_CONNECTCREATE, FALSE, &MenuItemInfo); EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE, MF_GRAYED); EnableMenuItem (hMenu, ID_FILE_CREATESHORTCUT, MF_GRAYED); EnableMenuItem (hMenu, ID_FILE_DELETE, MF_GRAYED); EnableMenuItem (hMenu, ID_FILE_RENAME, MF_GRAYED); EnableMenuItem (hMenu, ID_FILE_PROPERTIES, MF_GRAYED); EnableMenuItem (hMenu, ID_EDIT_CREATECOPY, MF_GRAYED); // Portrait mode menu EnableMenuItem (hMenu, ID_CONN_CONN, MF_GRAYED); EnableMenuItem (hMenu, ID_CONN_EDIT, MF_GRAYED); EnableMenuItem (hMenu, ID_CONN_DELETE, MF_GRAYED); EnableMenuItem (hMenu, ID_CONN_RENAME, MF_GRAYED); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_EDIT, MAKELONG(FALSE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_CONN, MAKELONG(FALSE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_DELETE, MAKELONG(FALSE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_DELETE, MAKELONG(FALSE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_PROPERTIES, MAKELONG(FALSE, 0)); if (cb == 1) { if (lvi.iItem == 0) { // Make new connection // Set File->Connect/Create menu to create and enable MenuItemInfo.fMask = MIIM_TYPE; MenuItemInfo.cch = LoadString(v_hInst, IDS_CREATE, MenuItemInfo.dwTypeData, sizeof(szTemp)/sizeof(TCHAR)); SetMenuItemInfo(hMenu, ID_FILE_CONNECTCREATE, FALSE, &MenuItemInfo); EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE, MF_ENABLED); } else { EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE, MF_ENABLED); EnableMenuItem (hMenu, ID_FILE_CREATESHORTCUT, MF_ENABLED); EnableMenuItem (hMenu, ID_FILE_DELETE, MF_ENABLED); EnableMenuItem (hMenu, ID_FILE_RENAME, MF_ENABLED); EnableMenuItem (hMenu, ID_FILE_PROPERTIES, MF_ENABLED); EnableMenuItem (hMenu, ID_EDIT_CREATECOPY, MF_ENABLED); EnableMenuItem (hMenu, ID_CONN_CONN, MF_ENABLED); EnableMenuItem (hMenu, ID_CONN_EDIT, MF_ENABLED); EnableMenuItem (hMenu, ID_CONN_DELETE, MF_ENABLED); EnableMenuItem (hMenu, ID_CONN_RENAME, MF_ENABLED); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_EDIT, MAKELONG(TRUE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_CONN, MAKELONG(TRUE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_DELETE, MAKELONG(TRUE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_DELETE, MAKELONG(TRUE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_PROPERTIES, MAKELONG(TRUE, 0)); } } else { if (cb != 0) { // allow shortcuts for multiple items if (lvi.iItem > 0) { EnableMenuItem (hMenu, ID_EDIT_CREATECOPY, MF_ENABLED); } EnableMenuItem (hMenu, ID_FILE_CONNECTCREATE, MF_ENABLED); EnableMenuItem (hMenu, ID_FILE_CREATESHORTCUT, MF_ENABLED); EnableMenuItem (hMenu, ID_FILE_DELETE, MF_ENABLED); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_CONN, MAKELONG(TRUE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_CONN_DELETE, MAKELONG(TRUE, 0)); SendMessage (v_hCmdBar, TB_ENABLEBUTTON, ID_FILE_DELETE, MAKELONG(TRUE, 0)); EnableMenuItem (hMenu, ID_CONN_DELETE, MF_ENABLED); } }}// ----------------------------------------------------------------//// NotifyHandler ()//// Handle Notification events for the ListView//// ----------------------------------------------------------------LRESULTNotifyHandler (HWND hWnd, NM_LISTVIEW *pnm, LV_DISPINFO *plvdi){ LV_ITEM lvi; PITEMINFO pItemInfo; HWND hwndEdit; DWORD dwTemp; int nFormatId; TCHAR szTemp[128]; TCHAR szFmtStr[128]; DEBUGMSG (ZONE_MISC, (TEXT("Got WM_NOTIFY hdr.code=%d\r\n"), pnm->hdr.code)); switch (pnm->hdr.code) { case LVN_DELETEALLITEMS : DEBUGMSG (ZONE_MISC, (TEXT("Got LVN_DELETEALLITEMS\r\n"))); return FALSE; case LVN_DELETEITEM : if (0 != pnm->iItem) { DEBUGMSG (ZONE_MISC, (TEXT("Got LVN_DELETEITEM %d\r\n"), pnm->iItem)); LocalFree ((HLOCAL)pnm->lParam); } break; case LVN_GETDISPINFO : DEBUGMSG (ZONE_MISC, (TEXT("LVN_GETDISPINFO\r\n"))); if (!(plvdi->item.mask & LVIF_TEXT)) { DEBUGMSG (ZONE_MISC, (TEXT("LVN_GETDISPINFO: Not Text? Mask=0x%X\r\n"), plvdi->item.mask)); break; } SetMenu(); if (0 == plvdi->item.iItem) { if (0 == plvdi->item.iSubItem) { LoadString(v_hInst, IDS_MAKE_NEW, plvdi->item.pszText, plvdi->item.cchTextMax); } break; } pItemInfo = (PITEMINFO)plvdi->item.lParam; switch (plvdi->item.iSubItem) { case 0 : _tcsncpy (plvdi->item.pszText, pItemInfo->EntryName, plvdi->item.cchTextMax); break; case 1 : _tcsncpy (plvdi->item.pszText, pItemInfo->szPhone, plvdi->item.cchTextMax); break; case 2 : _tcsncpy (plvdi->item.pszText, ((PITEMINFO)plvdi->item.lParam)->Entry.szDeviceName, plvdi->item.cchTextMax); break; } DEBUGMSG (ZONE_MISC, (TEXT("LVN_GETDISPINFO: Returning string '%s'\r\n"),
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?