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

📄 pnhosts.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 3 页
字号:
		EnableMenuItem (hMenuTrackPopup, IDC_ADD, 
								MF_BYCOMMAND|MF_ENABLED);
	}

	TrackPopupMenu (hMenuTrackPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
					iX, iY, 0, hwnd, NULL);

	DestroyMenu (hMC);
}


//	_____________________________________________________
//
//  traverse treelist and save contents to host list

static VOID
sTreeListToHostList (
		HWND		hwndTree,
		PPNCONFIG	ppnconfig)
{
	TL_TREEITEM			tlI;
	HTLITEM				hTHost;
	HTLITEM				hTChild;
	INT					iHost, iParent, iHostCount;
	PGPNetHostEntry*	pNewHostList;

	// count number of hosts in list
	iHostCount = 0;
	hTHost = TreeList_GetFirstItem (hwndTree);
	while (hTHost) 
	{
		++iHostCount;

		tlI.hItem = hTHost;
		tlI.mask = TLIF_CHILDHANDLE;
		TreeList_GetItem (hwndTree, &tlI);
		hTChild = tlI.hItem;
		while (hTChild)
		{
			++iHostCount;
			tlI.hItem = hTChild;
			tlI.mask = TLIF_NEXTHANDLE;
			TreeList_GetItem (hwndTree, &tlI);
			hTChild = tlI.hItem;
		}

		tlI.hItem = hTHost;
		tlI.mask = TLIF_NEXTHANDLE;
		TreeList_GetItem (hwndTree, &tlI);
		hTHost = tlI.hItem;
	}

	pNewHostList = PGPNewData (PGPGetContextMemoryMgr (g_context),
				iHostCount * sizeof(PGPNetHostEntry),
				kPGPMemoryMgrFlags_Clear);

	if (pNewHostList) 
	{
		iHost = -1;
		hTHost = TreeList_GetFirstItem (hwndTree);
		while (hTHost) 
		{
			++iHost;

			// get host index
			tlI.hItem = hTHost;
			tlI.mask = TLIF_PARAM | TLIF_CHILDHANDLE;
			TreeList_GetItem (hwndTree, &tlI);
			hTChild = tlI.hItem;

			pgpCopyMemory (&ppnconfig->pHostList[tlI.lParam], 
					&pNewHostList[iHost], 
					sizeof(PGPNetHostEntry));
			pNewHostList[iHost].childOf = -1;

			tlI.hItem = hTHost;
			tlI.mask = TLIF_PARAM;
			tlI.lParam = iHost;
			TreeList_SetItem (hwndTree, &tlI);

			iParent = iHost;
			while (hTChild)
			{
				++iHost;
				tlI.hItem = hTChild;
				tlI.mask = TLIF_PARAM;
				TreeList_GetItem (hwndTree, &tlI);

				pgpCopyMemory (&ppnconfig->pHostList[tlI.lParam], 
						&pNewHostList[iHost], 
						sizeof(PGPNetHostEntry));
				pNewHostList[iHost].childOf = iParent;

				tlI.lParam = iHost;
				TreeList_SetItem (hwndTree, &tlI);

				tlI.mask = TLIF_NEXTHANDLE;
				TreeList_GetItem (hwndTree, &tlI);
				hTChild = tlI.hItem;
			}

			// step to next host
			tlI.hItem = hTHost;
			tlI.mask = TLIF_NEXTHANDLE;
			TreeList_GetItem (hwndTree, &tlI);
			hTHost = tlI.hItem;
		}

		PGPFreeData (ppnconfig->pHostList);
		ppnconfig->pHostList = pNewHostList;
		ppnconfig->uHostCount = iHostCount;
	}
}


//	____________________________________
//
//	dialog proc of hosts dialog

