⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remnet.c

📁 可用于嵌入式编程学习
💻 C
📖 第 1 页 / 共 4 页
字号:
	return TRUE;
}

// InitListViewItems - adds items and subitems to a list view.
// Returns TRUE if successful or FALSE otherwise.
// hwndLV - handle of the list view control
// pfData - text file containing list view items with columns
//          separated by semicolons
BOOL WINAPI
InitListViewItems(HWND hwndLV)
{
	int			iItem;			// Item we're working on
	LV_ITEM		lvi;			// Current Item structure
	DWORD		cb;				// Number of bytes in RasEntryName list.
	LPRASENTRYNAME lpRasEntries;	// Pointer to the RasEntries.
	DWORD		cEntries;		// Number of Entries found
	DWORD		Index;			
	PITEMINFO	pItemInfo;

	ListView_DeleteAllItems (hwndLV);
	
	// Initialize LV_ITEM members that are common to all items.
	lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
	lvi.state = LVIS_SELECTED | LVIS_FOCUSED;
	lvi.stateMask = 0;
	lvi.pszText = LPSTR_TEXTCALLBACK;   // app. maintains text
	lvi.iImage = 0;                     // image list index

	lvi.iItem = 0;
	lvi.iSubItem = 0;
	lvi.lParam = (LPARAM) 0;    // item data
	
	// Add the item.
	ListView_InsertItem(hwndLV, &lvi);
		
	lvi.state = 0;		// The rest of the items are not selected.

	// Now get the current RasEntryNames
	RasEnumEntries (NULL, NULL, NULL, &cb, NULL);

	if (cb) {
		// Now we have to do something with the list.
		lpRasEntries = (LPRASENTRYNAME)LocalAlloc (LPTR, cb);
		if (!RasEnumEntries (NULL, NULL, lpRasEntries, &cb, &cEntries)) {
			// Walk the list
			iItem = 1;
			for ( Index = 0; Index < cEntries; Index++) {
				if (lpRasEntries[Index].szEntryName[0] == TEXT('`')) {
					DEBUGMSG (1, (TEXT("Skipping entry \"%s\"\r\n"),
								   lpRasEntries[Index].szEntryName));
					continue;
				}

				pItemInfo = (PITEMINFO)LocalAlloc (LPTR, sizeof(ITEMINFO));
				memset ((char *)pItemInfo, 0, sizeof(ITEMINFO));

				_tcscpy (pItemInfo->EntryName,
						 lpRasEntries[Index].szEntryName);

				// Get the Entry properties.
				cb = sizeof(pItemInfo->Entry);
				pItemInfo->Entry.dwSize = sizeof(RASENTRY);
				if (RasGetEntryProperties (NULL, pItemInfo->EntryName,
										   &(pItemInfo->Entry),
										   &cb,
										   NULL, NULL)) {
										LocalFree (pItemInfo);
					continue;
				}

				// This should use lineTranslateAddress to get a pretty version
				// But should handle VPN and Direct entries nicely.
				_tcsncpy (pItemInfo->szPhone, 
						  pItemInfo->Entry.szLocalPhoneNumber,
						  sizeof(pItemInfo->szPhone)/sizeof(TCHAR));
				
				// Initialize item-specific LV_ITEM members.
				lvi.iItem = iItem++;
				lvi.iSubItem = 0;
				lvi.lParam = (LPARAM) pItemInfo;    // save item data
				lvi.iImage = _tcscmp (pItemInfo->Entry.szDeviceType,
									  RASDT_Direct) ? 1 : 2;
		
				// Add the item.
				ListView_InsertItem(hwndLV, &lvi);
				lvi.state = 0;		// The rest of the items are not selected.
			}
		}
		// Free the RasEntry info
		LocalFree ((HLOCAL)lpRasEntries);
	}

	return TRUE;
}


												

