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

📄 pnadvanced.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 4 页
字号:
		if (lvi.state == LVIS_SELECTED)
			iSelectedItem = g_iSelectedIpsecItem;
	}

	if (iNumItems < MAXPROPOSALS) 
	{
		EnableMenuItem (hMenuTrackPopup, IDC_NEWPROPOSAL, 
								MF_BYCOMMAND|MF_ENABLED);
		SetMenuItemInfo (hMenuTrackPopup, IDC_NEWPROPOSAL, FALSE, &mii);
	}

	if (iSelectedItem >= 0)
	{
		EnableMenuItem (hMenuTrackPopup, IDC_EDITPROPOSAL, 
									MF_BYCOMMAND|MF_ENABLED);

		if (iNumItems > 1)
			EnableMenuItem (hMenuTrackPopup, IDC_REMOVEPROPOSAL, 
									MF_BYCOMMAND|MF_ENABLED);

		if (iSelectedItem > 0)
			EnableMenuItem (hMenuTrackPopup, IDC_PROPOSALUP, 
									MF_BYCOMMAND|MF_ENABLED);

		if (iSelectedItem < iNumItems-1)
			EnableMenuItem (hMenuTrackPopup, IDC_PROPOSALDOWN, 
									MF_BYCOMMAND|MF_ENABLED);
	}

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

	DestroyMenu (hMC);
}


//	_____________________________________________________
//
//  draw listview item 

static VOID
sDrawItem (
		LPDRAWITEMSTRUCT	pdis)
{
	RECT			rc;
	RECT			rcAll;
	RECT			rcLabel;
	RECT			rcDraw;

	BOOL			bFocus = (GetFocus() == pdis->hwndItem);
	BOOL			bSelected;

	COLORREF		clrTextSave, clrBkSave;

	static CHAR		sz[128];

	LV_COLUMN		lvc;
	LV_ITEM			lvi;
	UINT			nJustify = DT_LEFT;
	INT				iCol;

	// get item data
	lvi.mask		= LVIF_TEXT | LVIF_STATE;
	lvi.iItem		= pdis->itemID;
	lvi.iSubItem	= 0;
	lvi.pszText		= sz;
	lvi.cchTextMax	= sizeof(sz);
	lvi.stateMask	= 0xFFFF;     // get all state flags
	ListView_GetItem (pdis->hwndItem, &lvi);

	bSelected = lvi.state & LVIS_SELECTED;

	ListView_GetItemRect (pdis->hwndItem, pdis->itemID, &rcAll, LVIR_BOUNDS);
	ListView_GetItemRect (pdis->hwndItem, pdis->itemID, &rcLabel, LVIR_LABEL);
	rcAll.left = rcLabel.left;

	// set colors if item is selected
	if (bSelected && bFocus)
	{
		clrTextSave = SetTextColor(pdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
		clrBkSave = SetBkColor(pdis->hDC, GetSysColor(COLOR_HIGHLIGHT));

		FillRect (pdis->hDC, &rcAll, (HBRUSH)(COLOR_HIGHLIGHT+1));
	}
	else if (bSelected && !bFocus)
	{
		clrTextSave = SetTextColor(pdis->hDC, GetSysColor(COLOR_BTNTEXT));
		clrBkSave = SetBkColor(pdis->hDC, GetSysColor(COLOR_BTNFACE));

		FillRect (pdis->hDC, &rcAll, (HBRUSH)(COLOR_BTNFACE+1));
	}
	else
		FillRect (pdis->hDC, &rcAll, (HBRUSH)(COLOR_WINDOW+1));

	// draw item label
	rcDraw = rcLabel;
	rcDraw.left += OFFSET_FIRST;
	rcDraw.right -= OFFSET_FIRST;

	DrawText (pdis->hDC, sz, -1, &rcDraw,
		DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER |
		DT_END_ELLIPSIS);

	// draw labels for extra columns
	rc = rcLabel;
	lvc.mask = LVCF_FMT | LVCF_WIDTH;
	for (iCol = 1; ListView_GetColumn (pdis->hwndItem, iCol, &lvc); iCol++)
	{
		rc.left = rc.right;
		rc.right += lvc.cx;

		ListView_GetItemText (pdis->hwndItem, pdis->itemID, iCol,
						sz, sizeof(sz));
		if (lstrlen (sz) == 0)
			continue;

		switch (lvc.fmt & LVCFMT_JUSTIFYMASK)
		{
		case LVCFMT_RIGHT:
			nJustify = DT_RIGHT;
			break;
		case LVCFMT_CENTER:
			nJustify = DT_CENTER;
			break;
		default:
			break;
		}

		rcDraw = rc;
		rcDraw.left += OFFSET_OTHER;
		rcDraw.right -= OFFSET_OTHER;

		DrawText (pdis->hDC, sz, -1, &rcDraw,
			nJustify | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER |
			DT_END_ELLIPSIS);
	}

	// draw focus rectangle if item has focus
	if (lvi.state & LVIS_FOCUSED && bFocus && bSelected)
		DrawFocusRect (pdis->hDC, &rcAll);

	// set original colors if item was selected
	if (bSelected)
	{
		SetTextColor (pdis->hDC, clrTextSave);
		SetBkColor (pdis->hDC, clrBkSave);
	}
}


//	____________________________________
//
//	load default advanced prefs by opening a dummy file
//	and reading the prefs.

static PGPError
sLoadDefaultAdvancedPrefs (
		PGPContextRef	context,
		PPNCONFIG		ppnconfig)
{
	PFLFileSpecRef		fileref		= NULL;
	PGPPrefRef			prefref		= kInvalidPGPPrefRef;
	PGPError			err;

	err = PFLGetTempFileSpec (PGPGetContextMemoryMgr (context), 
			NULL, &fileref); CKERR;

	err = PGPOpenPrefFile (fileref, netDefaults, 
			netDefaultsSize, &prefref); CKERR;

	err = PGPnetGetIkeAlgorithmPrefs (context, prefref, ppnconfig); CKERR;

	if (ppnconfig->IkeIkeProposalPrefs.u.ikeProposals.t)
	{
		PGPFreeData (ppnconfig->IkeIkeProposalPrefs.u.ikeProposals.t);
		ppnconfig->IkeIkeProposalPrefs.u.ikeProposals.t = NULL;
	}
	err = PGPnetGetIkeProposalPrefs (context, prefref, ppnconfig); CKERR;

	if (ppnconfig->IkeIpsecProposalPrefs.u.ipsecProposals.t)
	{
		PGPFreeData (ppnconfig->IkeIpsecProposalPrefs.u.ipsecProposals.t);
		ppnconfig->IkeIpsecProposalPrefs.u.ipsecProposals.t = NULL;
	}
	err = PGPnetGetIpsecProposalPrefs (context, prefref, ppnconfig); CKERR;

done :
	if (PGPPrefRefIsValid (prefref)) 
		PGPClosePrefFile (prefref);
	if (IsntNull (fileref)) 
		PFLFreeFileSpec (fileref);

	return err;
}



//	____________________________________
//
//	dialog proc of advanced options dialog

BOOL CALLBACK
PNAdvancedOptionsDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam)
{
	POPTIONSSTRUCT	pos;

	switch (uMsg)
	{
	case WM_INITDIALOG :
	{
		HWND	hwndCombo;
		CHAR	sz[64];
#if !PGPNET_ALLOW_DES56
		RECT	rc;
#endif //PGPNET_ALLOW_DES56

		SetWindowLong (hwnd, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
		pos = (POPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		g_hwndOptions = hwnd;

		g_iSelectedIkeItem = 0;
		g_iSelectedIpsecItem = 0;
		g_iFocusedControl = 0;

		hwndCombo = GetDlgItem (hwnd, IDC_PERFECTSECRECY);
		LoadString (g_hinst, IDS_NONE, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#if PGPNET_ALLOW_DH768
		LoadString (g_hinst, IDS_768, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#endif //PGPNET_ALLOW_DH768
		LoadString (g_hinst, IDS_1024, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_1536, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		// hide DES(56) checkbox if not allowed
#if !PGPNET_ALLOW_DES56
		GetWindowRect (GetDlgItem (hwnd, IDC_ALLOWDES), &rc);
		MapWindowPoints (NULL, hwnd, (LPPOINT)&rc, 2);
		ShowWindow (GetDlgItem (hwnd, IDC_ALLOWDES), SW_HIDE);
		EnableWindow (GetDlgItem (hwnd, IDC_ALLOWDES), FALSE);
		SetWindowPos (GetDlgItem (hwnd, IDC_ALLOWNONECIPHER), NULL, 
						rc.left, rc.top, 0, 0, SWP_NOSIZE|SWP_NOZORDER);
#endif //PGPNET_ALLOW_DES56

		sInitAllowedAlgorithms (hwnd, &pos->pnconfig.IkeAlgorithmPrefs);
		sInitIkeProposalList (hwnd);
		sLoadIkeProposalList (hwnd, &pos->pnconfig.IkeIkeProposalPrefs);
		sInitIpsecProposalList (hwnd);
		sLoadIpsecProposalList (hwnd, &pos->pnconfig.IkeIpsecProposalPrefs);
		sLoadIpsecGroupID (hwnd, pos->pnconfig.IkeIpsecGroupID);

		return FALSE;
	}

	case WM_DESTROY :
		break;

	case WM_NOTIFY :
	{
		LPNMHDR pnmhdr = (LPNMHDR)lParam;
		pos = (POPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		if ((pnmhdr->idFrom == IDC_IKEPROPOSALLIST) ||
			(pnmhdr->idFrom == IDC_IPSECPROPOSALLIST))
		{
			switch (pnmhdr->code) {
			case NM_SETFOCUS :
				g_iFocusedControl = pnmhdr->idFrom;

				switch (pnmhdr->idFrom) {
				case IDC_IKEPROPOSALLIST :
					ListView_SetItemState (pnmhdr->hwndFrom,
						g_iSelectedIkeItem, LVIS_SELECTED, LVIS_SELECTED);
					ListView_SetItemState (
						GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST),
						g_iSelectedIpsecItem, 0, LVIS_SELECTED);
					break;

				case IDC_IPSECPROPOSALLIST :
					ListView_SetItemState (pnmhdr->hwndFrom,
						g_iSelectedIpsecItem, LVIS_SELECTED, LVIS_SELECTED);
					ListView_SetItemState (
						GetDlgItem (hwnd, IDC_IKEPROPOSALLIST),
						g_iSelectedIkeItem, 0, LVIS_SELECTED);
					break;
				}

				sEnableProposalButtons (hwnd, TRUE, pos);
				break;

			case LVN_ITEMCHANGED :
			{
				NM_LISTVIEW* pnmlv = (NM_LISTVIEW*)lParam;

				if (pnmlv->iItem >= 0) 
				{
					if (pnmlv->uNewState & LVIS_SELECTED)
					{
						g_iFocusedControl = pnmhdr->idFrom;
						if (pnmhdr->idFrom == IDC_IKEPROPOSALLIST)
						{
							g_iSelectedIkeItem = pnmlv->iItem;
							ListView_SetItemState (
									GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST),
									g_iSelectedIpsecItem, 0, LVIS_SELECTED);
						}
						else {
							g_iSelectedIpsecItem = pnmlv->iItem;
							ListView_SetItemState (
									GetDlgItem (hwnd, IDC_IKEPROPOSALLIST),
									g_iSelectedIkeItem, 0, LVIS_SELECTED);
						}
						sEnableProposalButtons (hwnd, TRUE, pos);
					}
					else
					{
						sEnableProposalButtons (hwnd, FALSE, pos);
					}
				}
				break;
			}

			case LVN_KEYDOWN :
				if (((LV_KEYDOWN*)lParam)->wVKey == VK_DELETE)
				{
					if (IsWindowEnabled (
							GetDlgItem (hwnd, IDC_REMOVEPROPOSAL)))
					{
						PostMessage (hwnd, WM_COMMAND, IDC_REMOVEPROPOSAL, 0);
					}
				}
				break;
			}
			break;
		}

		switch (((NMHDR FAR *) lParam)->code) {
		case PSN_SETACTIVE :
			break;

		case PSN_HELP :
			WinHelp (hwnd, g_szHelpFile, HELP_CONTEXT, IDH_PNOPTADV_HELP); 
			break;

		case PSN_APPLY :
			pos = (POPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

			sGetAllowedAlgorithms (hwnd, &g_AOS.pnconfig.IkeAlgorithmPrefs);
			sGetIpsecGroupID (hwnd, &g_AOS.pnconfig.IkeIpsecGroupID);

			g_AOS.pnconfig.IkeIkeProposalPrefs.
									u.ikeProposals.numTransforms =
					pos->pnconfig.IkeIkeProposalPrefs.
									u.ikeProposals.numTransforms;
			PGPFreeData (
				g_AOS.pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t);
			g_AOS.pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t = 
					pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t;
			pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t = NULL;

			g_AOS.pnconfig.IkeIpsecProposalPrefs.
									u.ipsecProposals.numTransforms =
					pos->pnconfig.IkeIpsecProposalPrefs.
									u.ipsecProposals.numTransforms;
			PGPFreeData (
				g_AOS.pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t);
			g_AOS.pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t = 
					pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t;
			pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t = NULL;

			SetWindowLong (hwnd, DWL_MSGRESULT, PSNRET_NOERROR);
			return TRUE;

		case PSN_RESET :
			pos = (POPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
			pos->bUserCancel = TRUE;
			break;
		}
		break;
	}

	case WM_DRAWITEM :
		sDrawItem ((LPDRAWITEMSTRUCT)lParam);
		break;

	case WM_HELP: 
		WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
			HELP_WM_HELP, (DWORD) (LPVOID) aAdvIds); 
		break; 
 
	case WM_CONTEXTMENU :
		pos = (POPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		if ((HWND)wParam == GetDlgItem (hwnd, IDC_IKEPROPOSALLIST) ||
			(HWND)wParam == GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST))
			sContextMenu (hwnd, pos, LOWORD(lParam), HIWORD(lParam));
		else
			WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
				(DWORD) (LPVOID) aAdvIds); 
		break;

	case WM_COMMAND :
		pos = (POPTIONSSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		switch (LOWORD (wParam)) {

		case IDC_DEFAULTS :
			sLoadDefaultAdvancedPrefs (g_context, &pos->pnconfig);
			sInitAllowedAlgorithms (hwnd, 
					&pos->pnconfig.IkeAlgorithmPrefs);
			sLoadIkeProposalList (hwnd, 
					&pos->pnconfig.IkeIkeProposalPrefs);
			sLoadIpsecProposalList (hwnd, 
					&pos->pnconfig.IkeIpsecProposalPrefs);
			sLoadIpsecGroupID (hwnd, pos->pnconfig.IkeIpsecGroupID);
			break;

		case IDC_ALLOWDES :
			if (IsDlgButtonChecked (hwnd, IDC_ALLOWDES) == BST_CHECKED)
			{
				if (PNMessageBox (hwnd, IDS_CAPTION, IDS_DESWARN,
					MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONEXCLAMATION) != IDOK)
					CheckDlgButton (hwnd, IDC_ALLOWDES, BST_UNCHECKED);
			}
			break;

		case IDC_NEWPROPOSAL :
			sNewProposalContextMenu (hwnd, pos);
			break;

		case IDM_NEWIKEPROPOSAL :
			sNewIkeProposalDialog (g_context, hwnd, pos);
			break;

		case IDM_NEWIPSECPROPOSAL :
			sNewIpsecProposalDialog (g_context, hwnd, pos);
			break;

		case IDC_EDITPROPOSAL :
			sEditSelectedProposal (hwnd, pos);
			break;

		case IDC_REMOVEPROPOSAL :
			sRemoveSelectedProposal (hwnd, pos);
			break;

		case IDC_PROPOSALUP :
			sMoveSelectedProposal (hwnd, pos, 1);
			break;

		case IDC_PROPOSALDOWN :
			sMoveSelectedProposal (hwnd, pos, -1);
			break;

		case IDM_PROPOSALHELP :
			if (g_iFocusedControl == IDC_IKEPROPOSALLIST)
				WinHelp (GetDlgItem (hwnd, IDC_IKEPROPOSALLIST), 
						g_szHelpFile, HELP_WM_HELP, 
						(DWORD) (LPVOID) aAdvIds); 
			else if (g_iFocusedControl == IDC_IPSECPROPOSALLIST)
				WinHelp (GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST), 
						g_szHelpFile, HELP_WM_HELP, 
						(DWORD) (LPVOID) aAdvIds); 
			break;
		}
		return 0;
	} 

	return FALSE;
}


⌨️ 快捷键说明

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