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

📄 记事本.cpp

📁 记事本的基本功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			break;

		case IDM_HELP:
			MessageBox(hWnd,"这里是记事本帮助\n没什么可帮助的\n地球人都会用\n^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;

		case IDM_V1:
			MessageBox(hWnd,"当你看到这个的时候,很遗憾的告诉你:\n这些功能还没有实现^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;
		case IDM_Z:
			MessageBox(hWnd,"当你看到这个的时候,很遗憾的告诉你:\n这些功能还没有实现^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;
		case IDM_G:
			MessageBox(hWnd,"当你看到这个的时候,很遗憾的告诉你:\n这些功能还没有实现^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;
		case IDM_ALL:
			SendMessage(hWndEdit,EM_SETSEL,0,-1);
			break;
		case IDM_TIME:
			MessageBox(hWnd,"当你看到这个的时候,很遗憾的告诉你:\n这些功能还没有实现^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;
		case IDM_L:
			MessageBox(hWnd,"当你看到这个的时候,很遗憾的告诉你:\n这些功能还没有实现^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;
		case IDM_N:
			MessageBox(hWnd,"当你看到这个的时候,很遗憾的告诉你:\n这些功能还没有实现^_^","记事本帮助",MB_OK|MB_ICONINFORMATION);
			break;
		}
		break;
		case WM_DROPFILES:		//当有文件被拖入窗口并放下时激发此消息
			HDROP hDropInfo;	//HDROP句柄,用以存放拖入文件的信息
			hDropInfo=(HDROP)wParam;	//初始化 hDropInfo(不进行初始化运行会出错)

			hDC=GetDC(hWnd);
			ShowFileInfo(hWnd,hDC,hDropInfo);
			DragFinish(hDropInfo);
			ReleaseDC(hWnd,hDC);

			flag1=true;			//打开了一个文件,flag=true
			flag4=false;		//打开了一个文件,还未保存,flag4=false
			return 0;

		case WM_CLOSE:      // 窗口关闭前的消息(比如用户点了关闭按钮)
			DWORD dwFileSize;
			dwFileSize=SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0);

			if((flag1==true||flag2==true)&&flag4==false)   //如果新建了文件或打开了文件
			{											  //并且文件没有被保存过
				if(dwFileSize!=0)			//如果编辑框内容不为空
				{
					int t;
					t=::MessageBox(NULL,"文件还未保存,是否要保存?","提示",MB_YESNOCANCEL|MB_ICONINFORMATION);
					if(t==IDYES)
						{
							SendMessage(hWnd,WM_COMMAND,IDM_SERVES,0L);		//保存文件
							DestroyWindow(hWnd);							//毁灭窗口
							return 0;
						}
					else if(t==IDCANCEL)
						{
							return 0;
						}
				}
			}
			DestroyWindow(hWnd);
			return 0;		// 此时Windows还根本没有对窗口做任何事,可以用MessageBox来测试

		case WM_DESTROY:    // 窗口关闭以后的消息,此时Windows已经毁坏了窗口
			DragAcceptFiles(hWnd,FALSE);
			PostQuitMessage(0);
			return 0;
		default:
			return(DefWindowProc(hWnd,iMessage,wParam,lParam));
		}
	return 0;
}

//=============================================================================================
//==============================调用函数=======================================================
//=============================================================================================

BOOL FileToEditBox(HWND hwnd, LPSTR lpszFileName)
{
	DWORD	dwFileSize,dwByteRead;			//文件大小,文件读入字节
	char    *lpBufPtr=NULL;					//文件缓冲区

	//打开文件
	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,			//文件大小
						 &dwByteRead,			//记录读入了多少字节
						 NULL);					//从文件当前位置读取

				if(dwByteRead!=0)				//若读取文件成功
				{
					//将文件写入编辑框
					SendMessage(hWndEdit,WM_SETTEXT,0,(LPARAM)lpBufPtr);
				}
				else
				{
					MessageBox(NULL,"读入字节数为 0 ","",0);
					free(lpBufPtr);
					return 0;
				}
			}
			else
			{
				MessageBox(hwnd,"内存分配失败","",0);
				return 0;
			}
		}
		else
		{
			MessageBox(hwnd,"获取文件大小失败","",0);
			return 0;
		}
	}
	else
	{
		MessageBox(hwnd,"打开文件失败","",0);
		return 0;
	}
	CloseHandle(hFile);
	return 1;
}

