📄 记事本.cpp
字号:
#include <windows.h>
#include <commdlg.h>
#include <string.h>
#include "resource.h"
HINSTANCE hInst;
HWND hdlg;
HWND hWndEdit;
HWND hWnd;
HANDLE hFile;
OPENFILENAME ofn;
CHOOSECOLOR colorBox;
CHOOSEFONT fontBox;
PAGESETUPDLG pd1;
PRINTDLG page;
FINDREPLACE find;
char szFile[255];
char szFileTitle[255];
long WINAPI WndProc(HWND hwnd,UINT imessage,UINT wParam,LONG lParam);
//void WINAPI CaretPos(int *xcaret,int *ycaret,HWND hWnd,int nCharWidth,int nArrayPos);
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL ShowFileInfo(HWND hWnd,HDC hDC,HDROP hDropInfo);
//BOOL CALLBACK DlgProcGetFileName(HWND,UINT,WPARAM,LPARAM); //获取文件名
BOOL FileToEditBox(HWND,LPSTR); //文件到编辑框
BOOL EditBoxToFile(HWND,LPCTSTR); //编辑框到文件
BOOL EditBoxToClip1(HWND); //编辑框到剪贴板(复制)
BOOL EditBoxToClip2(HWND); //编辑框到剪贴板(剪切)
BOOL ClipToEditBox(HWND); //剪贴板到编辑框
bool check(char* , char* ); //判断两个字符串是否相等
//主函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASSEX wndclass;
MSG Message;
HACCEL hAccel;
char lpszTitle[]="0309014215 王铎 计算机2班";
char lpszClassName[]="大作业";
wndclass.cbSize=sizeof(wndclass);
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,(LPCSTR)IDI_ICON1);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
// wndclass.hCursor=LoadCursor(hInstance,(LPCSTR)IDC_CURSOR1);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpfnWndProc = WndProc;
wndclass.lpszMenuName=(LPCSTR)IDR_MENU1;
wndclass.lpszClassName=lpszClassName;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.hIconSm=LoadIcon(hInstance,(LPCSTR)IDI_ICON1);
if(!RegisterClassEx(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hWnd= CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
hInst=hInstance;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
//发送新建消息
SendMessage(hWnd,WM_COMMAND,IDM_NEW,0);
hAccel=LoadAccelerators(hInstance,(LPCSTR)IDR_ACCELERATOR1);
while(GetMessage(&Message,0,0,0))
{
if(!TranslateAccelerator(hWnd,hAccel,&Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;
}
//窗体消息处理函数
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
HDC hDC;
RECT ClientRect;
char *p=NULL;
LPCTSTR lpTemp=""; // 空字符串
HMENU hmenu;
static char FindWhat[]="ccms";
static char ReplaceWith[]="ccms";
static bool flag1=false; //若没有打开文件,flag=flase
static bool flag2=false; //若没有新建文件,flag2=false
static bool flag3=false; //用来判断文件名是否带了后缀,在 IDM_SAVE 中将会用到
static bool flag4=false; //用来判断是否保存了文件
switch (iMessage)
{
case WM_CREATE:
GetClientRect(hWnd,&ClientRect); //获取客户区大小
hWndEdit=CreateWindow("EDIT", //创建编辑框
NULL,
WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE|WS_BORDER,
ClientRect.left,
ClientRect.top,
ClientRect.right,
ClientRect.bottom,
hWnd,
//(HMENU)ID_EDIT,
NULL,
hInst,
NULL);
EnableWindow(hWndEdit,0); //使编辑框不能接受输入
DragAcceptFiles(hWnd,TRUE); //API函数:允许hWnd所指的窗口实现文件拖放
break;
case WM_SIZE: //当窗口大小改变的时候,编辑框与状态栏跟着改变
MoveWindow(hWndEdit,0,0,LOWORD(lParam),HIWORD(lParam),true); //编辑框
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_O:
SendMessage(hWndEdit,EM_SETSEL,0,-1); //选中所有文本
SendMessage(hWndEdit,EM_REPLACESEL,wParam,(DWORD)lpTemp); //用空串代码
EnableWindow(hWndEdit,0); //使编辑框不能接受输入
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_FILEMUSTEXIST |OFN_PATHMUSTEXIST ;
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFileTitle=szFileTitle;
ofn.lpstrInitialDir=NULL;
ofn.nMaxFileTitle = NULL;
ofn.lpstrFilter="Text Files(*.TXT)\0*.txt\0All Files (*.*)\0*.*\0\0";
ofn.hwndOwner=hWnd;
if (GetOpenFileName(&ofn)==TRUE)
{
EnableWindow(hWndEdit,1); //使编辑框可以接受输入
FileToEditBox(hWnd,szFile); //文件到编辑框[自定义函数]
}
EnableWindow(hWndEdit,1); //使编辑框可以接受输入
flag1=true; //打开了一个文件,flag=true
flag4=false; //打开了一个文件,还未保存,flag4=false
return 0;
case IDM_NEW:
//弹出文件名对话框
SendMessage(hWndEdit,EM_SETSEL,0,-1); //选中所有文本
SendMessage(hWndEdit,EM_REPLACESEL,wParam,(DWORD)lpTemp); //用空串代码
EnableWindow(hWndEdit,1); //允许编辑框输入
SetFocus(hWndEdit);
flag2=true; //新建了文件,flag2=true
flag4=false; //新建了文件,还未保存,flag4=false
return 0;
case IDM_CLOSE:
SendMessage(hWndEdit,EM_SETSEL,0,-1); //选中所有文本
SendMessage(hWndEdit,EM_REPLACESEL,wParam,(DWORD)lpTemp); //用空串代码
EnableWindow(hWndEdit,0); //禁止编辑框输入
flag1=false;
flag2=false;
return 0;
case IDM_S:
//将编辑框中所有内容输出到文件
if(flag1==true || flag2==true)
{
if(flag4==false)
{
ofn.Flags=OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT;
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFileTitle=szFileTitle;
ofn.lpstrInitialDir=NULL;
ofn.nMaxFileTitle = NULL;
ofn.lpstrFilter="Text Files(*.TXT)\0*.txt\0All Files (*.*)\0*.*\0\0";
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrTitle ="另存为...";
ofn.hwndOwner=hWnd; //父窗口句柄
EnableWindow(hWndEdit,0); //使编辑框不能接受输入
GetSaveFileName(&ofn);
EnableWindow(hWndEdit,1); //使编辑框可以接受输入
p=szFileTitle;
while(*p!='\0')
{
if(*p=='.') //字符串里有"."号,说明文件名带了后缀
{
flag3=true; //文件名带了后缀, flag3=true
if(check(p,".txt") || check(p,".TXT")) //如果后缀是".txt" 或 ".TXT"
break; //OK,跳出循环
else //如果后缀不是".txt" 或 ".TXT"
strcat(p,".txt"); //在其末尾加上".txt"
}
p++;
}
if(flag3==false)
{
strcat(p,".txt"); //文件名没有带后缀,我们给它加上后缀
}
}
EditBoxToFile(hWnd,szFileTitle);
flag4=true;
}
return 0;
case IDM_SERVES:
if(flag1==true || flag2==true)
{
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER |OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT;
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFileTitle=szFileTitle;
ofn.lpstrInitialDir=NULL;
ofn.nMaxFileTitle = NULL;
ofn.lpstrFilter="Text Files(*.TXT)\0*.txt\0All Files (*.*)\0*.*\0\0";
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrTitle ="另存为...";
ofn.hwndOwner=hWnd; //父窗口句柄
EnableWindow(hWndEdit,0); //使编辑框不能接受输入
GetSaveFileName(&ofn);
EnableWindow(hWndEdit,1); //使编辑框可以接受输入
p=szFileTitle;
while(*p!='\0')
{
if(*p=='.') //字符串里有"."号,说明文件名带了后缀
{
flag1=true; //设置flag=false;
if(check(p,".txt") || check(p,".TXT")) //如果后缀是".txt" 或 ".TXT"
break; //OK,返回
else //如果后缀不是".txt" 或 ".TXT"
strcat(p,".txt"); //在其末尾加上".txt"
}
else //若字符串里没有"."号,说明文件名没有带后缀
flag1=false; //设置flag=false;
p++;
}
if(flag1==false) //若flag=false,说明文件名没有带后缀
{
strcat(szFileTitle,".txt"); //给文件名加上后缀".txt"
flag1=true;
}
if(flag1==true)
{
EditBoxToFile(hWnd,szFileTitle);
flag4=true;
}
}
return 0;
case IDM_EXIT:
SendMessage(hWnd,WM_DESTROY,0,0);
return 0;
case IDM_C:
// EditBoxToClip1(hWnd);
SendMessage((HWND)hWndEdit,WM_COPY,0,0);
return 0;
case IDM_X:
// EditBoxToClip2(hWnd);
SendMessage((HWND)hWndEdit,WM_CUT,0,0);
return 0;
case IDM_V:
// ClipToEditBox(hWnd);
SendMessage((HWND)hWndEdit,WM_PASTE,0,0);
return 0;
//关于
case IDM_ABOUT:
DialogBox(hInst,(LPCSTR)IDD_DIALOG1,hWnd,(DLGPROC)DlgProc);
break;
//页面设置
case IDM_U:
pd1.lStructSize=sizeof(PAGESETUPDLG);
pd1.hwndOwner = hWnd;
pd1.hDevMode;
pd1.hDevNames;
pd1.Flags=PSD_DEFAULTMINMARGINS|PSD_INWININIINTLMEASURE|PSD_MINMARGINS|PSD_MARGINS|PSD_INTHOUSANDTHSOFINCHES;
pd1.ptPaperSize;
pd1.rtMinMargin;
pd1.rtMargin;
pd1.hInstance;
pd1.lCustData;
pd1.lpfnPageSetupHook;
pd1.lpfnPagePaintHook;
pd1.lpPageSetupTemplateName;
pd1.hPageSetupTemplate;
PageSetupDlg(&pd1);
break;
//打印
case IDM_P:
page.lStructSize=sizeof(PRINTDLG);
page.hwndOwner = hWnd;
page.hDevMode;
page.hDevNames;
page.hDC=0;
page.Flags=PD_ALLPAGES|PD_SELECTION|PD_PAGENUMS|PD_PRINTSETUP;
page.nFromPage;
page.nToPage;
page.nMinPage;
page.nMaxPage;
page.nCopies;
page.hInstance;
page.lCustData;
page.lpfnPrintHook;
page.lpfnSetupHook;
page.lpPrintTemplateName;
page.lpSetupTemplateName;
page.hPrintTemplate;
page.hSetupTemplate;
// ReleaseDC(hWnd,hdcp);
PrintDlg(&page);
break;
//换行
case IDM_W:
hmenu=GetMenu(hWnd);
if(CheckMenuItem(hmenu,IDM_W,MF_CHECKED))
CheckMenuItem(hmenu,IDM_W,MF_UNCHECKED);
break;
//查找替换
case IDM_F:
find.lStructSize=sizeof(FINDREPLACE);
find.hwndOwner=hWnd;
find.hInstance=NULL;
find.Flags=FR_DOWN|FR_FINDNEXT|FR_MATCHCASE|FR_WHOLEWORD;
find.lpstrFindWhat=FindWhat;
find.lpstrReplaceWith=ReplaceWith;
find.wFindWhatLen=255;
find.wReplaceWithLen=255;
// find.lCustData;
// find.lpfnHook;
// find.lpTemplateName;
FindText(&find);
break;
//替换
case IDM_H:
find.lStructSize=sizeof(FINDREPLACE);
find.hwndOwner=hWnd;
find.hInstance=NULL;
find.Flags=FR_DOWN|FR_FINDNEXT|FR_MATCHCASE|FR_WHOLEWORD;
find.lpstrFindWhat=FindWhat;
find.lpstrReplaceWith=ReplaceWith;
find.wFindWhatLen=255;
find.wReplaceWithLen=255;
// find.lCustData;
// find.lpfnHook;
// find.lpTemplateName;
ReplaceText(&find);
break;
//字体对话框
case IDM_FONT:
HDC hdcf;
hdcf=GetDC(hWnd);
LOGFONT lf;
HFONT hfont;
fontBox.lpTemplateName=NULL;
fontBox.lStructSize=sizeof(CHOOSEFONT);
fontBox.nSizeMax=100;
fontBox.nSizeMin=0;
fontBox.rgbColors=0;
fontBox.lpszStyle=NULL;
fontBox.Flags=CF_EFFECTS|CF_SCREENFONTS;
fontBox.hDC=hdcf;
fontBox.hInstance=NULL;
fontBox.hwndOwner=hWnd;
fontBox.iPointSize=10;
fontBox.lCustData=0;
fontBox.lpfnHook=NULL;
fontBox.nFontType = SCREEN_FONTTYPE;
fontBox.lpLogFont=&lf;
ChooseFont(&fontBox);
hfont=CreateFontIndirect(fontBox.lpLogFont);
// SelectObject(hdcf,hfont);
// SetTextColor(hdcf,fontBox.rgbColors);
// TextOut(hdcf,10,10,"字体对话框设置返回样式",strlen("字体对话框设置返回样式"));
SendMessage(hWndEdit,WM_SETFONT,(WPARAM)hfont,0);
ReleaseDC(hWnd,hdcf);
InvalidateRect(hWnd,0,TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -