clavlist.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 1,349 行 · 第 1/3 页
C
1,349 行
HWND hwnd,
PAVLISTSTRUCT pavls)
{
BOOL bReturn = TRUE;
PGPAVAttribute attr = 0;
CHAR sz[256];
switch (pavls->serverclass) {
case kPGPKeyServerClass_Invalid :
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_CommonName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_MailFirstName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_MailMiddleName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_MailLastName);
break;
case kPGPKeyServerClass_Verisign :
#if PGP_VERISIGN_NAMES
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_MailFirstName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_MailMiddleName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_MailLastName);
#else
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_CommonName);
#endif //PGP_VERISIGN_NAMES
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_CertType);
break;
default :
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_CommonName);
break;
}
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_Email);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_OrganizationName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_OrganizationalUnitName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_Country);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_Locality);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_State);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_StreetAddress);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_PostalCode);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_POBOX);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_TelephoneNumber);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_Initials);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_DNSName);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_IPAddress);
sInsertAttribute (hwnd, pavls, kPGPAVAttribute_RFC822Name);
if (pavls->selectedpair == NULL)
{
LoadString (g_hInst, IDS_NEWATTRIBUTETITLE, sz, sizeof(sz));
SetWindowText (hwnd, sz);
if (!SendDlgItemMessage (hwnd, IDC_ATTRIBUTELIST, CB_GETCOUNT, 0, 0))
{
PGPclMessageBox (hwnd, IDS_CAPTIONALERT,
IDS_NOMOREATTRIBUTES, MB_OK|MB_ICONEXCLAMATION);
bReturn = FALSE;
}
else
{
SendDlgItemMessage (
hwnd, IDC_ATTRIBUTELIST, CB_SETCURSEL, 0, 0);
attr = SendDlgItemMessage (
hwnd, IDC_ATTRIBUTELIST, CB_GETITEMDATA, 0, 0);
}
SetFocus (GetDlgItem (hwnd, IDC_ATTRIBUTELIST));
}
else
{
INT index;
attr = pavls->selectedpair->attribute;
sInsertAttribute (hwnd, NULL, attr);
PGPclGetAVListAttributeString (attr, sz, sizeof(sz));
index = SendDlgItemMessage (hwnd, IDC_ATTRIBUTELIST,
CB_FINDSTRINGEXACT, 0, (LPARAM)sz);
SendDlgItemMessage (hwnd, IDC_ATTRIBUTELIST, CB_SETCURSEL, index, 0);
sGetValueString (pavls->selectedpair, sz, sizeof(sz));
SetDlgItemText (hwnd, IDC_VALUE, sz);
SendDlgItemMessage (hwnd, IDC_VALUE, EM_SETSEL, 0, -1);
SetFocus (GetDlgItem (hwnd, IDC_VALUE));
}
if (attr == kPGPAVAttribute_MailMiddleName)
SendDlgItemMessage (
hwnd, IDC_VALUE, EM_SETLIMITTEXT, 1, 0);
else
SendDlgItemMessage (
hwnd, IDC_VALUE, EM_SETLIMITTEXT, 255, 0);
return bReturn;
}
// ___________________________________________________
//
// New AV pair dialog procedure
static BOOL CALLBACK
sAVPairDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PAVLISTSTRUCT pavls;
PGPSize size;
INT index;
switch (uMsg) {
case WM_INITDIALOG :
SetWindowLong (hwnd, GWL_USERDATA, lParam);
pavls = (PAVLISTSTRUCT)lParam;
if (!sInitAVPairDialog (hwnd, pavls))
EndDialog (hwnd, 0);
return FALSE;
case WM_HELP :
case WM_CONTEXTMENU :
return PGPclHtmlHelp (hwnd, uMsg, wParam, lParam,
(char*)kPGPclHelpFile, aAVeditIds);
case WM_COMMAND :
pavls = (PAVLISTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
switch (LOWORD(wParam)) {
case IDC_ATTRIBUTELIST :
if (HIWORD (wParam) == CBN_SELCHANGE)
{
PGPAVAttribute attr;
SetDlgItemText (hwnd, IDC_VALUE, "");
SetFocus (GetDlgItem (hwnd, IDC_VALUE));
index = SendDlgItemMessage (
hwnd, IDC_ATTRIBUTELIST, CB_GETCURSEL, 0, 0);
attr = SendDlgItemMessage (
hwnd, IDC_ATTRIBUTELIST, CB_GETITEMDATA, index, 0);
if (attr == kPGPAVAttribute_MailMiddleName)
SendDlgItemMessage (
hwnd, IDC_VALUE, EM_SETLIMITTEXT, 1, 0);
else
SendDlgItemMessage (
hwnd, IDC_VALUE, EM_SETLIMITTEXT, 255, 0);
}
break;
case IDCANCEL :
EndDialog (hwnd, 0);
break;
case IDOK :
size = GetWindowTextLength (GetDlgItem (hwnd, IDC_VALUE));
if (size == 0)
{
PGPclMessageBox (hwnd, IDS_CAPTIONINFO,
IDS_MUSTENTERVALUE, MB_OK|MB_ICONINFORMATION);
break;
}
if (pavls->selectedpair)
{
if (pavls->selectedpair->value.pointervalue)
PGPFreeData (pavls->selectedpair->value.pointervalue);
}
else
{
pavls->selectedpair = pavls->pAVListEnd;
index = SendDlgItemMessage (
hwnd, IDC_ATTRIBUTELIST, CB_GETCURSEL, 0, 0);
pavls->selectedpair->attribute = SendDlgItemMessage (
hwnd, IDC_ATTRIBUTELIST, CB_GETITEMDATA, index, 0);
(pavls->pAVListEnd)++;
}
pavls->selectedpair->value.pointervalue = PGPNewData (
PGPPeekContextMemoryMgr (pavls->context),
size+1, kPGPMemoryMgrFlags_Clear);
if (pavls->selectedpair->value.pointervalue)
{
pavls->selectedpair->size = size;
GetWindowText (GetDlgItem (hwnd, IDC_VALUE),
pavls->selectedpair->value.pointervalue, size+1);
}
else
pavls->selectedpair->size = 0;
EndDialog (hwnd, 1);
break;
}
return TRUE;
}
return FALSE;
}
// ___________________________________________________
//
// Initialize the AV list listview control
static VOID
sInitAVListControls (
HWND hwnd,
PAVLISTSTRUCT pavls)
{
LV_COLUMN lvc;
RECT rc;
CHAR sz[32];
HWND hwndList;
// initialize text string
switch (pavls->serverclass) {
case kPGPKeyServerClass_NetToolsCA :
LoadString (g_hInst, IDS_CATYPENETTOOLS, sz, sizeof(sz));
break;
case kPGPKeyServerClass_Verisign :
LoadString (g_hInst, IDS_CATYPEVERISIGN, sz, sizeof(sz));
break;
case kPGPKeyServerClass_Entrust :
LoadString (g_hInst, IDS_CATYPEENTRUST, sz, sizeof(sz));
break;
case kPGPKeyServerClass_Netscape :
LoadString (g_hInst, IDS_CATYPENETSCAPE, sz, sizeof(sz));
break;
case kPGPKeyServerClass_Microsoft :
LoadString (g_hInst, IDS_CATYPEMICROSOFT, sz, sizeof(sz));
break;
default :
LoadString (g_hInst, IDS_CATYPEUNSPECIFIED, sz, sizeof(sz));
break;
}
SetDlgItemText (hwnd, IDC_CATYPE, sz);
// add columns
hwndList = GetDlgItem (hwnd, IDC_AVLIST);
GetClientRect (hwndList, &rc);
lvc.mask = LVCF_WIDTH|LVCF_TEXT;
lvc.pszText = sz;
LoadString (g_hInst, IDS_ATTRIBUTE, sz, sizeof(sz));
lvc.cx = INITIAL_ATTRIBUTE_COLUMNWIDTH;
lvc.iSubItem = 0;
if (ListView_InsertColumn (hwndList, 0, &lvc) == -1) return;
LoadString (g_hInst, IDS_VALUE, sz, sizeof(sz));
lvc.cx = rc.right - rc.left
-INITIAL_ATTRIBUTE_COLUMNWIDTH -SCROLLBAR_WIDTH;
lvc.iSubItem = 1;
if (ListView_InsertColumn (hwndList, 1, &lvc) == -1) return;
}
// ___________________________________________________
//
// Load the AV list listview control with AV pairs
static VOID
sLoadAVList (
HWND hwnd,
PAVLISTSTRUCT pavls)
{
CHAR sz[256];
LV_ITEM lvi;
HWND hwndList;
PGPAttributeValue* pAV;
hwndList = GetDlgItem (hwnd, IDC_AVLIST);
ListView_DeleteAllItems (hwndList);
lvi.iItem = 0;
lvi.pszText = sz;
for (pAV=pavls->pAVListStart; pAV<pavls->pAVListEnd; pAV++)
{
lvi.mask = LVIF_TEXT|LVIF_PARAM;
lvi.iSubItem = 0;
PGPclGetAVListAttributeString (pAV->attribute, sz, sizeof(sz));
lvi.lParam = (LPARAM)pAV;
ListView_InsertItem (hwndList, &lvi);
lvi.mask = LVIF_TEXT;
lvi.iSubItem = 1;
sz[0] = '\0';
sGetValueString (pAV, sz, sizeof(sz));
ListView_SetItem (hwndList, &lvi);
lvi.iItem++;
}
}
// ___________________________________________________
//
// remove the selected AV pair from the list
static VOID
sRemoveSelectedAVPair (
PAVLISTSTRUCT pavls)
{
PGPAttributeValue* pAV;
if (pavls->selectedpair->value.pointervalue)
PGPFreeData (pavls->selectedpair->value.pointervalue);
for (pAV=pavls->selectedpair; pAV<pavls->pAVListEnd; pAV++)
{
pgpCopyMemory ((pAV+1), pAV, sizeof(PGPAttributeValue));
}
(pavls->pAVListEnd)--;
}
// _____________________________________________________
//
// 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;
sz[0] = '\0';
ListView_GetItemText (pdis->hwndItem, pdis->itemID, iCol,
sz, sizeof(sz));
if (sz[0] == '\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);
}
}
// ___________________________________________________
//
// Check if all attributes have values assigned
static BOOL
sAllAttributesHaveValues (
HWND hwnd,
PAVLISTSTRUCT pavls)
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?