BOOL CALLBACK
PNHostDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam)
{
	PAPPOPTIONSSTRUCT	paos;

	switch (uMsg)
	{
	case WM_INITDIALOG :
	{
		RECT	rc;

		g_hTLSelected = NULL;

		SetWindowLong (hwnd, GWL_USERDATA, lParam);
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		// setup control size values
		GetWindowRect (GetDlgItem (hwnd, IDC_EDIT), &rc);
		g_uButtonWidth = rc.right - rc.left;
		g_uButtonHeight = rc.bottom - rc.top;
		g_uBottomListOffset	= 2 * (rc.bottom - rc.top);

		GetWindowRect (GetDlgItem (hwnd, IDC_ONOFFBOX), &rc);
		g_uOnOffBoxWidth = rc.right - rc.left;
		g_uOnOffBoxHeight = rc.bottom - rc.top;

		GetWindowRect (GetDlgItem (hwnd, IDC_HOSTTREE), &rc);
		MapWindowPoints (NULL, hwnd, (LPPOINT)&rc, 2);
		g_iMinWindowWidth = max (g_iMinWindowWidth,
					(rc.right-rc.left) + (6*HOR_TAB_OFFSET));

		// create host tree list
		paos->hwndHostTreeList = CreateWindowEx (
			WS_EX_CLIENTEDGE, WC_TREELIST, "",
			WS_VISIBLE|WS_CHILD|WS_BORDER|WS_TABSTOP|WS_GROUP|
			TLS_HASBUTTONS|TLS_HASLINES|TLS_AUTOSCROLL|
			TLS_SINGLESELECT|TLS_SHOWSELECTIONALWAYS,
			rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
			hwnd, (HMENU)IDC_PN_HOSTTREELIST, g_hinst, NULL);

		sInitHostTreeList (paos->hwndHostTreeList);
		sLoadHostTreeList (hwnd, paos, 0);
		sUpdateHostTreeList (hwnd, paos);

		// init on/off buttons
		if (g_AOS.pnconfig.bPGPnetEnabled)
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETON);
		else
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETOFF);

		// disable "On/Off" and "Add" buttons if we don't have privileges
		if (g_bReadOnly)
		{
			EnableWindow (GetDlgItem (hwnd, IDC_PGPNETON), FALSE);
			EnableWindow (GetDlgItem (hwnd, IDC_PGPNETOFF), FALSE);
			EnableWindow (GetDlgItem (hwnd, IDC_ADD), FALSE);
		}

		return FALSE;
	}

	case WM_SIZE :
		sSizeControls (hwnd, LOWORD(lParam), HIWORD(lParam));
		return 0;

	case WM_DESTROY :
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		SendMessage (paos->hwndHostTreeList, WM_CLOSE, 0, 0);
		ImageList_Destroy (g_hil);
		break;

	case PGPNET_M_APPMESSAGE :
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		switch (wParam) {
		case PGPNET_PROMISCUOUSHOSTADDED :
		{
			UINT	uPrevHostCount	= paos->pnconfig.uHostCount;

			PGPnetReloadConfiguration (g_context, &paos->pnconfig);

			sLoadHostTreeList (hwnd, paos, uPrevHostCount);
			sUpdateHostTreeList (hwnd, paos);
			InvalidateRect (hwnd, NULL, FALSE);
			paos->bUpdateHostList = FALSE;
			break;
		}
		}
		break;

	case PGPNET_M_UPDATELIST :
		// update treelist
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		if (paos->bUpdateHostList)
		{
			sUpdateHostTreeList (hwnd, paos);
			InvalidateRect (hwnd, NULL, FALSE);
			paos->bUpdateHostList = FALSE;
		}
		break;

	case PGPNET_M_ACTIVATEPAGE :
		// update treelist
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		if (paos->bUpdateHostList)
		{
			sUpdateHostTreeList (hwnd, paos);
			InvalidateRect (hwnd, NULL, FALSE);
			paos->bUpdateHostList = FALSE;
		}

		// nothing is selected
		g_hTLSelected = NULL;
		EnableWindow (GetDlgItem (hwnd, IDC_EDIT), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_REMOVE), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_CONNECT), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_DISCONNECT), FALSE);

		// init on/off buttons
		if (g_AOS.pnconfig.bPGPnetEnabled)
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETON);
		else
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETOFF);
		break;

	case PGPNET_M_SETFOCUS :
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		SetFocus (paos->hwndHostTreeList);
		break;

	case WM_NOTIFY :
		if (wParam == IDC_PN_HOSTTREELIST)
		{
			LPNM_TREELIST pnmtl = (LPNM_TREELIST)lParam;
			paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

			switch (pnmtl->hdr.code) {
			case TLN_SELCHANGED :
				g_hTLSelected = pnmtl->itemNew.hItem;
				if (pnmtl->itemNew.hItem)
				{
					EnableWindow (
						GetDlgItem (hwnd, IDC_EDIT), !g_bReadOnly);
					EnableWindow (
						GetDlgItem (hwnd, IDC_REMOVE), !g_bReadOnly);
				}
				else
				{
					EnableWindow (GetDlgItem (hwnd, IDC_EDIT), FALSE);
					EnableWindow (GetDlgItem (hwnd, IDC_REMOVE), FALSE);
				}

				if (sIsHostEntryDisconnectable (hwnd, paos))
				{
					ShowWindow (GetDlgItem (hwnd, IDC_CONNECT), SW_HIDE);
					ShowWindow (GetDlgItem (hwnd, IDC_DISCONNECT), SW_SHOW);
					EnableWindow (GetDlgItem (hwnd, IDC_DISCONNECT), TRUE);
				}
				else
				{
					ShowWindow (GetDlgItem (hwnd, IDC_DISCONNECT), SW_HIDE);
					ShowWindow (GetDlgItem (hwnd, IDC_CONNECT), SW_SHOW);
					EnableWindow (GetDlgItem (hwnd, IDC_CONNECT), 
							sIsHostEntryConnectable (hwnd, paos));
				}
				break;

			case TLN_ITEMDBLCLICKED :
				if (!g_bReadOnly)
					SendMessage (hwnd, WM_COMMAND, IDC_EDIT, 0);
				break;

			case TLN_CONTEXTMENU :
				sHostContextMenu (hwnd, paos,
					((LPNM_TREELIST)lParam)->ptDrag.x,
					((LPNM_TREELIST)lParam)->ptDrag.y);
				break;

			case TLN_KEYDOWN :
				switch (((TL_KEYDOWN*)lParam)->wVKey) {
				case VK_DELETE :
					if (IsWindowEnabled (GetDlgItem (hwnd, IDC_REMOVE)))
						PostMessage (hwnd, WM_COMMAND, IDC_REMOVE, 0);
					break;
				}
				break;
			}
		}
		break;

	case WM_HELP: 
		WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
			HELP_WM_HELP, (DWORD) (LPSTR) aHostsIds); 
		return TRUE; 

	case WM_CONTEXTMENU :
		if ((HWND)wParam == GetDlgItem (hwnd, IDC_HOSTTREE))
		{
			paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
			sHostContextMenu (hwnd, paos, LOWORD(lParam), HIWORD(lParam));
		}
		else
			WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
					(DWORD) (LPVOID) aHostsIds); 
		break;

	case WM_COMMAND :
		paos = (PAPPOPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		switch (LOWORD (wParam)) {
		case IDC_EDIT :
			if (g_hTLSelected)
			{
				INT			iIndex;
				TL_TREEITEM	tlI;
				BOOL		bHasChildren;

				tlI.hItem = g_hTLSelected;
				tlI.mask = TLIF_PARAM | TLIF_CHILDHANDLE;
				TreeList_GetItem (paos->hwndHostTreeList, &tlI);

				iIndex = tlI.lParam;
				bHasChildren = (tlI.hItem != NULL);

				if (PNEditHostEntry (hwnd, 
							&paos->pnconfig, iIndex, bHasChildren))
				{
					InvalidateRect (hwnd, NULL, FALSE);

					sUpdateEditedHostItem (paos, 
							&paos->pnconfig.pHostList[iIndex], g_hTLSelected);
					sUpdateSingleHostItem (paos, 
							&paos->pnconfig.pHostList[iIndex], g_hTLSelected);
					sAddHostInfoToItem (paos,
							&paos->pnconfig.pHostList[iIndex], g_hTLSelected);
					sTreeListToHostList (
							paos->hwndHostTreeList, &paos->pnconfig);

					PNSaveConfiguration (hwnd, &paos->pnconfig, FALSE);
				}

				SetFocus (paos->hwndHostTreeList);
			}
			break;

		case IDC_REMOVE :
			if (g_hTLSelected)
			{
				if (sRemoveHostEntry (hwnd, paos))
				{
					InvalidateRect (hwnd, NULL, FALSE);

					sTreeListToHostList (
							paos->hwndHostTreeList, &paos->pnconfig);

					PNSaveConfiguration (hwnd, &paos->pnconfig, FALSE);
					SetFocus (GetDlgItem (hwnd, IDC_REMOVE));
				}
				else
					SetFocus (paos->hwndHostTreeList);
			}
			break;

		case IDC_ADD :
		{
			UINT uPrevHostCount = paos->pnconfig.uHostCount;
			if (sAddHostEntry (hwnd, paos))
			{
				sLoadHostTreeList (hwnd, paos, uPrevHostCount);
				sUpdateHostTreeList (hwnd, paos);
				InvalidateRect (hwnd, NULL, FALSE);
				g_hwndForeground = GetParent (hwnd);
				PNSaveConfiguration (hwnd, &paos->pnconfig, FALSE);
			}
			SetFocus (paos->hwndHostTreeList);
			break;
		}

		case IDC_CONNECT :
			if (g_hTLSelected)
				sConnectToHostEntry (hwnd, paos);
			break;

		case IDC_DISCONNECT :
			if (g_hTLSelected)
			{
				TL_TREEITEM	tlI;

				tlI.hItem = g_hTLSelected;
				tlI.mask = TLIF_PARAM;
				TreeList_GetItem (paos->hwndHostTreeList, &tlI);

				if (PNRemoveHostSAs (
						paos->pnconfig.pHostList[tlI.lParam].ipAddress, 
						paos->pnconfig.pHostList[tlI.lParam].ipMask))
				{
					sUpdateHostTreeList (hwnd, paos);
				}
			}
			break;

		case IDC_PGPNETOFF :
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETOFF);
			PNSaveOnOffButtons (hwnd, g_context);
			SetFocus (GetDlgItem (hwnd, IDC_PGPNETOFF));
			break;

		case IDC_PGPNETON :
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETON);
			PNSaveOnOffButtons (hwnd, g_context);
			SetFocus (GetDlgItem (hwnd, IDC_PGPNETON));
			break;

		case IDM_HOSTHELP :
			WinHelp (paos->hwndHostTreeList, g_szHelpFile, 
					HELP_WM_HELP, (DWORD) (LPVOID) aHostsIds); 
			break;
		}
		return 0;
	} 

	return FALSE;
}


⌨️ 快捷键说明

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