再帖个上学期写的记事本程序

作者tag: vc技术 CSDN 推荐tag: 文件  文本  函数 
<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

/版权归 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来做东西,值得纪念下

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值