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

📄 记事本.cpp

📁 记事本的基本功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -