📄 pnadvanced.c
字号:
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 + -