Windows Program-文件保存查找替换

main.cpp

#include <windows.h>
#include "resource.h"

#define EDITID   1
#define UNTITLED TEXT ("(untitled)")

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM);

// Functions in POPFILE.C

void PopFileInitialize(HWND);
BOOL PopFileOpenDlg(HWND, PTSTR, PTSTR);
BOOL PopFileSaveDlg(HWND, PTSTR, PTSTR);
BOOL PopFileRead(HWND, PTSTR);
BOOL PopFileWrite(HWND, PTSTR);

// Functions in POPFIND.C

HWND PopFindFindDlg(HWND);
HWND PopFindReplaceDlg(HWND);
BOOL PopFindFindText(HWND, int *, LPFINDREPLACE);
BOOL PopFindReplaceText(HWND, int *, LPFINDREPLACE);
BOOL PopFindNextText(HWND, int *);
BOOL PopFindValidFind(void);

// Functions in POPFONT.C

void PopFontInitialize(HWND);
BOOL PopFontChooseFont(HWND);
void PopFontSetFont(HWND);
void PopFontDeinitialize(void);

// Functions in POPPRNT.C

BOOL PopPrntPrintFile(HINSTANCE, HWND, HWND, PTSTR);

static HWND  hDlgModeless;
static TCHAR szAppName[] = TEXT("PopPad");

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	PSTR szCmdLine, int iCmdShow)
{
	MSG       msg;
	HWND      hwnd;
	HACCEL    hAccel;
	WNDCLASS  wndclass;

	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.hInstance = hInstance;
	wndclass.hIcon = LoadIcon(hInstance, szAppName);
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.lpszMenuName = szAppName;
	wndclass.lpszClassName = szAppName;

	if (!RegisterClass(&wndclass))
	{
		MessageBox(NULL, TEXT("Program requires Windows NT!"),
			szAppName, MB_ICONERROR);
		return 0;
	}

	hwnd = CreateWindow(szAppName, NULL,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, szCmdLine);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	hAccel = LoadAccelerators(hInstance, szAppName);

	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (hDlgModeless == NULL || !IsDialogMessage(hDlgModeless, &msg))
		{
			if (!TranslateAccelerator(hwnd, hAccel, &msg))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
	}
	return msg.wParam;
}

void DoCaption(HWND hwnd, TCHAR *szTitleName)
{
	TCHAR szCaption[64 + MAX_PATH];
	wsprintf(szCaption, TEXT("%s - %s"), szAppName,
		szTitleName[0] ? szTitleName : UNTITLED);
	SetWindowText(hwnd, szCaption);
}

void OkMessage(HWND hwnd, TCHAR * szMessage, TCHAR * szTitleName)
{
	TCHAR szBuffer[64 + MAX_PATH];

	wsprintf(szBuffer, szMessage, szTitleName[0] ? szTitleName : UNTITLED);

	MessageBox(hwnd, szBuffer, szAppName, MB_OK | MB_ICONEXCLAMATION);
}