BOOL EditBoxToFile(HWND hwnd,LPCTSTR lpszFileName)
{
	DWORD dwFileSize,dwByteWrite;		//文件大小,已写入的字节数
	char  *lpBufPtr=NULL;				//文件缓冲区
	hFile=CreateFile(lpszFileName,
					 GENERIC_READ|GENERIC_WRITE,	//读写文件
					 FILE_SHARE_WRITE,				//写方式:共享写
					 NULL,
					 CREATE_ALWAYS,					//创建一个文件,如果文件已存在将被重写
					 FILE_ATTRIBUTE_NORMAL,			//常规文件
					 (HANDLE)NULL);

	if(hFile!=INVALID_HANDLE_VALUE)
	{
		//读取编辑框中的文本的大小
		dwFileSize=SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0);
		dwFileSize+=1;		//文本长度+1,否则丢失最后一个字符
		if(dwFileSize!=0)	//若读取文件大小成功
		{
			lpBufPtr=(char*)malloc(dwFileSize);		//开辟文件缓冲区
			if(lpBufPtr!=NULL)						//若开辟文件缓冲区成功
			{
				//读取编辑框中的内容
				GetWindowText(hWndEdit,lpBufPtr,dwFileSize);

				//将文件缓冲区内容写入文件
				WriteFile(hFile,(LPVOID)lpBufPtr,dwFileSize,&dwByteWrite,NULL);
				free(lpBufPtr);				//释放缓冲区
			}
			else
			{
//				MessageBox(NULL,"内存分配失败","",0);
				return 0;
			}
		}
		else
		{
//			MessageBox(NULL,"编辑框内容为空","",0);
			CloseHandle(hFile);
			return 0;
		}
	}
	else
	{
//		MessageBox(NULL,"创建文件失败","",0);
		return 0;
	}
	CloseHandle(hFile);
	return 1;
}

//编辑框到剪贴板(复制操作)
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);
	lpBufPtr=(char*)malloc(dwFileSize+2);				//开辟文本缓冲区
	if(lpBufPtr!=NULL)
	{
		// 读取编辑框文本内容保存到 lpBufPtr(读取的是所有文本,而不仅仅是选中的文本)
		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;
	DWORD	dPos;
	WORD	wStart,wEnd;

	//得到文本位置
	dPos=SendMessage(hWndEdit,EM_GETSEL,NULL,NULL);
	wEnd=HIWORD(dPos);
	wStart=LOWORD(dPos);

	if((wEnd-wStart)>=0)			//文本长度必须>=0
	{
		if(!(IsClipboardFormatAvailable(CF_TEXT)))
		{
			/*--------- API函数小帖士 -------------
			名称	IsClipboardFormatAvailable 
			原型	BOOL IsClipboardFormatAvailable (UINT uFormat) 
			描述	检测剪贴板是否支持某种数据类型 
			返回值:成功返回TRUE,失败返回FALSE 
			现支持类型: 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);							//解锁全局内存

		//在编辑框中的光标位置插入 lpPasteStr
		SendMessage(hWndEdit,EM_REPLACESEL,1,(LPARAM)lpPasteStr);
	}
	else
		MessageBox(hWnd,"文本插入位置错误","",MB_OK);
	return 1;
}

bool check(char* a, char* b)     //判断两个字符串是否相等
{
	int i;
	int j=strlen(b);
	for(i=0; i<j; i++)
	{
		if(*a==*b)
		{
			a++;
			b++;
		}
		else
			return 0;
	}
	return 1;
}

BOOL ShowFileInfo( HWND hwnd,HDC hDC,HDROP hDropInfo )
{
    WORD cFiles;
    char lpszFile[255];

	/*---------- API 函数小帖士 ----------------
	API函数 DragQueryFile(): 
	UINT DragQueryFile(HDROP    hDrop, 
	                   UINT     iFile, 
	                   LPTSTR   lpszFile, 
	                   UINT     cch )

	---- 其中hDrop是指向拖动文件结构的句柄; 
	---- iFile 是以0开始的被托动文件的序号,因为一次可能拖动多个文件。当此参数 
	---- 设为0xFFFFFFFF,则函数返回拖动文件的数量; 
	---- lpszFile 是指向文件名的缓冲区;	
	---- cch 是文件名缓冲区的大小,即文件名的字符数。 
	----------------------------------*/

	// 返回拖入的文件数目
    cFiles = DragQueryFile( hDropInfo,( UINT )0xFFFFFFFF,( LPTSTR )NULL,( UINT )NULL );

    if( cFiles > 1 )		//如果施入的文件不只一个,显示如下信息:
    {
//		MessageBox(NULL,"你拖入的文件过多,请重新操作","提示",0);
        return FALSE;
    }

    else		//如果拖入的文件只有一个
    {
        DragQueryFile( hDropInfo,0,lpszFile,sizeof( lpszFile ) );
		//从 hDropInfo 获取文件信息存放到 lpszFile
		//注:DragQueryFile()函数取得的信息是完整的文件名,
		//	  即除了文件名外还包含了文件路径,可以用 MessageBox()函数测试
		
		EnableWindow(hWndEdit,1);				//使编辑框可以接受输入
		FileToEditBox(hwnd,lpszFile);			//文件到编辑框 !!!!!!!!!!!!
	}
	return TRUE;
}

//对话框的消息处理函数
BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam)
{
	switch(message)
	{
	case WM_INITDIALOG:
		return 1;
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDOK:
			EndDialog(hdlg,0);
			return 1;
		case IDCANCEL:
			EndDialog(hdlg,0);
			return 1;
		}
		break;
		case WM_CLOSE:
			EndDialog(hdlg,0);
			return 1;
	}
	return 0;
}

⌨️ 快捷键说明

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