BOOL
InitInstance(HINSTANCE hInstance, int nCmdShow)
{
	RECT		rc;
    HICON       hIcon;
	HMENU	hMenu = NULL;
	int			rv, nWidth, nHeight, x, y;

    v_hInst = hInstance;

    // OK, create the window, taking the position of the SIP into account
	nWidth = CW_USEDEFAULT;
	nHeight = CW_USEDEFAULT;
	x = y = CW_USEDEFAULT;
#ifdef USE_SIP
    if (g_pSipGetInfo)
    {
        SIPINFO si;

        memset(&si, 0, sizeof(SIPINFO));
    	si.cbSize = sizeof(si);
    	if((*g_pSipGetInfo)(&si) )
    	{
    	    nWidth = si.rcVisibleDesktop.right - si.rcVisibleDesktop.left;
            nHeight = si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top;
            x = si.rcVisibleDesktop.left;
            y = si.rcVisibleDesktop.top;
     	}
    }
#endif

    v_hMainWnd = CreateWindowEx(0, szAppName, szTitle,
								WS_CLIPCHILDREN, x, y,
								nWidth, nHeight,
								NULL, hMenu, hInstance, NULL);
	
    if ( v_hMainWnd == 0 ) {
        return (FALSE);
    }
    // Set remnets icon for the task bar
    hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_REMOTENW),
							 IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
	SendMessage(v_hMainWnd, WM_SETICON, FALSE, (WPARAM)hIcon);    

	DEBUGMSG (ZONE_MISC, (TEXT("After CreateWindowEx\r\n")));
	GetClientRect (v_hMainWnd, &rc);

	v_hCmdBar = CallCommCtrlFunc(CommandBar_Create) (hInstance, v_hMainWnd, 1);
	if (v_fPortrait) {
		CallCommCtrlFunc(CommandBar_InsertMenubar)(v_hCmdBar, hInstance,
			IDR_PORTRAIT_MENU, 0);
	} else {
		CallCommCtrlFunc(CommandBar_InsertMenubar)(v_hCmdBar, hInstance,
			IDR_MAIN_MENU, 0);
	}

	// NOTE: Add the command buttons
	CallCommCtrlFunc(CommandBar_AddBitmap)(v_hCmdBar, HINST_COMMCTRL,
										   IDB_VIEW_SMALL_COLOR,
										   12, 16, 16);
	CallCommCtrlFunc(CommandBar_AddBitmap)(v_hCmdBar, HINST_COMMCTRL,
										   IDB_STD_SMALL_COLOR,
										   15, 16, 16);
	if (!v_fPortrait) {
    
		CommandBar_AddButtons(v_hCmdBar, sizeof(tbButton)/sizeof(TBBUTTON),
							  tbButton);

		LoadString(v_hInst, IDS_TLTP_NON, nonStr, sizeof(nonStr));
		LoadString(v_hInst, IDS_TLTP_DELETE, deleteStr,
				   sizeof(deleteStr));
		LoadString(v_hInst, IDS_TLTP_PRPTY, propertiesStr,
				   sizeof(propertiesStr));
		LoadString(v_hInst, IDS_TLTP_LARGE, largeIconStr,
				   sizeof(largeIconStr));
		LoadString(v_hInst, IDS_TLTP_SMOLL, smallIconStr,
				   sizeof(smallIconStr));
		LoadString(v_hInst, IDS_TLTP_DETAILS, detailsStr,
				   sizeof(detailsStr));

		CommandBar_AddToolTips(v_hCmdBar, 6, (LPARAM)ToolTipsTbl);

		CallCommCtrlFunc(CommandBar_AddAdornments)(v_hCmdBar, STD_HELP,
			ID_FILE_EXIT);
		SendMessage (v_hCmdBar, TB_CHECKBUTTON, ID_VIEW_LARGEICON,
					 MAKELONG(TRUE, 0));

		// Set the default view checkbox
		hMenu = CallCommCtrlFunc(CommandBar_GetMenu)(v_hCmdBar, 0);
		CheckMenuRadioItem(hMenu, ID_VIEW_LARGEICON,
						   ID_VIEW_DETAILS,
						   ID_VIEW_LARGEICON,
						   MF_BYCOMMAND);
	
	} else {
		rv = CallCommCtrlFunc(CommandBar_AddBitmap)(v_hCmdBar, v_hInst,
			IDB_TOOLBAR, 2, 16, 16);
		
		tbButtonPortrait[1].iBitmap = rv+1;
//		tbButtonPortrait[3].iBitmap = rv;

		 
		CommandBar_AddButtons(v_hCmdBar,
							  sizeof(tbButtonPortrait)/sizeof(TBBUTTON),
							  tbButtonPortrait);
	
		LoadString(v_hInst, IDS_TLTP_NON, nonStr, sizeof(nonStr));
		LoadString(v_hInst, IDS_TLTP_CONNECT, largeIconStr,
				   sizeof(largeIconStr));
		LoadString(v_hInst, IDS_TLTP_EDIT, smallIconStr,
				   sizeof(smallIconStr));
		LoadString(v_hInst, IDS_TLTP_DELETEP, propertiesStr,
				   sizeof(propertiesStr));


		CommandBar_AddToolTips(v_hCmdBar, 4, (LPARAM)ToolTipsTblPortrait);

		CallCommCtrlFunc(CommandBar_AddAdornments)(v_hCmdBar, STD_HELP, ID_CONN_EXIT);
	}
	
	rc.top += CallCommCtrlFunc(CommandBar_Height)(v_hCmdBar);

	
	v_hListWnd = CreateWindow (WC_LISTVIEW, TEXT(""),
                               WS_VISIBLE|WS_CHILD|WS_VSCROLL|
                               LVS_SHOWSELALWAYS|LVS_AUTOARRANGE|
                               0x0040|LVS_EDITLABELS|
							   LVS_ICON,
                               rc.left, rc.top,  rc.right - rc.left,
                               rc.bottom - rc.top, v_hMainWnd,
                               (HMENU)IDD_LISTVIEW,
                               v_hInst, NULL);

    if ( v_hListWnd == 0 ) {
        return (FALSE);
    }


    if (!InitListViewImageLists(v_hListWnd) ||
		!InitListViewColumns(v_hListWnd) ||
		!InitListViewItems(v_hListWnd)) {
		DestroyWindow(v_hListWnd);
		return FALSE;
	}

    ShowWindow(v_hMainWnd, SW_SHOW);
    UpdateWindow(v_hMainWnd);

	// Focus in on the list view.
	SetFocus (v_hListWnd);
    return TRUE;
}