short AskAboutSave(HWND hwnd, TCHAR * szTitleName)
{
	TCHAR szBuffer[64 + MAX_PATH];
	int   iReturn;

	wsprintf(szBuffer, TEXT("Save current changes in %s?"),
		szTitleName[0] ? szTitleName : UNTITLED);

	iReturn = MessageBox(hwnd, szBuffer, szAppName,
		MB_YESNOCANCEL | MB_ICONQUESTION);

	if (iReturn == IDYES)
		if (!SendMessage(hwnd, WM_COMMAND, IDM_FILE_SAVE, 0))
			iReturn = IDCANCEL;

	return iReturn;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static BOOL      bNeedSave = FALSE;
	static HINSTANCE hInst;
	static HWND      hwndEdit;
	static int       iOffset;
	static int       iStart;
	static TCHAR     szFileName[MAX_PATH], szTitleName[MAX_PATH];
	static UINT      messageFindReplace;
	int              iSelBeg, iSelEnd, iEnable;
	LPFINDREPLACE    pfr;

	switch (message)
	{
	case WM_CREATE:
		hInst = ((LPCREATESTRUCT)lParam)->hInstance;

		// Create the edit control child window

		hwndEdit = CreateWindow(TEXT("edit"), NULL,
			WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
			WS_BORDER | ES_LEFT | ES_MULTILINE |
			ES_NOHIDESEL | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
			0, 0, 0, 0,
			hwnd, (HMENU)EDITID, hInst, NULL);

		SendMessage(hwndEdit, EM_LIMITTEXT, 32000, 0L);

		PopFileInitialize(hwnd);
		PopFontInitialize(hwndEdit);

		messageFindReplace = RegisterWindowMessage(FINDMSGSTRING);//

		DoCaption(hwnd, szTitleName);

		return 0;
	case WM_SETFOCUS:
		SetFocus(hwndEdit);
		return 0;
	case WM_SIZE:
		MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
		return 0;
	case WM_INITMENUPOPUP:
		switch (lParam)
		{
		case 1:             // Edit menu

							// Enable Undo if edit control can do it

			EnableMenuItem((HMENU)wParam, IDM_EDIT_UNDO,
				SendMessage(hwndEdit, EM_CANUNDO, 0, 0L) ?
				MF_ENABLED : MF_GRAYED);

			// Enable Paste if text is in the clipboard

			EnableMenuItem((HMENU)wParam, IDM_EDIT_PASTE,
				IsClipboardFormatAvailable(CF_TEXT) ?
				MF_ENABLED : MF_GRAYED);

			// Enable Cut, Copy, and Del if text is selected

			SendMessage(hwndEdit, EM_GETSEL, (WPARAM)&iSelBeg,
				(LPARAM)&iSelEnd);

			iEnable = iSelBeg != iSelEnd ? MF_ENABLED : MF_GRAYED;

			EnableMenuItem((HMENU)wParam, IDM_EDIT_CUT, iEnable);
			EnableMenuItem((HMENU)wParam, IDM_EDIT_COPY, iEnable);
			EnableMenuItem((HMENU)wParam, IDM_EDIT_CLEAR, iEnable);
			break;

		case 2:             // Search menu

							// Enable Find, Next, and Replace if modeless
							//   dialogs are not already active

			iEnable = hDlgModeless == NULL ?
				MF_ENABLED : MF_GRAYED;

			EnableMenuItem((HMENU)wParam, IDM_SEARCH_FIND, iEnable);
			EnableMenuItem((HMENU)wParam, IDM_SEARCH_NEXT, iEnable);
			EnableMenuItem((HMENU)wParam, IDM_SEARCH_REPLACE, iEnable);
			break;
		}
		return 0;
	case WM_COMMAND:
		if (lParam && LOWORD(wParam) == EDITID)
		{
			switch (HIWORD(wParam))
			{
			case EN_UPDATE:
				bNeedSave = TRUE;
				return 0;

			case EN_ERRSPACE:
			case EN_MAXTEXT:
				MessageBox(hwnd, TEXT("Edit control out of space."),
					szAppName, MB_OK | MB_ICONSTOP);
				return 0;
			}
			break;
		}

		switch (LOWORD(wParam))
		{
			// Messages from File menu

		case IDM_FILE_NEW:
			if (bNeedSave && IDCANCEL == AskAboutSave(hwnd, szTitleName))
				return 0;

			SetWindowText(hwndEdit, TEXT("\0"));
			szFileName[0] = '\0';
			szTitleName[0] = '\0';
			DoCaption(hwnd, szTitleName);
			bNeedSave = FALSE;
			return 0;

		case IDM_FILE_OPEN:
			if (bNeedSave && IDCANCEL == AskAboutSave(hwnd, szTitleName))
				return 0;

			if (PopFileOpenDlg(hwnd, szFileName, szTitleName))
			{
				if (!PopFileRead(hwndEdit, szFileName))
				{
					OkMessage(hwnd, TEXT("Could not read file %s!"),
						szTitleName);
					szFileName[0] = '\0';
					szTitleName[0] = '\0';
				}
			}

			DoCaption(hwnd, szTitleName);
			bNeedSave = FALSE;
			return 0;
		case IDM_FILE_SAVE:
			if (szFileName[0])
			{
				if (PopFileWrite(hwndEdit, szFileName))
				{
					bNeedSave = FALSE;
					return 1;
				}
				else
				{
					OkMessage(hwnd, TEXT("Could not write file %s"),
						szTitleName);
					return 0;
				}
			}
		case IDM_FILE_SAVE_AS:
			if (PopFileSaveDlg(hwnd, szFileName, szTitleName))
			{
				DoCaption(hwnd, szTitleName);

				if (PopFileWrite(hwndEdit, szFileName))
				{
					bNeedSave = FALSE;
					return 1;
				}
				else
				{
					OkMessage(hwnd, TEXT("Could not write file %s"),
						szTitleName);
					return 0;
				}
			}
			return 0;
		case IDM_FILE_PRINT:
			if (!PopPrntPrintFile(hInst, hwnd, hwndEdit, szTitleName))
				OkMessage(hwnd, TEXT("Could not print file %s"),
					szTitleName);
			return 0;
		case IDM_APP_EXIT:
			SendMessage(hwnd, WM_CLOSE, 0, 0);
			return 0;
		case IDM_EDIT_UNDO:
			SendMessage(hwndEdit, WM_UNDO, 0, 0);
			return 0;

		case IDM_EDIT_CUT:
			SendMessage(hwndEdit, WM_CUT, 0, 0);
			return 0;

		case IDM_EDIT_COPY:
			SendMessage(hwndEdit, WM_COPY, 0, 0);
			return 0;

		case IDM_EDIT_PASTE:
			SendMessage(hwndEdit, WM_PASTE, 0, 0);
			return 0;

		case IDM_EDIT_CLEAR:
			SendMessage(hwndEdit, WM_CLEAR, 0, 0);
			return 0;

		case IDM_EDIT_SELECT_ALL:
			SendMessage(hwndEdit, EM_SETSEL, 0, -1);
			return 0;
		case IDM_SEARCH_FIND:
			SendMessage(hwndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iOffset);
			if (iStart == iOffset)
			{
				iOffset = 0;
			}
			hDlgModeless = PopFindFindDlg(hwnd);
			return 0;
		case IDM_SEARCH_NEXT:
			SendMessage(hwndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iOffset);
			if (iStart == iOffset)
			{
				iOffset = 0;
			}
			if (PopFindValidFind())
				PopFindNextText(hwndEdit, &iOffset);
			else
				hDlgModeless = PopFindFindDlg(hwnd);
			return 0;
		case IDM_SEARCH_REPLACE:
			SendMessage(hwndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iOffset);
			if (iStart == iOffset)
			{
				iOffset = 0;
			}
			hDlgModeless = PopFindReplaceDlg(hwnd);
			return 0;
		case IDM_FORMAT_FONT:
			if (PopFontChooseFont(hwnd))
				PopFontSetFont(hwndEdit);

			return 0;
		case IDM_HELP:
			OkMessage(hwnd, TEXT("Help not yet implemented!"),
				TEXT("\0"));
			return 0;
		case IDM_APP_ABOUT:
			DialogBox(hInst, TEXT("AboutBox"), hwnd, AboutDlgProc);
			return 0;
		}
		break;
	case WM_CLOSE:
		 if (!bNeedSave || IDCANCEL != AskAboutSave(hwnd, szTitleName))
			 DestroyWindow(hwnd);

		 return 0;
	case WM_QUERYENDSESSION:
		if (!bNeedSave || IDCANCEL != AskAboutSave(hwnd, szTitleName))
			return 1;

		return 0;
	case WM_DESTROY:
		PopFontDeinitialize();
		PostQuitMessage(0);
		return 0;
	default:
		if (message == messageFindReplace)
		{
			pfr = (LPFINDREPLACE)lParam;
			if (pfr->Flags&FR_DIALOGTERM)
			{
				hDlgModeless = NULL;
			}
			if (pfr->Flags&FR_FINDNEXT)
			{
				if (!PopFindFindText(hwndEdit, &iOffset, pfr))
				{
					OkMessage(hwnd, TEXT("Text not found!"), TEXT("\0"));
				}
			}
			if (pfr->Flags&FR_REPLACE || pfr->Flags&FR_REPLACE)
			{
				if (!PopFindReplaceText(hwndEdit, &iOffset, pfr))
				{
					OkMessage(hwnd, TEXT("Text not found!"),TEXT("\0"));
				}
			}
			if (pfr->Flags&FR_REPLACEALL)
			{
				while (PopFindReplaceText(hwndEdit, &iOffset, pfr));
			}
			return 0;
		}
		break;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message,
	WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_INITDIALOG:
		return TRUE;

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
			EndDialog(hDlg, 0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}

POPFILE.cpp

#include <Windows.h>

static OPENFILENAME ofn;

void PopFileInitialize(HWND hwnd)
{
	static TCHAR szFilter[] = TEXT("Text Files (*.TXT)\0*.txt\0")  \
		TEXT("ASCII Files (*.ASC)\0*.asc\0") \
		TEXT("All Files (*.*)\0*.*\0\0");

	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = hwnd;
	ofn.hInstance = NULL;
	ofn.lpstrFilter = szFilter;
	ofn.lpstrCustomFilter = NULL;
	ofn.nMaxCustFilter = 0;
	ofn.nFilterIndex = 0;
	ofn.lpstrFile = NULL;          // Set in Open and Close functions
	ofn.nMaxFile = MAX_PATH;
	ofn.lpstrFileTitle = NULL;          // Set in Open and Close functions
	ofn.nMaxFileTitle = MAX_PATH;
	ofn.lpstrInitialDir = NULL;
	ofn.lpstrTitle = NULL;
	ofn.Flags = 0;             // Set in Open and Close functions
	ofn.nFileOffset = 0;
	ofn.nFileExtension = 0;
	ofn.lpstrDefExt = TEXT("txt");
	ofn.lCustData = 0L;
	ofn.lpfnHook = NULL;
	ofn.lpTemplateName = NULL;
}

BOOL PopFileOpenDlg(HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
	ofn.hwndOwner = hwnd;
	ofn.lpstrFile = pstrFileName;
	ofn.lpstrFileTitle = pstrTitleName;
	ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;

	return GetOpenFileName(&ofn);
}

BOOL PopFileSaveDlg(HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
	ofn.hwndOwner = hwnd;
	ofn.lpstrFile = pstrFileName;
	ofn.lpstrFileTitle = pstrTitleName;
	ofn.Flags = OFN_OVERWRITEPROMPT;

	return GetSaveFileName(&ofn);
}

BOOL PopFileRead(HWND hwndEdit, PTSTR pstrFileName)
{
	BYTE bySwap;
	DWORD dwByteRead;
	HANDLE hFile;
	int i, iFileLength, iUniTest;
	PBYTE pBuffer, pText, pConv;

	if (INVALID_HANDLE_VALUE == (hFile = CreateFile(pstrFileName, GENERIC_READ, FILE_SHARE_READ,
		NULL, OPEN_EXISTING, 0, NULL)))
	{
		return false;
	}
	iFileLength = GetFileSize(hFile, NULL);
	pBuffer =(PBYTE) malloc(iFileLength + 2);

	ReadFile(hFile, pBuffer, iFileLength, &dwByteRead, NULL);
	CloseHandle(hFile);
	pBuffer[iFileLength] = '\0';
	pBuffer[iFileLength + 1] = '\0';

	iUniTest = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE;
	if(IsTextUnicode(pBuffer,iFileLength,&iUniTest))
	{ 
		pText = pBuffer + 2;
		iFileLength -= 2;
		if (iUniTest&IS_TEXT_UNICODE_REVERSE_SIGNATURE)
		{
			for (i = 0;i < iFileLength / 2;i++)
			{
				bySwap = ((BYTE*)pText)[2 * i];
				((BYTE*)pText)[2 * i] = ((BYTE*)pText)[2 * i + 1];
				((BYTE*)pText)[2 * i + 1] = bySwap;
			}
		}
		pConv = (PBYTE)malloc(iFileLength + 2);
#ifndef UNICODE
		WideCharToMultiByte(CP_ACP, 0, (PWSTR)pText, -1, (LPSTR)pConv, iFileLength + 2, NULL, NULL);
#else
		lstrcpy((PTSTR)pConv, (PTSTR)pText);
#endif
	}
	else
	{
		pText = pBuffer;
		pConv =(PBYTE) malloc(2 * iFileLength + 2);

#ifdef UNICODE
		MultiByteToWideChar(CP_ACP, 0, (LPCCH)pText, -1, (PTSTR)pConv, iFileLength + 1);
#else
		lstrcpy((PTSTR)pConv, (PTSTR)pText);
#endif
	}
	SetWindowText(hwndEdit, (PTSTR)pConv);
	free(pBuffer);
	free(pConv);
	return TRUE;
}

BOOL PopFileWrite(HWND hwndEdit, PTSTR pstrFileName)
{
	DWORD dwBytesWritten;
	HANDLE hFile;
	int iLength;
	PTSTR pstrBuffer;
	WORD wByteOrderMark = 0xFEFF;

	if (INVALID_HANDLE_VALUE == (hFile = CreateFile(pstrFileName, GENERIC_WRITE, 0, NULL,
		CREATE_ALWAYS, 0, NULL)))
	{
		return FALSE;
	}
	iLength = GetWindowTextLength(hwndEdit);
	pstrBuffer = (PTSTR)malloc((iLength + 1)*sizeof(TCHAR));
	if (!pstrBuffer)
	{
		CloseHandle(hFile);
		return FALSE;
	}
#ifdef UNICODE
	WriteFile(hFile, &wByteOrderMark, 2, &dwBytesWritten, NULL);
#endif

	GetWindowText(hwndEdit, pstrBuffer, iLength + 1);
	WriteFile(hFile, pstrBuffer, iLength*sizeof(TCHAR), &dwBytesWritten, NULL);
	if ((iLength*sizeof(TCHAR)) != (int)dwBytesWritten)
	{
		CloseHandle(hFile);
		free(pstrBuffer);
		return FALSE;
	}

	CloseHandle(hFile);
	free(pstrBuffer);
	return TRUE;
}

POPFIND.cpp

#include<Windows.h>
#include<tchar.h>

#define MAX_STRING_LEN   256

static TCHAR szFindText[MAX_STRING_LEN];
static TCHAR szReplText[MAX_STRING_LEN];

HWND PopFindFindDlg(HWND hwnd)
{
	static FINDREPLACE fr;

	fr.lStructSize = sizeof(FINDREPLACE);
	fr.hwndOwner = hwnd;
	fr.hInstance = NULL;
	fr.Flags = FR_HIDEUPDOWN | FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD;
	fr.lpstrFindWhat = szFindText;
	fr.lpstrReplaceWith = NULL;
	fr.wFindWhatLen = MAX_STRING_LEN;
	fr.wReplaceWithLen = 0;
	fr.lCustData = 0;
	fr.lpfnHook = NULL;
	fr.lpTemplateName = NULL;
	return FindText(&fr);
}

HWND PopFindReplaceDlg(HWND hwnd)
{
	static FINDREPLACE fr;       // must be static for modeless dialog!!!

	fr.lStructSize = sizeof(FINDREPLACE);
	fr.hwndOwner = hwnd;
	fr.hInstance = NULL;
	fr.Flags = FR_HIDEUPDOWN | FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD;
	fr.lpstrFindWhat = szFindText;
	fr.lpstrReplaceWith = szReplText;
	fr.wFindWhatLen = MAX_STRING_LEN;
	fr.wReplaceWithLen = MAX_STRING_LEN;
	fr.lCustData = 0;
	fr.lpfnHook = NULL;
	fr.lpTemplateName = NULL;

	return ReplaceText(&fr);
}

BOOL PopFindFindText(HWND hwndEdit, int *piSearchOffset, LPFINDREPLACE pfr)
{
	int iLength, iPos;
	PTSTR pstrDoc, pstrPos;
	iLength = GetWindowTextLength(hwndEdit);
	if (NULL == (pstrDoc = (PTSTR)malloc((iLength + 1)*sizeof(TCHAR))))
	{
		return FALSE;
	}
	GetWindowText(hwndEdit, pstrDoc, iLength + 1);
	pstrPos = _tcsstr(pstrDoc + *piSearchOffset, pfr->lpstrFindWhat);
	free(pstrDoc);

	if (pstrPos == NULL)
		return FALSE;
	iPos = pstrPos - pstrDoc;
	*piSearchOffset = iPos + lstrlen(pfr->lpstrFindWhat);

	SendMessage(hwndEdit, EM_SETSEL, iPos, *piSearchOffset);
	SendMessage(hwndEdit, EM_SCROLLCARET, 0, 0);
	return TRUE;
}

BOOL PopFindNextText(HWND hwndEdit, int *piSearchOffset)
{
	FINDREPLACE fr;
	fr.lpstrFindWhat = szFindText;
	return PopFindFindText(hwndEdit, piSearchOffset, &fr);
}

BOOL PopFindReplaceText(HWND hwndEdit, int *piSearchOffset, LPFINDREPLACE pfr)
{
	if (!PopFindFindText(hwndEdit, piSearchOffset, pfr))
	{
		return FALSE;
	}
	SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM)pfr->lpstrReplaceWith);
	return TRUE;
}

