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

📄 sendmsgwndproc.cpp

📁 vc环境下的pgp源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*____________________________________________________________________________
	Copyright (C) 1997 Network Associates Inc. and affiliated companies.
	All rights reserved.

	$Id: SendMsgWndProc.cpp,v 1.18 1999/04/26 19:13:24 dgal Exp $
____________________________________________________________________________*/

#include <windows.h>
#include <commctrl.h>
#include <process.h>
#include "PluginInfo.h"
#include "HookProcs.h"
#include "UIutils.h"
#include "TextIO.h"
#include "Recipients.h"
#include "pgpErrors.h"
#include "pgpEncode.h"
#include "pgpOptionList.h"
#include "pgpSDKPrefs.h"
#include "resource.h"
#include "EncryptSign.h"

static BOOL EncryptSignMessage(HWND hwnd);
static void DoubleLineFeeds(char *szOriginal, char *szNew);
static void UpdateMenus(HWND hwnd, PluginInfo *plugin);

typedef struct _AttStruct
{
	char *String0;
	char *String1;
	HANDLE hFile0;
	HANDLE hFile1;
} AttStruct;


LRESULT CALLBACK SendMsgWndProc(HWND hDlg, 
								UINT msg,
								WPARAM wParam, 
								LPARAM lParam)
{
	WNDPROC lpOldProc;
	PluginInfo *plugin;

	lpOldProc = (WNDPROC)GetProp( hDlg, "oldproc" );
	plugin = GetPluginInfo(hDlg);

	if (plugin != NULL)
	{
		if (msg == plugin->nCopyDoneMsg)
		{
			if (wParam)
			{
				if (plugin->nAction == PluginAction_Encrypt)
				{
					if (EncryptSignMessage(hDlg))
						_beginthread(DoPasteThread, 0, hDlg);
					else
						RestoreClipboardText(hDlg);
				}
				else if (plugin->nAction == PluginAction_Reply)
				{
					char *szText;

					szText = GetReplyText();
					if (szText != NULL)
					{
						char *szReplyText;
						char *szReplyHeader;
						
						GetMessageText(hDlg, FALSE, &szReplyHeader);
						if (FindReplyHeader(szReplyHeader))
						{
							szReplyText = (char *) 
								calloc(strlen(szReplyHeader) +
									strlen(szText) * 2 + 1, 1);
							
							strcpy(szReplyText, szReplyHeader);
							AddReply(szReplyText, szText);
							SetMessageText(hDlg, szReplyText);
							free(szReplyText);
							_beginthread(DoPasteThread, 0, hDlg);
						}
						else
							RestoreClipboardText(hDlg);
						
						free(szReplyHeader);
						FreeReplyText();
					}
					else
						RestoreClipboardText(hDlg);
				}
				else
					RestoreClipboardText(hDlg);
			}
			else
				RestoreClipboardText(hDlg);

			return 0;
		}
	
		if (msg == plugin->nPasteDoneMsg)
		{
			RestoreClipboardText(hDlg);
			if (plugin->hDlg != NULL)
				return CallWindowProc(lpOldProc, plugin->hDlg, plugin->nMsg, 
							plugin->wParam, plugin->lParam);
			else
				return 0;
		}
	}

	switch(msg)
	{
	case WM_DESTROY:
		{
			KillTimer(hDlg, WATCH_TOOLBAR_TIMER);
			break;
		}

	case WM_TIMER:
		if (wParam == CORRECT_TOOLBAR_TIMER)
		{
			KillTimer(hDlg, CORRECT_TOOLBAR_TIMER);

			SendMessage(plugin->hToolbar, TB_SETBUTTONWIDTH, 0,
				MAKELONG(24, 24));
			SendMessage(plugin->hToolbar, TB_AUTOSIZE, 0, 0);
			UpdateMenus(hDlg, plugin);

			return 0;
		}
		else if (wParam == PASTE_REPLY_TIMER)
		{
			char *szText;
			
			// Paste any reply text
			KillTimer(hDlg, PASTE_REPLY_TIMER);
			szText = GetReplyText();
			if (szText != NULL)
			{
				HWND hDocHost;
				HWND hMimeEdit;
				HWND hMessage;
				
				if (!SaveClipboardText(hDlg))
					return 0;
				
				plugin->nAction = PluginAction_Reply;
				plugin->hDlg = NULL;
				
				if (plugin->bOE5)
				{
					hDocHost = FindWindowEx(hDlg, NULL, "ME_DocHost", NULL);
					hMimeEdit = FindWindowEx(hDocHost, NULL, 
									"##MimeEdit_Server", NULL);
					hMessage = FindWindowEx(hMimeEdit, NULL, 
									"Internet Explorer_Server", NULL);
					
					SetFocus(hDocHost);
					SetFocus(hMimeEdit);
					SetFocus(hMessage);
				}
				else
				{
					hDocHost = FindWindowEx(hDlg, NULL, "Ath_DocHost", NULL);
					hMessage = FindWindowEx(hDocHost, NULL, 
									"Internet Explorer_Server", NULL);
					
					SetFocus(hDocHost);
					SetFocus(hMessage);
				}
				
				_beginthread(DoCopyThread, 0, hDlg);
			}

			return 0;
		}
		break;

	case WM_MENUSELECT:
		{
			UINT uFlags = (UINT) HIWORD(wParam);
			char szText[255];
			BOOL bPluginMenu = FALSE;

			if (uFlags & MF_POPUP)
			{
				if (LOWORD(wParam) == plugin->nPGPPosition+1)
					UpdateMenus(hDlg, plugin);
			}

			switch(LOWORD(wParam))
			{
				case IDC_ENCRYPT_SMIME:
				case IDC_OE5_ENCRYPT_SMIME:
				{
					UIGetString(szText, 254, IDS_STATUS_SMIME_ENCRYPT);
					bPluginMenu = TRUE;
					break;
				}
								
				case IDC_SIGN_SMIME:
				case IDC_OE5_SIGN_SMIME:
				{
					UIGetString(szText, 254, IDS_STATUS_SMIME_SIGN);
					bPluginMenu = TRUE;
					break;
				}

				case IDC_ENCRYPT_PGP:
				{
					UIGetString(szText, 254, IDS_STATUS_PGP_ENCRYPT);
					bPluginMenu = TRUE;
					break;
				}
								
				case IDC_SIGN_PGP:
				{
					UIGetString(szText, 254, IDS_STATUS_PGP_SIGN);
					bPluginMenu = TRUE;
					break;
				}
			}	

			if (bPluginMenu)
			{
				CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam);
				SendMessage(plugin->hStatusBar, SB_SETTEXT, 
					255 | SBT_NOBORDERS, (LPARAM) szText);

				return 0;
			}

			break;
		}

		case WM_COMMAND:
		{
			switch(LOWORD(wParam))
			{
			case IDC_SENDMESSAGE_MENU:
			case IDC_SENDMESSAGE_BUTTON:
			case IDC_SENDLATER:
			case IDC_POSTARTICLE_MENU:
			case IDC_POSTARTICLE_BUTTON:
			case IDC_POSTLATER:
			case IDC_OE5_SENDMESSAGE:
			case IDC_OE5_SENDLATER:
				{
					if (plugin->bEncrypt || plugin->bSign)
					{
						HWND hDocHost;
						HWND hMimeEdit;
						HWND hMessage;

						if (!SaveClipboardText(hDlg))
							return 0;

						plugin->nAction = PluginAction_Encrypt;
						plugin->hDlg = hDlg;
						plugin->nMsg = msg;
						plugin->wParam = wParam;
						plugin->lParam = lParam;
						
						if (plugin->bOE5)
						{
							hDocHost = FindWindowEx(hDlg, NULL, 
											"ME_DocHost", NULL);
							hMimeEdit = FindWindowEx(hDocHost, NULL, 
											"##MimeEdit_Server", NULL);
							hMessage = FindWindowEx(hMimeEdit, NULL, 
											"Internet Explorer_Server", NULL);
							
							SetFocus(hDocHost);
							SetFocus(hMimeEdit);
							SetFocus(hMessage);
						}
						else
						{
							hDocHost = FindWindowEx(hDlg, NULL, 
											"Ath_DocHost", NULL);
							hMessage = FindWindowEx(hDocHost, NULL, 
											"Internet Explorer_Server", NULL);
							
							SetFocus(hDocHost);
							SetFocus(hMessage);
						}
						
						_beginthread(DoCopyThread, 0, hDlg);
						return 0;
					}

					break;
				}

			case IDC_ENCRYPT_PGP:
				if (plugin->bOE5)
				{
					plugin->bEncrypt = !(plugin->bEncrypt);
					SendMessage(plugin->hToolbar, TB_CHECKBUTTON, 
						IDC_ENCRYPT_PGP, MAKELONG(plugin->bEncrypt, 0));
					return 0;
				}
				else
				{
					MENUITEMINFO menuInfo;

					menuInfo.cbSize = sizeof(MENUITEMINFO);
					menuInfo.fMask = MIIM_STATE;
					GetMenuItemInfo(plugin->hToolsMenu, IDC_ENCRYPT_PGP, 
						FALSE, &menuInfo);
					
					if (menuInfo.fState & MFS_CHECKED)
						plugin->bEncrypt = FALSE;
					else
						plugin->bEncrypt = TRUE;

					UpdateMenus(hDlg, plugin);
					return 0;
				}

			case IDC_SIGN_PGP:
				if (plugin->bOE5)
				{
					plugin->bSign = !(plugin->bSign);
					SendMessage(plugin->hToolbar, TB_CHECKBUTTON, 
						IDC_SIGN_PGP, MAKELONG(plugin->bSign, 0));
					return 0;
				}
				else
				{
					MENUITEMINFO menuInfo;

					menuInfo.cbSize = sizeof(MENUITEMINFO);
					menuInfo.fMask = MIIM_STATE;
					GetMenuItemInfo(plugin->hToolsMenu, IDC_SIGN_PGP, 
						FALSE, &menuInfo);
					
					if (menuInfo.fState & MFS_CHECKED)
						plugin->bSign = FALSE;
					else
						plugin->bSign = TRUE;

					UpdateMenus(hDlg, plugin);
					return 0;
				}
			}
			break;
		}
		
	case WM_INITMENUPOPUP:
		if (plugin->bOE5)
		{
			int nAddrBook;
			MENUITEMINFO menuInfo;
			char szAddrBook[256];
			char szMenu[256];
			LRESULT lResult;
			
			UIGetString(szAddrBook, 254, IDS_MENU_OEADDRBOOK);
			nAddrBook = GetMenuItemCount((HMENU) wParam);
			
			menuInfo.cbSize = sizeof(MENUITEMINFO);
			menuInfo.fMask = MIIM_TYPE;
			menuInfo.dwTypeData = szMenu;
			menuInfo.cch = 255;
			
			GetMenuItemInfo((HMENU) wParam, nAddrBook - 1, TRUE, &menuInfo);
			
			if (strstr(szMenu, szAddrBook))
			{
				lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, 
							lParam);
				
				strcpy(szMenu, "&PGP");
				
				menuInfo.cbSize = sizeof(MENUITEMINFO);
				menuInfo.fMask = MIIM_TYPE | MIIM_ID | MIIM_SUBMENU | 
									MIIM_STATE;
				menuInfo.fType = MFT_STRING;
				menuInfo.wID = IDC_PGPMENU;
				menuInfo.fState = MFS_ENABLED;
				menuInfo.hSubMenu = plugin->hPGPMenu;
				menuInfo.dwTypeData = szMenu;

				InsertMenuItem((HMENU) wParam, nAddrBook, TRUE, &menuInfo);
				plugin->nPGPPosition = nAddrBook;

				UIGetString(szMenu, 254, IDS_MENU_SMIME_ENCRYPT);
				menuInfo.fMask = MIIM_TYPE;
				menuInfo.fType = MFT_STRING;
				menuInfo.dwTypeData = szMenu;

				SetMenuItemInfo((HMENU) wParam, OE5_ENCRYPT_SMIME_POS, TRUE, 
					&menuInfo);

				UIGetString(szMenu, 254, IDS_MENU_PGP_ENCRYPT);
				menuInfo.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
				menuInfo.fType = MFT_STRING;
				menuInfo.wID = IDC_ENCRYPT_PGP;
				menuInfo.dwTypeData = szMenu;
				
				if (plugin->bEncrypt)
					menuInfo.fState = MFS_ENABLED | MFS_CHECKED;
				else
					menuInfo.fState = MFS_ENABLED;

				InsertMenuItem((HMENU) wParam, OE5_ENCRYPT_PGP_POS, TRUE, 
					&menuInfo);

⌨️ 快捷键说明

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