📄 记事本.cpp
字号:
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 + -