BOOL PopFindValidFind(void)
{
	return *szFindText != '\0';
}

POPFONT.cpp

#include <Windows.h>

static LOGFONT logfont;
static HFONT   hFont;

BOOL PopFontChooseFont(HWND hwnd)
{
	CHOOSEFONT cf;

	cf.lStructSize = sizeof(CHOOSEFONT);
	cf.hwndOwner = hwnd;
	cf.hDC = NULL;
	cf.lpLogFont = &logfont;
	cf.iPointSize = 0;
	cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_EFFECTS;
	cf.rgbColors = 0;
	cf.lCustData = 0;
	cf.lpfnHook = NULL;
	cf.lpTemplateName = NULL;
	cf.hInstance = NULL;
	cf.lpszStyle = NULL;
	cf.nFontType = 0;               // Returned from ChooseFont
	cf.nSizeMin = 0;
	cf.nSizeMax = 0;

	return ChooseFont(&cf);
}

void PopFontInitialize(HWND hwndEdit)
{
	GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT),
		(PTSTR)&logfont);

	hFont = CreateFontIndirect(&logfont);
	SendMessage(hwndEdit, WM_SETFONT, (WPARAM)hFont, 0);
}

void PopFontSetFont(HWND hwndEdit)
{
	HFONT hFontNew;
	RECT  rect;

	hFontNew = CreateFontIndirect(&logfont);
	SendMessage(hwndEdit, WM_SETFONT, (WPARAM)hFontNew, 0);
	DeleteObject(hFont);
	hFont = hFontNew;
	GetClientRect(hwndEdit, &rect);
	InvalidateRect(hwndEdit, &rect, TRUE);
}

