/版权归 lwanttowin所有/
所需头文件///
#include <windows.h>
#include <richedit.h>
#include <stdio.h>
#include <stdlib.h>
#include "resource.h"
/分配ID/
#define ID_EDITCHILD 1
#define HID_CONTENTS 2
/所需全局变量/
TCHAR szFindWhat[256]; //查找字符串
TCHAR szReplaceWhat[256]; //替换字符串
char lpchz[100]=""; //接受来自对话框的编辑框中的字符串
char *stop; //为函数strtol定义的终止字符指针
static int count=0; //lpchz转化成数字
/所需句柄/
HWND hdlg1; //关于对话框句柄
HWND hdlg2; //转到对话框话柄
HINSTANCE hInst;
HWND hWndEdit; //编辑控件句柄
HMENU hmenu; //菜单句柄
HWND hwndmain;
HWND g_hwndFind; //查找句柄
HWND g_hwndReplace; //替换句柄
HGLOBAL s_hDevMode = NULL;
HGLOBAL s_hDevNames = NULL;
LOGFONT s_lfSelected; //静态字体数据结构
CHARFORMAT2 fon;
HFONT font;
static FINDTEXT lpFindText;
static CHARRANGE chrg;
static CHARRANGE cr;
/所需结构体/
SYSTEMTIME lptime; //时间结构体数据结构
OPENFILENAME OpenFileName; //文件对话框数据结构
CHOOSEFONT ofn; //字体对话框数据结构
PRINTDLG pr; //打印对话框数据结构
FINDREPLACE ser,rep; //查找对话框数据结构
PAGESETUPDLG pag; //页面对话框数据结构
///所需函数/
void SaveTextFile(HWND hwnd, LPSTR lpszFileName); //编辑框到文件
void OpenTextFile(HWND hwnd, LPSTR lpszFileName); //文件到编辑框
void showfinddlg(HWND hwnd); //显示查找对话框
void showreplacedlg(HWND hwnd); //显示替换对话框
void showprintdlg(HWND hwnd); //显示打印对话框
void showviewdlg(HWND hwnd); //显示页面设置对话框
BOOL showfontdlg(HWND hwnd); //显示字体对话框
BOOL HandleFindReplaceMessage(LPFINDREPLACE lpFindReplace); //处理查找替换消息
BOOL ShowFileInfo(HWND hwnd, HDC hDC, HDROP hDropInfo); //拖放文件函数
BOOL EditBoxToClip1(HWND); //编辑框复制到剪切板
BOOL EditBoxToClip2(HWND); //编辑框剪切到剪切板
BOOL ClipToEditBox(HWND); //剪切板到编辑框
BOOL CALLBACK DlgProc1(HWND,UINT,WPARAM,LPARAM); //定义关于对话框窗口处理函数
BOOL CALLBACK DlgProc2(HWND,UINT,WPARAM,LPARAM); //定义转到对话框窗口处理函数
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //窗口的回调函数
UINT CALLBACK PagePaintHook(HWND, UINT, WPARAM, LPARAM); //页面程序挂接过程
/窗口的定义///
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG msg;
HACCEL hAccel;
WNDCLASS wndclass;
UINT uFindReplaceMsg;//message identifier for FINDMSGSTRING
uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);
char lpszMenuName[]="Menu";
char lpszClassName[]="记事本";
char lpszTitle[]="记事本";
LoadLibrary("riched20.dll");
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL, "WinIcon");
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = lpszClassName;
wndclass.lpszMenuName = lpszMenuName;
wndclass.style = 0;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd = CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
hInst = hInstance;
hAccel = LoadAccelerators(hInst, lpszMenuName);
while(GetMessage(&msg, NULL, 0, 0))
{
if(!IsDialogMessage(hdlg1, &msg)||!IsDialogMessage(hdlg2, &msg))
{
if((g_hwndFind == NULL || !IsDialogMessage(g_hwndFind, &msg))
&&(g_hwndReplace == NULL || !IsDialogMessage(g_hwndReplace, &msg))
&&(!TranslateAccelerator(hwnd, hAccel, &msg)))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
return msg.wParam;
}
窗口处理函数//
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HDC hDC;
// RECT rect;
BOOL bResult(FALSE);
// DWORD dPos;
hmenu = LoadMenu(hInst, "Menu");
static int flag2=0; //判断是否保存,若为0表示未保存
static int flag3=0; //若没有新建文件,若为0表示未新建
static int flag4=0; //判断是否有编辑控件有文本
// static int flag5=0; //判断是否换行,若为0表示未换行
static char lpstrFileName[]="";
static char szDirName[MAX_PATH]="";
static char szFile[MAX_PATH]="*.txt";
static char szFileTitle[MAX_PATH]="/0";
static char szFilter[] = "Text Files(*.TXT)/0*.txt/0"/
"All Files(*.*)/0*.*/0/0";
static char time[100]; //存放系统时间字符串
static int size;
static UINT uFindReplaceMsg;
uFindReplaceMsg=RegisterWindowMessage(FINDMSGSTRING);
if(message == uFindReplaceMsg)
{
LPFINDREPLACE lpFindReplace = (LPFINDREPLACE)lParam;
bResult = HandleFindReplaceMessage(lpFindReplace);
}
else
switch(message)
{
case WM_CREATE:
hWndEdit = CreateWindow(
RICHEDIT_CLASS,
// "Edit",
NULL,
WS_CHILD|WS_VISIBLE|WS_VSCROLL|
ES_LEFT|ES_MULTILINE|ES_AUTOVSCROLL|ES_NOHIDESEL,
0,
0,
0,
0,
hwnd,
(HMENU)ID_EDITCHILD,
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL);
DragAcceptFiles(hwnd,TRUE); //API函数:允许hWnd所指的窗口实现文件拖放
break;
case WM_SIZE:
MoveWindow(
hWndEdit,
0,
0,
LOWORD(lParam),
HIWORD(lParam),
TRUE);
break;
case WM_DROPFILES: //响应文件拖放消息
HDROP hDropInfo; //HDROP句柄,用以拖入文件的信息
hDropInfo = (HDROP)wParam;//初始化
hDC = GetDC(hwnd);
ShowFileInfo(hwnd, hDC, hDropInfo);
DragFinish(hDropInfo);
ReleaseDC(hwnd, hDC);
break;
case WM_INITMENUPOPUP:
if((BOOL)HIWORD(lParam))//如果是系统菜单,则不做检查
break;
//检查是否可以进行撤消操作,并由此设置菜单项的状态
if(SendMessage(hWndEdit, EM_CANUNDO, 0 ,0))
EnableMenuItem(GetMenu(hwnd), IDM_EDITUNDO, MF_BYCOMMAND|MF_ENABLED);
else
EnableMenuItem(GetMenu(hwnd), IDM_EDITUNDO, MF_BYCOMMAND|MF_GRAYED);
检查是否可以进行粘贴操作,并由此设置菜单项的状态/
if(SendMessage(hWndEdit,EM_CANPASTE,0,0))
EnableMenuItem(GetMenu(hwndmain), IDM_EDITPASTE, MF_BYCOMMAND|MF_ENABLED);
else
EnableMenuItem(GetMenu(hwndmain), IDM_EDITPASTE, MF_BYCOMMAND|MF_GRAYED);
break;
case WM_CONTEXTMENU:
POINT pt;
GetCursorPos(&pt);
TrackPopupMenuEx(GetSubMenu(hmenu, 1), TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_HORIZONTAL, pt.x, pt.y, hwnd, NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_NEW:
flag2=0;//表示未保存
flag3=1;//表示已新建
SendMessage(hWndEdit, WM_SETTEXT, 0, NULL);
break;
case IDM_OPEN:
//设置打开对话框//
if(flag2 == 0)
{
int t;
t=MessageBox(NULL,"文件还未保存,是否要保存?","提示",MB_YESNOCANCEL|MB_ICONINFORMATION);
if(t == IDYES)
{
SendMessage(hwnd, WM_COMMAND, IDM_SAVE, 0L);
}
else if(t==IDCANCEL)
{
break;
}
}
OpenFileName.nFileExtension = 0;
OpenFileName.nFileOffset = 0;
OpenFileName.nFilterIndex = 1;
OpenFileName.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
OpenFileName.hInstance = hInst;
OpenFileName.hwndOwner = hwnd;//窗口句柄
OpenFileName.lCustData = 0;
OpenFileName.lpfnHook = NULL;
OpenFileName.lpstrCustomFilter = (LPTSTR)NULL;
OpenFileName.lpstrDefExt = NULL;
OpenFileName.lpstrFile = szFile;
OpenFileName.lpstrDefExt = NULL;
OpenFileName.lpstrFileTitle = 0;
OpenFileName.lpstrFilter = szFilter;
OpenFileName.lpstrInitialDir = NULL;
OpenFileName.lpstrTitle = "请选取一个文本文件";
OpenFileName.lpTemplateName = NULL;
OpenFileName.lStructSize = sizeof(OPENFILENAME);
OpenFileName.nMaxCustFilter = 0L;
OpenFileName.nMaxFile = sizeof(szFile);
OpenFileName.nMaxFileTitle = sizeof(szFileTitle);
if (GetOpenFileName(&OpenFileName)==TRUE)
{
OpenTextFile(hwnd, szFile);
flag2=0;//表示未保存
}
break;
case IDM_SAVE:
设置"另存为"对话框///
if(flag2 ==0)
{
OpenFileName.lStructSize = sizeof(OPENFILENAME);
OpenFileName.Flags = OFN_OVERWRITEPROMPT;
OpenFileName.hInstance = hInst;
OpenFileName.hwndOwner = hwnd;
OpenFileName.lCustData = 0;
OpenFileName.lpfnHook =NULL;
OpenFileName.lpstrCustomFilter = (LPTSTR)NULL;
OpenFileName.lpstrDefExt =NULL;
OpenFileName.lpstrFile =szFile;
OpenFileName.lpstrFileTitle = szFileTitle;
OpenFileName.lpstrFilter = szFilter;
OpenFileName.lpstrInitialDir =NULL;
OpenFileName.lpstrTitle = "另存为";
OpenFileName.lpTemplateName = NULL;
OpenFileName.nFileExtension = 0;
OpenFileName.nFileOffset = 0;
OpenFileName.nFilterIndex = 1L;
OpenFileName.nMaxCustFilter =0;
OpenFileName.nMaxFile = sizeof(szFile);
OpenFileName.nMaxFileTitle = sizeof(szFileTitle);
GetSaveFileName(&OpenFileName);
}
SaveTextFile(hwnd, szFile); //文件到编辑框
flag2=1; //表示已保存
flag3=0; //表示未新建
break;
case IDM_CLOSE:
break;
case IDM_EXIT:
SendMessage(hwnd, WM_DESTROY, 0, 0);
break;
case IDM_DELETE:
SendMessage(hWndEdit, WM_SETTEXT, 0, NULL);
break;
case IDM_EDITUNDO:
SendMessage(hWndEdit, WM_UNDO, 0, 0);
break;
case IDM_EDITCUT:
EditBoxToClip2(hwnd);
break;
case IDM_EDITCOPY:
EditBoxToClip1(hwnd);
break;
case IDM_EDITPASTE:
ClipToEditBox(hwnd);
break;
case IDM_EDITSELECTALL:
SendMessage(hWndEdit, EM_SETSEL, 0, -1);
break;
case IDM_TIME:
GetSystemTime(&lptime);
/**********************************************
int GetTimeFormat(
LCID Locale,----------选择地区时间
DWORD dwFlags,------------选择时间模式
CONST SYSTEMTIME *lpTime,-------------指向SYSTEM结构体指针
LPCTSTR lpFormat,----------时间形式
LPTSTR lpTimeStr,----------转换保存的数组
int cchTime---------------数组大小
);
*************************************************/
GetTimeFormat(LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE, &lptime, NULL, time, 100);
SendMessage(hWndEdit, WM_SETTEXT, 0, (LPARAM)time);
break;
case IDM_FONT:
showfontdlg(hwnd);
break;
case IDM_HELP:
/*********************************************
BOOL WinHelp(
HWN D hWndMain,----------窗口句柄
LPCTSTR lpszHelp,------.HLP文件名
UINT uCommand,----------标记(详见MSDN)
DWORD dwData------------.RTF文档内容ID
);
**********************************************/
WinHelp(hwnd,"703.hlp",HELP_FINDER,HID_CONTENTS);
break;
case ID_ABOUT:
hdlg1=CreateDialog(hInst, "ABOUT", hwnd, (DLGPROC)DlgProc1);
break;
case IDM_PRINT:
showprintdlg(hwnd);
break;
case IDM_SEARCH:
chrg.cpMin = 0;
chrg.cpMax = -1;
showfinddlg(hwnd);
break;
case IDM_REPLACE:
chrg.cpMin = 0;
chrg.cpMax = -1;
showreplacedlg(hwnd);
break;
case ID_SEARCHNEXT:
break;
case IDM_TRUN:
hdlg2=CreateDialog(hInst, "MOVE", hwnd, (DLGPROC)DlgProc2);
break;
case IDM_ROW:
hmenu=GetMenu(hwnd);
/***********************************************
UINT GetMenuState(
HMENU hMenu;
UINT uId;
UINT uFlags
);
----------------若没有uFlags所对应菜单项的属性,
则次函数返回的的值为0xFFFFFFFF。
***********************************************/
if(!GetMenuState(hmenu, IDM_ROW, MF_CHECKED))
{
CheckMenuItem(hmenu, IDM_ROW, MF_CHECKED);
}
else
{
CheckMenuItem(hmenu, IDM_ROW, MF_UNCHECKED);
}
DrawMenuBar(hwnd);
SendMessage(hWndEdit, EM_SETOPTIONS, (WPARAM)(UINT)ECOOP_OR, (LPARAM)(UINT)ECO_AUTOVSCROLL);
break;
case ID_SETVIEW:
showviewdlg(hwnd);
break;
}
break;
case WM_CLOSE:
flag4 = SendMessage(hWndEdit, WM_GETTEXTLENGTH, 0,0L);
if(flag2 == 0 && flag4 !=0)//未保存
{
int t;
t=MessageBox(NULL,"文件还未保存,是否要保存?","提示",MB_YESNOCANCEL|MB_ICONINFORMATION);
if(t == IDYES)
{
SendMessage(hwnd, WM_COMMAND, IDM_SAVE, 0L);
DestroyWindow(hwnd);//毁灭窗口
break;
}
else if(t==IDCANCEL)
{
break;
}
}
DestroyWindow(hwnd);
break;
case WM_DESTROY:
DragAcceptFiles(hwnd,FALSE);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
/*********************************************************************************************
函数定义
**********************************************************************************************/
///打开文件/
void OpenTextFile(HWND hwnd, LPSTR lpszFileName)
{
HANDLE hFile;
DWORD dwFileSize, dwBytesRead;
char *lpBufPtr;
/打开指定文件
hFile = CreateFile(
lpszFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE)NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
检取文件字节大小///
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
分配用来读入文件的缓冲区//
lpBufPtr = (char *)malloc(dwFileSize);
if(lpBufPtr != NULL)
{
//把文件内容读入缓冲区/
ReadFile(hFile, (LPVOID)lpBufPtr,
dwFileSize, &dwBytesRead, NULL);
if(dwBytesRead != 0)
{
//把文件内容装入多行编辑控件中///
SendMessage(hWndEdit, WM_SETTEXT, 0, (LPARAM)lpBufPtr);
SetWindowText(hwnd, lpszFileName);
}
else
MessageBox(hwnd, "读入字节数为零", NULL, MB_OK|MB_ICONEXCLAMATION);
free(lpBufPtr);
}
else
MessageBox(NULL, "内存分配失败!", NULL, MB_OK|MB_ICONEXCLAMATION);
}
else
MessageBox(NULL, "检取文件大小失败", NULL, MB_OK|MB_ICONEXCLAMATION);
}
CloseHandle(hFile);
}
//保存文件
void SaveTextFile(HWND hwnd, LPSTR lpszFileName)
{
HANDLE hFile;
DWORD dwFileSize, dwBytesWrite;
char *lpBufPtr;
//创建文件
hFile= CreateFile(
lpszFileName,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
(HANDLE)NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
//检取文件字节大小
dwFileSize = SendMessage(hWndEdit, WM_GETTEXTLENGTH, 0, 0);
if(dwFileSize != 0)
{
//分配文件到缓冲区
lpBufPtr = (char *)malloc(dwFileSize);
if(dwFileSize != 0)
{
//编辑控件中的内容装入到文件缓冲区
SendMessage(hWndEdit, WM_GETTEXT, dwFileSize, (LPARAM)lpBufPtr);
//把文件缓冲区中的数据存写到文件中
WriteFile(hFile, (LPVOID)lpBufPtr, dwFileSize, &dwBytesWrite, NULL);
SetWindowText(hwnd, lpszFileName);
free(lpBufPtr);
}
else MessageBox(NULL, "内存分配失败", NULL, MB_OK|MB_ICONEXCLAMATION);
}
else MessageBox(NULL, "编辑控件内容为空", NULL, MB_OK|MB_ICONEXCLAMATION);
CloseHandle(hFile);
}
}
//编辑框到剪切板//
BOOL EditBoxToClip1(HWND hwnd)
{
LPTSTR lpCopyStr, lpText;
HANDLE hText;
DWORD dPos;
WORD wStart, wEnd;
char *lpBufPtr;
DWORD dwFileSize;//文本大小
//得到选中的文本位置
dPos = SendMessage(hWndEdit, EM_GETSEL, NULL, NULL);
wEnd=HIWORD(dPos);
wStart=LOWORD(dPos);
//获得文本框中文本长度
dwFileSize = SendMessage(hWndEdit, WM_GETTEXTLENGTH, 0,0L)+1;
lpBufPtr = (char *)malloc(dwFileSize + 2);//开辟文件缓冲区
if(lpBufPtr != NULL)
{ //读取文本
SendMessage(hWndEdit, WM_GETTEXT, dwFileSize, (LPARAM)lpBufPtr);
//截取我们选中的文本
lpCopyStr = lpBufPtr + wStart;
*(lpCopyStr + (wEnd - wStart))='/0';
}
else
{
MessageBox(hwnd, "内存分配失败","", MB_OK|MB_ICONEXCLAMATION);
return 0;
}
if(!(hText = GlobalAlloc(GHND, wEnd-wStart+1)))
{
MessageBox(hwnd, "全局内存分配失败","",MB_OK);
return 0;
}
//复制文本到全局内存
lpText = (LPTSTR)GlobalLock(hText); //锁定文本内存句柄并返回文本指针
lstrcpy(lpText, lpCopyStr);//拷贝文本
GlobalUnlock(hText);//解锁全局内存
if(!OpenClipboard(hwnd))
{
MessageBox(hwnd, "剪切板打开失败!","提示", MB_OK);
return 0;
}
EmptyClipboard();//清除剪切板
SetClipboardData(CF_TEXT, hText);//设置剪切板文本
CloseClipboard();//关闭剪切板
hText=NULL;
return 1;
}
/编辑框到剪切板///
BOOL EditBoxToClip2(HWND hwnd)
{
EditBoxToClip1(hwnd);
SendMessage(hWndEdit, EM_REPLACESEL, 1, (LPARAM)"");//清空
return 1;
}
从剪切板到编辑框//
BOOL ClipToEditBox(HWND hwnd)
{
LPTSTR lpPasteStr, lpText;
HANDLE hText;
//得到文本位置
if(!(IsClipboardFormatAvailable(CF_TEXT)))
{
MessageBox(hwnd,"剪切板上无文本数据","提示",MB_OK);
return 0;
}
if(!OpenClipboard(hwnd))
{
MessageBox(hwnd, "剪切板打开失败","提示",MB_OK);
return 0;
}
//获取剪切板文本内存句柄
if(!(hText=GetClipboardData(CF_TEXT)))
{
MessageBox(hwnd, "无法读取剪切板数据","提示", MB_OK);
return 0;
}
lpText = (LPTSTR)GlobalLock(hText);
//复制剪切板文本内容
lpPasteStr = (LPTSTR)malloc(GlobalSize(hText));
lstrcpy(lpPasteStr, lpText);
GlobalUnlock(hText);//解锁文本内存句柄
CloseClipboard();//关闭剪切板
//粘贴
SendMessage(hWndEdit, EM_REPLACESEL, 1, (LPARAM)lpPasteStr);
return 1;
}
显示拖动文件信息
BOOL ShowFileInfo(HWND hwnd, HDC hdc, HDROP hDropInfo)
{
WORD nums;
char lpszFileName[200];
/***************************************************************
DragQueryFile(HDROP hDrop,-----指向拖动文件结构的句柄
UINT iFile,------被拖动文件的序号,参数设为0xFFFFFFFF,则函数返回拖动文件的个数
LPTSTR lpszFile,-----指向文件名的缓冲区
UINT cch-----是文件名缓冲区的大小,即文件名的字符数
)
********************************************************************/
//返回拖入的文件数目
nums = DragQueryFile(hDropInfo, (UINT)0xFFFFFFFF, (LPTSTR)NULL, 0);
if(nums > 1)
{
return FALSE;
}
else
{
DragQueryFile(hDropInfo, 0 ,lpszFileName, sizeof(lpszFileName));
}
// MessageBox(hwnd, lpszFileName, NULL, MB_OK|MB_ICONEXCLAMATION);
///将文件内容到编辑框/
OpenTextFile(hwnd, lpszFileName);
return 1;
}
BOOL showfontdlg(HWND hwnd)
{
ZeroMemory(&ofn, sizeof(ofn));
ofn.lpLogFont = &s_lfSelected;
ofn.hwndOwner = hwnd;
ofn.lStructSize = sizeof(ofn);
ofn.hInstance = hInst;
ofn.nFontType =ITALIC_FONTTYPE;
/****************************************************************
CF_EFFECTS-----创建的对话框具有删除、下划线和文本颜色控件
CF_SCREENFONTS------标记允许用户从屏幕上可用的字体中进行选择
CF_FORCEFONTEXIST-----指定用户不能选择不存在的姿态
*****************************************************************/
ofn.Flags = CF_SCREENFONTS;
ofn.nSizeMax = 0;
ofn.nSizeMin = 0;
ofn.rgbColors = RGB(0,0,0);
ChooseFont(&ofn);
//用户选择某个字体
//所选的字体属性保存在s_lfSelected静态变量中
fon.dwMask = CFM_CHARSET|CFM_WEIGHT|CFM_SIZE;
fon.cbSize = sizeof(CHARFORMAT2);
fon.yHeight = (s_lfSelected.lfHeight)*25;
fon.bCharSet = s_lfSelected.lfCharSet;
fon.bPitchAndFamily = s_lfSelected.lfPitchAndFamily;
fon.wWeight = s_lfSelected.lfWeight;
//发送字体消息到控件
SendMessage(hWndEdit, EM_SETCHARFORMAT, (WPARAM)SCF_ALL, (LPARAM)&fon);
return 1;
}
void showfinddlg(HWND hwnd)
{
ZeroMemory(&ser, sizeof(ser));
ser.lpstrFindWhat = szFindWhat;
ser.lpstrReplaceWith = NULL;
ser.wReplaceWithLen = 0;
ser.wFindWhatLen = 256;
ser.hInstance = NULL;
ser.hwndOwner = hwnd;
ser.lStructSize = sizeof(ser);
ser.Flags = FR_DOWN;
g_hwndFind=FindText(&ser);
}
void showreplacedlg(HWND hwnd)
{
ZeroMemory(&rep, sizeof(rep));
rep.lpstrFindWhat = szFindWhat;
rep.lpstrReplaceWith = szReplaceWhat;
rep.wReplaceWithLen = 256;
rep.wFindWhatLen = 256;
rep.hInstance = hInst;
rep.hwndOwner = hwnd;
rep.lStructSize = sizeof(rep);
rep.Flags = FR_DOWN;
g_hwndReplace = ReplaceText(&rep);
}
void showprintdlg(HWND hwnd)
{
ZeroMemory(&pr, sizeof(pr));
pr.hInstance = hInst;
pr.hwndOwner = hwnd;
pr.lStructSize = sizeof(pr);
pr.Flags = PD_ALLPAGES|PD_COLLATE|PD_NOPAGENUMS;
pr.nFromPage = 0xFFFF;
pr.nToPage = 0xFFFF;
pr.nMinPage = 1;
pr.nMaxPage = 0xFFF;
pr.nCopies = 1;
pr.hDevMode = s_hDevMode;
pr.hDevNames = s_hDevNames;
BOOL bReturn = PrintDlg(&pr);
if(bReturn)
{
//分配DEVMODE的全局句柄,并复制DEVMODE数
DEVMODE *pDefaultDevMode = (DEVMODE*)GlobalLock(pr.hDevMode);
s_hDevMode = GlobalAlloc(GHND, GlobalSize(pr.hDevMode));
DEVMODE *pDevMode = (DEVMODE *)GlobalLock(s_hDevMode);
memcpy(pDevMode, pDefaultDevMode, GlobalSize(pr.hDevMode));
GlobalUnlock(s_hDevMode);
GlobalUnlock(pr.hDevMode);
}
else
{
DWORD dwError = CommDlgExtendedError();
}
}
void showviewdlg(HWND hwnd)
{
ZeroMemory(&pag, sizeof(pag));
/********************************************
PSD_INTHOUSANDTHSOFINCHES标记表示页边距和纸张大小成员是以1/1000英寸为单位
PSD_MARGINS标记使通用对话框库使用rtMargin成员作为初始的页边距值
PSD_ENABLEPAGEPAINTHOOK启动lpfnPageSetupHook指定的PagePaintHook()过程
*******************************************/
pag.hDevMode = s_hDevMode;
pag.hDevNames = s_hDevNames;
pag.ptPaperSize.x = 0;
pag.ptPaperSize.y = 0;
pag.rtMinMargin.top = 50;
pag.rtMinMargin.left = 50;
pag.rtMinMargin.right = 50;
pag.rtMinMargin.bottom = 50;
pag.rtMargin.right = 1000;
pag.rtMargin.bottom = 1000;
pag.rtMargin.left = 1000;
pag.rtMargin.top = 1000;
pag.hInstance = NULL;
pag.hwndOwner = hwnd;
pag.lStructSize = sizeof(pag);
pag.Flags = PSD_INTHOUSANDTHSOFINCHES|PSD_ENABLEPAGEPAINTHOOK|PSD_MARGINS;
pag.lpfnPagePaintHook = PagePaintHook;
pag.lpfnPageSetupHook = NULL;
PageSetupDlg(&pag);
}
//关于对话框消息处理函数/
BOOL CALLBACK DlgProc1(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return 1;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
DestroyWindow(hdlg1);
return 1;
case IDCANCEL:
DestroyWindow(hdlg1);
return 1;
}
break;
case WM_CLOSE:
DestroyWindow(hdlg1);
return 1;
}
return 0;
}
//转到对话框消息处理函数/
BOOL CALLBACK DlgProc2(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int i;
switch(message)
{
case WM_INITDIALOG:
return 1;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
GetDlgItemText(hdlg2, IDC_EDIT1, lpchz, 101);
count = strtol(lpchz, &stop, 10);
for(i=0; i<count; i++)
SendMessage(hWndEdit, WM_KEYDOWN, (WPARAM)VK_DOWN, NULL);
SendMessage(hWndEdit, WM_SETFOCUS, 0, 0L);
DestroyWindow(hdlg2);
return 1;
case IDCANCEL:
DestroyWindow(hdlg2);
return 1;
}
break;
case WM_CLOSE:
DestroyWindow(hdlg2);
return 1;
}
return 0;
}
处理查找替换消息//
BOOL HandleFindReplaceMessage(LPFINDREPLACE lpFindReplace)
{
BOOL bReturn(FALSE);
int i=0;
int Pos=0;
/***************************************************************
FR_DIALOGTERM--------指定对话框正在关闭。与FINDMSGSTRING注册消息一起使用
FR_DOWN--------------指定选择了DOWN搜索方向的单选按钮
FR_NEXT--------------指定用户单击了查找下一处按钮。与FINDMSGSTRING注册消息一起使用
FR_REPLACE-----------指定用户单击了替换按钮。与FINDMSGSTRING注册消息一起使用
FR_REPLACEALL--------指定用户单击了替换全部按钮。与FINDMSGSTRING注册消息一起使用
****************************************************************/
if((lpFindReplace->Flags&FR_DIALOGTERM) == FR_DIALOGTERM)
{
//关闭对话框
g_hwndFind = NULL;
g_hwndReplace = NULL;
//当CHARRANGE中cpMin(0),cpMax(-1)时为全选内容
chrg.cpMin = 0;
chrg.cpMax = -1;
bReturn = TRUE;
}
//lpstrFindWhat
//lpstrReplaceWith
else if((lpFindReplace->Flags&FR_FINDNEXT) == FR_FINDNEXT)
{
初始化///
lpFindText.lpstrText = szFindWhat; //将FINDTEXT结构体中的lpstrText赋上要查找的字符串
lpFindText.chrg = chrg;
//得到查找字符串的长度/
while(szFindWhat[i] != '/0')
{
i++;
}
//Pos为取得匹配字符串的位置
Pos = SendMessage(hWndEdit, EM_FINDTEXT, (WPARAM)FR_DOWN, (LPARAM)&lpFindText);
chrg.cpMin = Pos+i; //将下次寻找范围缩小
chrg.cpMax = -1;
lpFindText.chrg = chrg;
cr.cpMin = Pos; //得到当前匹配字符串的首位置
cr.cpMax = Pos + i; //字符串的末位置
//高亮显示选中字消息/
SendMessage((HWND)hWndEdit, EM_EXSETSEL, (WPARAM)0, (LPARAM)(CHARRANGE FAR *)&cr);
if(Pos == -1)
MessageBox(hwndmain, "已经到了文本结尾,无法进行查找了", "", MB_OK);
bReturn = TRUE;
}
else if((lpFindReplace->Flags&FR_REPLACE) == FR_REPLACE)
{
lpFindText.lpstrText = szFindWhat;
lpFindText.chrg = chrg;
while(szFindWhat[i] != '/0')
{
i++;
}
Pos = SendMessage(hWndEdit, EM_FINDTEXT, (WPARAM)FR_DOWN, (LPARAM)&lpFindText);
if(Pos == -1)
MessageBox(hwndmain, "已经到了文本结尾,无法进行查找了", "", MB_OK);
chrg.cpMin = Pos+i;
chrg.cpMax = -1;
lpFindText.chrg = chrg;
cr.cpMin = Pos;
cr.cpMax = Pos + i;
SendMessage((HWND)hWndEdit, EM_EXSETSEL, (WPARAM)0, (LPARAM)(CHARRANGE FAR *)&cr);
//替换消息//
SendMessage(hWndEdit, EM_REPLACESEL, (WPARAM)0, (LPARAM)&szReplaceWhat);
bReturn = TRUE;
}
else if((lpFindReplace->Flags&FR_REPLACEALL) == FR_REPLACEALL)
{
lpFindText.lpstrText = szFindWhat;
while(szFindWhat[i] != '/0')
{
i++;
}
while(1)
{
lpFindText.chrg = chrg;
Pos = SendMessage(hWndEdit, EM_FINDTEXT, (WPARAM)FR_DOWN, (LPARAM)&lpFindText);
if(Pos == -1)
break;
chrg.cpMin = Pos+i;
chrg.cpMax = -1;
lpFindText.chrg = chrg;
cr.cpMin = Pos;
cr.cpMax = Pos + i;
SendMessage(hWndEdit, EM_REPLACESEL, (WPARAM)0, (LPARAM)&szReplaceWhat);
bReturn = TRUE;
}
}
return bReturn;
}
UINT CALLBACK PagePaintHook(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL bReturn(FALSE);
switch(uMsg)
{
//绘制边界矩形
case WM_PSD_MARGINRECT://当对话框准备绘制打印测试页时发送。
//wParam为纸张大小和方向。lParam指向PAGESETUPDLG结构
{
//获得边界矩形
HDC hdc=(HDC)wParam;
LPRECT lprc=(LPRECT)lParam;
//获得系统加亮区颜色
COLORREF crMargRect = GetSysColor(COLOR_HIGHLIGHT);
//创建系统加亮区的点化线画笔,并选入显示页的DC中
HPEN hpen = (HPEN)SelectObject(hdc, CreatePen(PS_DASHDOT, 1, crMargRect));
//绘制边界矩形
Rectangle(hdc, lprc->left, lprc->top, lprc->right, lprc->bottom);
//恢复DC的原来画笔
SelectObject(hdc, hpen);
bReturn=TRUE;
}
break;
default:
{
bReturn = FALSE;
}
break;
}
return bReturn;
}
其中帮助文档部分暂时不能上传,这是我第一次用VC来做东西,值得纪念下