void LoadSIP(void)
{
#ifdef USE_SIP
    if( (g_hSipLib = LoadLibrary( TEXT("coredll.dll") )) &&
        (g_pSipStatus = (LPFNSIPSTATUS)GetProcAddress( g_hSipLib, TEXT("SipStatus"))) &&
	    (g_pSipGetInfo = (LPFNSIP)GetProcAddress( g_hSipLib, TEXT("SipGetInfo"))) &&
	    (g_pSipSetInfo = (LPFNSIP)GetProcAddress( g_hSipLib, TEXT("SipSetInfo"))) &&
	    (SIP_STATUS_AVAILABLE == g_pSipStatus()) )
	{
		DEBUGMSG(1, (L"REMNET: Using SIP!\r\n"));
	}
	else
	{
        g_pSipStatus = NULL; g_pSipGetInfo = NULL; g_pSipSetInfo = NULL;
    	if(g_hSipLib) FreeLibrary(g_hSipLib);
    }
#endif
}

int WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hInstPrev, LPWSTR pszCmdLine,
        int nCmdShow)
{
    MSG		msg;
	HWND	hPrevWind;
	HANDLE	hAccelTable;

	DEBUGREGISTER(0);

	if (GetSystemMetrics(SM_CXSCREEN) < 480) {
		v_fPortrait = TRUE;
	}

	// Check if SIP is present
	LoadSIP();

#ifdef DEBUG
	// Scan command line
	{
		while (*pszCmdLine) {
			// Skip leading blanks
			while (' ' == *pszCmdLine) {
				pszCmdLine++;
			}
			if ('\0' == *pszCmdLine) {
				break;
			}
			if ((TEXT('-') == *pszCmdLine) || (TEXT('/') == *pszCmdLine)) {
				pszCmdLine++;

				while ((TEXT(' ') != *pszCmdLine) && (TEXT('\0') != *pszCmdLine)) {
					switch (*pszCmdLine) {
					case 'p' :
					case 'P' :
						v_fPortrait = TRUE;
						break;
					case 'l' :
					case 'L' :
						v_fPortrait = FALSE;
						break;
					case 'd' :
					case 'D' :
						// Get debug flag
						dpCurSettings.ulZoneMask = 0;
						pszCmdLine++;
						while ((TEXT('0') <= *pszCmdLine) && (TEXT('9') >= *pszCmdLine)) {
							dpCurSettings.ulZoneMask *= 10;
							dpCurSettings.ulZoneMask += *pszCmdLine - TEXT('0');
							pszCmdLine++;
						}
						pszCmdLine--;
						DEBUGMSG (1, (TEXT("New ulZoneMask=%d\r\n"),
									  dpCurSettings.ulZoneMask));
						break;
					default :
						DEBUGMSG (1, (TEXT("Unknown switch '%s'\r\n"), pszCmdLine));
						break;
					}
					pszCmdLine++;
				}
			} else {
				DEBUGMSG (1, (TEXT("Bad commandline parm '%s'\r\n"), pszCmdLine));
				break;
			}
		}
	}
#endif
	

	LoadString(hInstance, (v_fPortrait) ? IDS_CONNECTIONS : IDS_TITLE,
			   szTitle, sizeof(szTitle) / sizeof(TCHAR));

	if (hPrevWind = FindWindow (szAppName, szTitle)) {
        SetForegroundWindow((HWND) ((ULONG) hPrevWind | 0x00000001));
		return FALSE;
	}
	
	if (!InitCommCtrlTable()) {
		DEBUGMSG (ZONE_ERROR, (TEXT("Unable to load commctrl.dll\r\n")));
		return FALSE;
	}

	CallCommCtrlFunc(InitCommonControls)();

	{ INITCOMMONCONTROLSEX icce;
	icce.dwSize = sizeof(INITCOMMONCONTROLSEX);
	icce.dwICC  = ICC_TOOLTIP_CLASSES|ICC_CAPEDIT_CLASS;
	CallCommCtrlFunc(InitCommonControlsEx)(&icce); }

	if ( hInstPrev != 0 ) {
        return FALSE;
    }

    DEBUGMSG (ZONE_MISC, (TEXT("About to InitApplication\r\n")));
    if ( InitApplication(hInstance) == FALSE ) {
        return(FALSE);
    }

	DEBUGMSG (ZONE_MISC, (TEXT("About to InitInstance\r\n")));
    if ( InitInstance(hInstance, nCmdShow) == FALSE ) {
		// Unregister IP class window
		UnregisterIPClass(hInstance);
        return(FALSE);
    }
	
	if (v_fPortrait) {
		// Update dialogs ID table with small version.
		v_DialogPages[DLG_PG_1] = IDD_RAS_WIZ_1P;
		v_DialogPages[DLG_PG_2] = IDD_RAS_WIZ_2P;
		v_DialogPages[DLG_PG_3] = IDD_RAS_WIZ_3P;
		v_DialogPages[DLG_PG_4] = IDD_RAS_WIZ_4P;
		v_DialogPages[DLG_PG_5] = IDD_RAS_WIZ_5P;
		v_DialogPages[DLG_TCP_GEN] = IDD_RAS_TCPIP_GENP;
		v_DialogPages[DLG_TCP_NS] = IDD_RAS_TCPIP_NAME_SERVP;
	}
	

	hAccelTable = LoadAccelerators (hInstance,TEXT("REMNET_ACCEL"));

	SetMenu();

	DEBUGMSG (ZONE_MISC, (TEXT("About to enter GetMessage Loop\r\n")));
    while ( GetMessage(&msg, NULL, 0, 0) != FALSE ) {
		if (v_hDialogWnd && IsDialogMessage (v_hDialogWnd, &msg)) {
			continue;
		}
		if (v_fInRename ||
			!TranslateAccelerator (v_hMainWnd, hAccelTable, &msg)) {
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
    }

    // Unregister IP class window
    UnregisterIPClass(hInstance);
	
	DEBUGMSG (ZONE_MISC, (TEXT("Exiting WinMain\r\n")));
    return(msg.wParam);
}



⌨️ 快捷键说明

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