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

📄 edit.cpp

📁 文本编辑器是最简单的VC程序
💻 CPP
字号:
// edit.cpp: implementation of the edit class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "myeditor.h"
#include "edit.h"
#include "commdlg.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

edit::edit()
{

}

edit::~edit()
{

}

void edit::gethwnd(HWND hwnd)                                      //获得主窗口句柄,参数为主窗口句柄
{
   hWnd=hwnd;
}

void edit::gethwndedit(HWND hwnd)                                  //获得编辑框句柄,参数为编辑框句柄
{
    hWndEdit=hwnd;
}

void edit::FontInitialize (HWND hWndEdit)                          //字体初始化,参数为编辑框句柄
{
    GetObject (GetStockObject (DEFAULT_GUI_FONT), sizeof (LOGFONT), 
            (PTSTR) &logfont) ;

    hFont = CreateFontIndirect (&logfont) ;

    SendMessage (hWndEdit, WM_SETFONT, (WPARAM) hFont, 0) ;

}



void edit::FileInitialize (OPENFILENAME *ofn)                             //初始化OPENFILENAME结构,参数为OPENFILENAME结构体指针
{
 static TCHAR szFilter[] = TEXT ("文本文件 (*.txt)\0*.txt\0")  \
                           TEXT ("所有文件 (*.*)\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 ;          
    ofn->nMaxFile          = MAX_PATH ;
    ofn->lpstrFileTitle    = NULL ;          
    ofn->nMaxFileTitle     = MAX_PATH ;
    ofn->lpstrInitialDir   = NULL ;
    ofn->lpstrTitle        = NULL ;
    ofn->Flags             = 0 ;             
    ofn->nFileOffset       = 0 ;
    ofn->nFileExtension    = 0 ;
    ofn->lpstrDefExt       = TEXT ("txt") ;
    ofn->lCustData         = 0L ;
    ofn->lpfnHook          = NULL ;
    ofn->lpTemplateName    = NULL ;
}

//处理打开对话框,参数为OPENFILENAME结构体指针、文件名字符串指针和带路径文件名字符串指针,返回打开操作是否完成的BOOL值
BOOL edit::FileOpenDlg (OPENFILENAME *ofn, PTSTR pstrFileName, PTSTR pstrTitleName)  
{
    ofn->hwndOwner         = hWnd ;
    ofn->lpstrFile         = pstrFileName ;
    ofn->lpstrFileTitle    = pstrTitleName ;
    ofn->Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
      
    return GetOpenFileName (ofn) ; 
}
//处理另存为对话框,参数为OPENFILENAME结构体指针、文件名字符串指针和带路径文件名字符串指针,返回另存为操作是否完成的BOOL值
BOOL edit::FileSaveDlg (OPENFILENAME *ofn, PTSTR pstrFileName, PTSTR pstrTitleName)  
{
 
    ofn->hwndOwner         = hWnd ;
    ofn->lpstrFile         = pstrFileName ;
    ofn->lpstrFileTitle    = pstrTitleName ;
    ofn->Flags             = OFN_OVERWRITEPROMPT ;
   
    return GetSaveFileName (ofn) ;
 
}

//文件读取并在编辑框中显示,参数为指向文件的指针,返回是否打开文件成功
BOOL edit::FileRead ( PTSTR hFile)                                                  
{
    HANDLE hBuffer;
    LPSTR pBuffer;
	long lPos1,lPos2;
	int iFile;
    //打开文件
	iFile=_lopen(hFile,OF_READ);
    //判断所需缓存大小
	lPos1=_llseek(iFile,0l,1);
	lPos2=_llseek(iFile,0l,2);
	_llseek(iFile,lPos1,0);
    //分配缓冲区
	hBuffer = LocalAlloc(LMEM_MOVEABLE|LMEM_ZEROINIT,lPos2+1);
	//判断是否分配成功
	if ( hBuffer==NULL ) return FALSE;
	pBuffer=(LPSTR)LocalLock(hBuffer);
    _lread(iFile,pBuffer,(WORD)lPos2);				
	_lclose(iFile);
    pBuffer[(WORD)lPos2] = '\0' ;
	SetWindowText (hWndEdit, (PTSTR) pBuffer) ;
    LocalUnlock(hBuffer) ;
	LocalFree(pBuffer);
	return TRUE;
}		
				    
//文件写入操作,参数为指向文件的指针,返回是否写入文件成功 
BOOL edit::FileWrite ( PTSTR pstrFileName)                                                                                
{
    LPSTR pBuffer;
	HANDLE hBuffer;
    int hFile;
	long iLength;
    OFSTRUCT OfStruct;   
	//判断所需缓存大小
	iLength = GetWindowTextLength (hWndEdit) ;
    //分配缓冲区
	hBuffer = LocalAlloc(LMEM_MOVEABLE|LMEM_ZEROINIT , iLength+2);
	//判断是否分配成功
	if ( hBuffer==NULL ) return FALSE;                                                
	pBuffer = (LPSTR)LocalLock(hBuffer);
    GetWindowText (hWndEdit, pBuffer, iLength + 1) ;
    hFile=OpenFile(pstrFileName, &OfStruct, OF_CREATE|OF_WRITE);
    //写入文件
	_lwrite(hFile, pBuffer, iLength);
	_lclose(hFile);

    return TRUE;
}

//处理字体对话框并改变字体,参数为CHOOSEFONT结构体指针,HFONT变量和表示文件是否被编辑的变量指针
void edit::SetFont(CHOOSEFONT *cf, HFONT hSetFont, BOOL *fChange)                   
{
    cf->lStructSize=sizeof(CHOOSEFONT);
    cf->hwndOwner=hWndEdit;
    cf->lpLogFont=&lf;
    cf->rgbColors=RGB(0,0,0);
    cf->nFontType=SCREEN_FONTTYPE;
    cf->hDC            = NULL ;
    cf->iPointSize     = 0 ;
    cf->Flags          = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_EFFECTS ;
    cf->lCustData      = 0 ;
    cf->lpfnHook       = NULL ;
    cf->lpTemplateName = NULL ;
    cf->hInstance      = NULL ;
    cf->lpszStyle      = NULL ;
    cf->nFontType      = 0 ;   
    cf->nSizeMin       = 0 ;
    cf->nSizeMax       = 0 ;
    if (ChooseFont(cf))
	{
	hDC=GetDC(hWnd);
	hSetFont=CreateFontIndirect(cf->lpLogFont);
   	SelectObject(hDC,hSetFont);
	SetTextColor(hDC,cf->rgbColors);	
	SendMessage (hWndEdit, WM_SETFONT, (WPARAM) hSetFont, 1) ;
	GetClientRect (hWndEdit, &rect) ;
    InvalidateRect (hWndEdit, &rect, TRUE) ;
    *fChange=TRUE;                                                        //标记为已修改
	}
}

//处理查找对话框,参数为指向FINDREPLACE的指针,返回查找消息句柄
HWND edit::FindFindDlg (LPFINDREPLACE pfr)                                
{    
     pfr->lStructSize      = sizeof (FINDREPLACE) ;
     pfr->hwndOwner        = hWnd ;
     pfr->hInstance        = NULL ;
     pfr->Flags            = FR_HIDEUPDOWN ;
     pfr->lpstrFindWhat    = szFindText ;
     pfr->lpstrReplaceWith = NULL ;
     pfr->wFindWhatLen     = sizeof(szFindText);
     pfr->wReplaceWithLen  = 0 ;
     pfr->lCustData        = 0 ;
     pfr->lpfnHook         = NULL ;
     pfr->lpTemplateName   = NULL ;

     return  FindText (pfr) ;
}

//处理查找对话框,参数为指向FINDREPLACE的指针,返回替换消息句柄
HWND edit::FindReplaceDlg (LPFINDREPLACE pfr)                              
{    
     pfr->lStructSize      = sizeof (FINDREPLACE) ;
     pfr->hwndOwner        = hWnd ;
     pfr->hInstance        = NULL ;
     pfr->Flags            = FR_HIDEUPDOWN  ;
     pfr->lpstrFindWhat    = szFindText ;
     pfr->lpstrReplaceWith = szReplText ;
     pfr->wFindWhatLen     = sizeof(szFindText) ;
     pfr->wReplaceWithLen  = sizeof(szReplText) ;
     pfr->lCustData        = 0 ;
     pfr->lpfnHook         = NULL ;
     pfr->lpTemplateName   = NULL ;
 
	 return   ReplaceText (pfr) ;
}

//查找的实现,参数为查找字符串的长度变量的指针,指向FINDREPLACE的指针,返回查找是否成功
BOOL edit::FindFindText ( int * piSearchOffset, LPFINDREPLACE pfr)          
{

     pfr->lpstrFindWhat = szFindText    ;
     // 读档
     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) ;
     
     // 如果没找到则返回FALSE
     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 ;
}


//查找下一个,参数为查找字符串的长度变量的指针,指向FINDREPLACE的指针,返回查找是否成功
BOOL edit::FindNextText ( int * piSearchOffset,LPFINDREPLACE pfr)            
{    
     pfr->lpstrFindWhat = szFindText ;    
      
	 return FindFindText ( piSearchOffset, pfr) ;
}

BOOL edit::FindReplaceText ( int * piSearchOffset, LPFINDREPLACE pfr)        //替换
{
      // 查找文本
     if (!FindFindText ( piSearchOffset, pfr))
     return FALSE ;
     
      // 替换文本
     SendMessage (hWndEdit, EM_REPLACESEL, 0, (LPARAM) pfr->lpstrReplaceWith) ;
     * piSearchOffset = iPos + lstrlen (pfr->lpstrReplaceWith);
	  // 选种替换后的字符
	 SendMessage (hWndEdit, EM_SETSEL, iPos, * piSearchOffset) ;               
     return TRUE ;
}

//检查是否有需查找的字符串,返回查找字符串是否为空
BOOL edit::FindValidFind (void)                                               //检查是否有需查找的字符串
{
     return * szFindText != '\0' ;
}

⌨️ 快捷键说明

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