void PopFontDeinitialize(void)
{
	DeleteObject(hFont);
}

POPPRNT0.cpp

#include <windows.h>

BOOL PopPrntPrintFile(HINSTANCE hInst, HWND hwnd, HWND hwndEdit,
	PTSTR pstrTitleName)
{
	return FALSE;
}

poppad.rc

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"

/
#undef APSTUDIO_READONLY_SYMBOLS

/
// 中文(简体,中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)

#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""winres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/
//
// Dialog
//

ABOUTBOX DIALOGEX 32, 32, 183, 102
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,66,80,50,14
    ICON            "POPPAD",IDC_STATIC,7,7,20,20
    CTEXT           "PopPad",IDC_STATIC,40,12,100,8
    CTEXT           "Popup Editor for Windows",IDC_STATIC,7,40,175,8
    CTEXT           "(c) Charles Petzold,1998",IDC_STATIC,7,52,175,8
END

PRINTDLGBOX DIALOGEX 32, 32, 186, 95
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "PopPad"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    PUSHBUTTON      "Cancel",IDCANCEL,67,74,50,14
    CTEXT           "Seeding",IDC_STATIC,8,8,172,8
    CTEXT           "",IDC_FILENAME,8,28,172,8
    LTEXT           "tp print spooler",IDC_STATIC,8,48,172,8
END


/
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    "ABOUTBOX", DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 179
        TOPMARGIN, 7
        BOTTOMMARGIN, 88
    END

    "PRINTDLGBOX", DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 179
        TOPMARGIN, 7
        BOTTOMMARGIN, 88
    END
END
#endif    // APSTUDIO_INVOKED


/
//
// AFX_DIALOG_LAYOUT
//

ABOUTBOX AFX_DIALOG_LAYOUT
BEGIN
    0
END

PRINTDLGBOX AFX_DIALOG_LAYOUT
BEGIN
    0
END


/
//
// Menu
//

POPPAD MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&New\tCtrl+N",                IDM_FILE_NEW
        MENUITEM "&Open...\tCtrl+O",            IDM_FILE_OPEN
        MENUITEM "&Save\tCtrl+S",               IDM_FILE_SAVE
        MENUITEM "Save &As...",                 IDM_FILE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "&Print\tCtrl+P",              IDM_FILE_PRINT
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       IDM_APP_EXIT
    END
    POPUP "&Edit"
    BEGIN
        MENUITEM "&Undo\tCtrl+Z",               IDM_EDIT_UNDO
        MENUITEM SEPARATOR
        MENUITEM "Cu&t\tCtrl+X",                IDM_EDIT_CUT
        MENUITEM "&Copy\tCtrl+C",               IDM_EDIT_COPY
        MENUITEM "&Paste\tCtrl+V",              IDM_EDIT_PASTE
        MENUITEM "De&lete\tDel",                IDM_EDIT_CLEAR
        MENUITEM SEPARATOR
        MENUITEM "&Select All",                 IDM_EDIT_SELECT_ALL
    END
    POPUP "&Search"
    BEGIN
        MENUITEM "&Find...\tCtrl+F",            IDM_SEARCH_FIND
        MENUITEM "Find &Next\tF3",              IDM_SEARCH_NEXT
        MENUITEM "&Replace...\tCtrl+R",         IDM_SEARCH_REPLACE
    END
    POPUP "F&ormat"
    BEGIN
        MENUITEM "&Font",                       IDM_FORMAT_FONT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&Help",                       IDM_HELP
        MENUITEM "&About PopPad...",            IDM_APP_ABOUT
    END
END


/
//
// Accelerator
//

POPPAD ACCELERATORS
BEGIN
    VK_BACK,        IDM_EDIT_UNDO,          VIRTKEY, ALT, NOINVERT
    VK_DELETE,      IDM_EDIT_CLEAR,         VIRTKEY, NOINVERT
    VK_DELETE,      IDM_EDIT_CUT,           VIRTKEY, SHIFT, NOINVERT
    VK_F1,          IDM_HELP,               VIRTKEY, NOINVERT
    VK_F3,          IDM_SEARCH_NEXT,        VIRTKEY, NOINVERT
    VK_INSERT,      IDM_EDIT_COPY,          VIRTKEY, CONTROL, NOINVERT
    VK_INSERT,      IDM_EDIT_PASTE,         VIRTKEY, SHIFT, NOINVERT
    "^C",           IDM_EDIT_COPY,          ASCII,  NOINVERT
    "^F",           IDM_SEARCH_FIND,        ASCII,  NOINVERT
    "^N",           IDM_FILE_NEW,           ASCII,  NOINVERT
    "^O",           IDM_FILE_OPEN,          ASCII,  NOINVERT
    "^P",           IDM_FILE_PRINT,         ASCII,  NOINVERT
    "^R",           IDM_SEARCH_REPLACE,     ASCII,  NOINVERT
    "^S",           IDM_FILE_SAVE,          ASCII,  NOINVERT
    "^V",           IDM_EDIT_PASTE,         ASCII,  NOINVERT
    "^X",           IDM_EDIT_CUT,           ASCII,  NOINVERT
    "^Z",           IDM_EDIT_UNDO,          ASCII,  NOINVERT
