首页 > 代码库 > 记事本

记事本

今天查找资料的时候发现了我曾经做的一个记事本

首先打开VC6.0并且建立一个Win32工程,搭建成下图所示的图形界面


然后在MainDlg.cpp文件中添加下面的代码

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <commdlg.h>
#include "resource.h"
#include "MainDlg.h"


BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
		HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }

    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
	/*在窗口的标题栏上显示图标*/
	SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)));

    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
		/*新建*/
	    case ID_MENUITEMNEW:
		{
			/*得到Edit控件的句柄*/
			HWND hwndEdit = GetDlgItem(hwnd,IDC_EDIT1);

			/*清空文本*/
			SetWindowText(hwndEdit,TEXT(" "));
		}
	    break;

		/*文件打开*/
        case ID_MENUITEMOPEN:
		{
			OPENFILENAME ofn;/*文件打开结构*/

			char szFile[MAX_PATH];/*文件名数组(存放文件名)*/

			/*使用文件打开结构前,将结构体清零*/
			ZeroMemory(&ofn,sizeof(ofn));

			/*文件大小*/
			ofn.lStructSize = sizeof(ofn);

			/*文件名*/
			ofn.lpstrFile = szFile;

			ofn.lpstrFile[0] = TEXT('\0');

			ofn.nMaxFile = sizeof(szFile);

			/*过滤器*/
			ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");

			ofn.nFilterIndex = 1;

			ofn.lpstrFileTitle = NULL;

			ofn.nMaxFileTitle = 0;

			ofn.lpstrInitialDir = NULL;

			/*句柄*/
			ofn.hwndOwner = hwnd;//自学能力、探索能力、猜测能力

			ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

			if (GetOpenFileName(&ofn))
			{
				FILE *fp;

				TCHAR str1[256];
				TCHAR str2[2560] = "\0";

				fp = fopen(szFile,"r");/*文件读*/

				while(fgets(str1,sizeof(str1),fp))
				{
					int len = strlen(str1);

					if(str1[len - 1] == '\n')
					{
						str1[len-1] = '\r';
					}

					strcat(str1,"\n");
					strcat(str2,str1);
				}
				fclose(fp);

				SetDlgItemText(hwnd,IDC_EDIT1,str2);
			}
		}
        break;

		/*文件保存*/
		case ID_MENUITEMSAVE:
		{

			OPENFILENAME ofn;/*文件打开结构*/

			char szFile[MAX_PATH];/*文件名数组(存放文件名)*/

			/*使用文件打开结构前,将结构体清零*/
			ZeroMemory(&ofn,sizeof(ofn));

			/*文件大小*/
			ofn.lStructSize = sizeof(ofn);

			/*文件名*/
			ofn.lpstrFile = szFile;

			ofn.lpstrFile[0] = TEXT('\0');

			ofn.nMaxFile = sizeof(szFile);

			/*过滤器*/
			ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");

			ofn.nFilterIndex = 1;

			ofn.lpstrFileTitle = NULL;

			ofn.nMaxFileTitle = 0;

			ofn.lpstrInitialDir = NULL;

			if(GetSaveFileName(&ofn))/*文件保存函数*/
			{
				TCHAR str[2560];/*用于存放文本*/

				FILE *fp = fopen(szFile,"w");/*新建一个文件*/

				GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));/*得到编辑框上的文本*/

				fputs(str,fp);/*将文本打印到文件中*/

				fclose(fp);/*关闭文件*/
			}
		}
		break;

		/*关闭*/
		case ID_MENUITEMEXIT:
		{
			exit(-1);
		}
		break;

		/*复制*/
		case ID_MENUITEMCOPY:
		{
			 OpenClipboard(hwnd);/*打开剪贴板*/

			 EmptyClipboard();/*清空剪贴板上原有的数据*/

			 TCHAR text[256];

			 /*得到文本框中的字符*/
			 GetDlgItemText(hwnd,IDC_EDIT1,text,sizeof(text));

			 /*从堆中分配一定数目的字节*/
			 HGLOBAL hglobal = GlobalAlloc(GMEM_DDESHARE , strlen(text));

			 /*锁定内存中指定的内存块*/
			 TCHAR *str = (TCHAR*)GlobalLock(hglobal);

			 /*将字符拷贝到内存中*/
			 strcpy(str , text);

			 GlobalUnlock(hglobal);/*解锁*/

			 /*将字符串放入剪贴板,CF_TEXT表示数据类型是文本*/
			 SetClipboardData(CF_TEXT,hglobal);

			 /*关闭剪贴板*/
			 CloseClipboard();
		}
		break;

		/*粘贴*/
		case ID_MENUITEMPASTE:
		{

			/*打开剪贴板*/
	       OpenClipboard(hwnd);

			/*判断剪贴板上数据的格式*/
			if(IsClipboardFormatAvailable(CF_TEXT))
			{
				/*获取UNICODE数据*/
			HANDLE	 hclip = GetClipboardData(CF_TEXT);
	

			TCHAR *str = (TCHAR*) GlobalLock(hclip);

			GlobalUnlock(hclip);

			SetDlgItemText(hwnd,IDC_EDIT1,str);
			}

			/*关闭剪贴板*/
			CloseClipboard();
			}
		break;

		/*帮助*/
		case ID_MENUITEMHELP:
		{
			MessageBox(hwnd,TEXT("只有 打开 关闭 保存 新建 ,复制和粘贴不好用"),"",MB_OK);
		}
		break;

		/*关于*/
		case ID_MENUITEMABOUT:
		{
			MessageBox(hwnd,TEXT("我的第一个记事本\r\nQQ:1042121058"),"",MB_OK);
		}
		break;
        default:
		break;
    }
}

void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}


程序执行结果:


打开一个文本文件后的效果



单击此处下载记事本



记事本