END


/
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
POPPAD                  ICON                    "POPPAD.ICO"
#endif    // 中文(简体,中国) resources
/



#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
//


/
#endif    // not APSTUDIO_INVOKED

resource.h

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 HelloWorld.rc 使用
//
#define IDI_ICON1                       107
#define IDC_FILENAME                    1001
#define ID_FILE_NEW                     40001
#define ID_FILE_OPEN                    40002
#define ID_FILE_SAVE                    40003
#define ID_FILE_PRINT                   40004
#define ID_FILE_EXIT                    40005
#define ID_EDIT_UNDO                    40006
#define ID_EDIT_CUT                     40007
#define ID_EDIT_COPY                    40008
#define ID_EDIT_PASTE                   40009
#define ID_EDIT_DELETE                  40010
#define ID_Menu                         40011
#define ID_SEARCH_FIND                  40012
#define ID_SEARCH_FINDNEXT              40013
#define ID_SEARCH_REPLACE               40014
#define ID_FORMAT_FONT                  40015
#define ID_HELP_HELP                    40016
#define ID_HELP_ABOUTPOPPAD             40017
#define IDM_FILE_NEW                    40018
#define IDM_FILE_OPEN                   40019
#define IDM_FILE_SAVE                   40020
#define IDM_FILE_PRINT                  40021
#define IDM_APP_EXIT                    40022
#define ID_Menu40023                    40023
#define ID_Menu40024                    40024
#define ID_Menu40025                    40025
#define IDM_FILE_SAVE_AS                40026
#define IDM_EDIT_UNDO                   40027
#define IDM_EDIT_CUT                    40028
#define IDM_EDIT_COPY                   40029
#define IDM_EDIT_PASTE                  40030
#define IDM_EDIT_CLEAR                  40031
#define IDM_EDIT_SELECT_ALL             40032
#define IDM_SEARCH_FIND                 40033
#define IDM_SEARCH_NEXT                 40034
#define IDM_SEARCH_REPLACE              40035
#define IDM_FORMAT_FONT                 40036
#define IDM_HELP                        40037
#define IDM_APP_ABOUT                   40038

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        108
#define _APS_NEXT_COMMAND_VALUE         40056
#define _APS_NEXT_CONTROL_VALUE         1002
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值