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

📄 textfile.c

📁 另外一个简单的算术编码压缩程序 可以压缩10个字符 供大家参考
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include <windowsx.h>
#include "TextFile.h"
#define N 30

#define UNTITLED  TEXT ("无标题")

static TCHAR szAppName[] = TEXT ("TextFile");

LRESULT CALLBACK MainWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
	HWND         hwnd;   
	WNDCLASS     wc;
	MSG          msg;
	HACCEL       hAccel;

	wc.style = CS_VREDRAW | CS_HREDRAW;
	wc.lpfnWndProc = MainWndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon (hInstance, IDI_APPLICATION);
	wc.hCursor = LoadCursor (NULL, IDC_ARROW);
	wc.hbrBackground = GetStockObject (WHITE_BRUSH);
	wc.lpszMenuName = szAppName;
	wc.lpszClassName = szAppName;

	if (!RegisterClass (&wc))
	{
		MessageBox (NULL, TEXT ("注册窗口类失败!"), szAppName,
                    MB_ICONERROR);
		return 0;
	}

	hwnd = CreateWindow (szAppName, NULL,
				WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT,
                CW_USEDEFAULT, CW_USEDEFAULT,
                NULL, NULL, hInstance, NULL); 

	if( !hwnd ) return FALSE;

	ShowWindow ( hwnd, iCmdShow );
	UpdateWindow ( hwnd );

	hAccel = LoadAccelerators (hInstance, szAppName);
	if (!hAccel)
	{
		MessageBeep(0);
		return FALSE;
	}

	while (GetMessage (&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator (hwnd, hAccel, &msg))
		{
			TranslateMessage (&msg);
			DispatchMessage (&msg);
		}
	}

	return msg.wParam;
}

/*****************************************************************************
函数:  QuerySaveFile(HWND, TCHAR *);
功能:  弹出消息框,提醒文件内容改变,询问是否要求保存。
		当用户选择“是”按钮时执行文件保存操作。
返回值:IDYES(保存);IDNO(不保存);IDCANCEL(取消操作)
*************************************************************************/
int QuerySaveFile(HWND hWnd, TCHAR * szTitleName)
{
    TCHAR szBuffer[MAX_PATH];
	int iResponse;

	wsprintf (szBuffer, TEXT ("文件 %s 的内容已经更改,是否需要保存?"),
			  szTitleName[0] ? szTitleName : UNTITLED) ;
    
	iResponse = MessageBox (hWnd, szBuffer, TEXT ("文件操作演示程序"),
							MB_YESNOCANCEL | MB_ICONQUESTION) ;
   
	if (iResponse == IDYES)
		if (!SendMessage (hWnd, WM_COMMAND, IDM_FILE_SAVE, 0))
			iResponse = IDCANCEL;

	return (iResponse);
}

LRESULT CALLBACK MainWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static HWND          hWndEdit;
    static TCHAR szFileFilter[] = TEXT ("Text Files (*.TXT)\0*.txt\0")  \
								  TEXT ("Text Files (*.C)\0*.c\0") \
								  TEXT ("Text Files (*.H)\0*.h\0") \
								  TEXT ("Text Files (*.RC)\0*.rc\0") \
								  TEXT ("All Files (*.*)\0*.*\0\0");
    static TCHAR         szFileName[MAX_PATH], szFileTitle[MAX_PATH];
	static OPENFILENAME  ofn;
	static HANDLE         hFile;
    static BOOL          bFileChange = FALSE;
	TCHAR                szWndCaption[MAX_PATH];
	int                  iFileLength;
	LPTSTR               lpBuffer;
	DWORD                dwBytes;
	
	switch (message)
	{
	case WM_CREATE:
		hWndEdit=CreateWindow (TEXT ("edit"),			        //窗口类名
							  NULL,			                    //无标题
							  WS_CHILD|WS_VISIBLE|WS_HSCROLL|	//编辑控件风格
							  WS_VSCROLL|WS_BORDER|ES_LEFT|
							  ES_MULTILINE|ES_AUTOHSCROLL|
							  ES_AUTOVSCROLL,
							  0,0,0,0,	
							  hWnd,		                        //父窗口句柄
							  (HMENU)1,		                    //编辑控件子窗口标识
							  (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE),
							  NULL);
     
		//初始化结构变量 ofn
		ofn.lStructSize       = sizeof (OPENFILENAME);
		ofn.hwndOwner         = hWnd;
		ofn.hInstance         = NULL;
		ofn.lpstrFilter       = szFileFilter;
		ofn.lpstrCustomFilter = NULL;
		ofn.nMaxCustFilter    = 0;
		ofn.nFilterIndex      = 0;
		ofn.lpstrFile         = NULL;     //调用 GetOpenFileName 函数前设置        
		ofn.nMaxFile          = MAX_PATH;
		ofn.lpstrFileTitle    = NULL;     //调用 GetOpenFileName 函数前设置
		ofn.nMaxFileTitle     = MAX_PATH;
		ofn.lpstrInitialDir   = NULL;
		ofn.lpstrTitle        = NULL;
		ofn.Flags             = 0;        //调用 GetOpenFileName 函数前设置
		ofn.nFileOffset       = 0;
		ofn.nFileExtension    = 0;
		ofn.lpstrDefExt       = TEXT ("txt");
		ofn.lCustData         = 0L;
		ofn.lpfnHook          = NULL;
		
		//显示窗口标题
		szFileName[0]  = '\0';
		szFileTitle[0] = '\0';
		wsprintf (szWndCaption, TEXT ("%s - %s"), UNTITLED, szAppName);
		SetWindowText (hWnd, szWndCaption) ;

		return 0;

	case WM_SETFOCUS:
		SetFocus (hWndEdit);
		return 0;

	case WM_SIZE:
		MoveWindow (hWndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
		return 0;
         
	case WM_COMMAND:        	// 响应菜单及编辑控件通知消息
        if (lParam && LOWORD (wParam) == 1)  //编辑子窗口通知消息
        {
            switch (HIWORD (wParam))
            {
            case EN_UPDATE :
                bFileChange = TRUE ;
                return 0 ;
                    
            case EN_ERRSPACE :
            case EN_MAXTEXT :
				MessageBox (hWnd,TEXT ("编辑控件内存溢出"), 
							TEXT ("文件操作示例程序"), MB_OK|MB_ICONSTOP);	
                return 0 ;
            }
            break ;
        }
		else
		{
			//菜单消息
			switch (LOWORD (wParam))
			{
			case IDM_FILE_EXIT:
				SendMessage (hWnd, WM_CLOSE, 0, 0) ;
				return 0 ;
               
			case IDM_FILE_NEW:
				//若之前打开的文件需要保存,
				//且保存未成功或用户取消新建操作,结束消息,返回0
				if (bFileChange && IDCANCEL == QuerySaveFile(hWnd, szFileTitle))
					return 0 ;

				SetWindowText (hWndEdit, TEXT ("\0"));
				szFileName[0]  = '\0';
				szFileTitle[0] = '\0';

				wsprintf (szWndCaption, TEXT ("%s - %s"), UNTITLED, szAppName);
				SetWindowText (hWnd, szWndCaption) ;

				bFileChange = FALSE ;
				return 0 ;
               
			case IDM_FILE_OPEN:
				if (bFileChange && IDCANCEL == QuerySaveFile (hWnd, szFileTitle))
                    return 0 ;
               
				//设置对话框结构变量ofn
				ofn.hwndOwner         = hWnd;
				ofn.lpstrFile         = szFileName;
				ofn.lpstrFileTitle    = szFileTitle;
				ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
     
				//显示“打开”对话框
				if (GetOpenFileName (&ofn))
				{
					//打开指定文件
					hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ,
                                NULL, OPEN_EXISTING, 0, NULL);
					if ((DWORD)hFile == -1)
					{
						MessageBox (hWnd, TEXT ("打开指定文件操作失败"),
							TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
						szFileName[0]  = '\0';
						szFileTitle[0] = '\0';
					}
					else  //读取文件内容
					{
						iFileLength = min (GetFileSize (hFile, NULL),
											(DWORD)SendMessage(hWndEdit, EM_GETLIMITTEXT, 0, 0));

						lpBuffer = (LPTSTR)malloc (iFileLength+1);
						ReadFile (hFile, lpBuffer, iFileLength, &dwBytes, NULL);
						CloseHandle (hFile);
						lpBuffer[iFileLength] = '\0';
						SetWindowText (hWndEdit, lpBuffer);
						free (lpBuffer);
					}
				}
				else
				{
					MessageBox (hWnd, TEXT ("获取文件名失败"),
						TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
					szFileName[0]  = '\0';
					szFileTitle[0] = '\0';
				}

				wsprintf (szWndCaption, TEXT ("%s - %s"), 
					(szFileTitle[0] == '\0') ? UNTITLED : szFileTitle, szAppName);
				SetWindowText (hWnd, szWndCaption) ;

				bFileChange = FALSE ;
                return 0 ;
               
			case IDM_FILE_SAVE:
				//当文件名不为“无标题”时执行保存操作,否则执行“另存为”命令
				if (szFileTitle[0])
				{
                    hFile = CreateFile (szFileName, GENERIC_WRITE, 0, 
                                    NULL, CREATE_ALWAYS, 0, NULL);
					if ((DWORD)hFile == -1)
					{
						MessageBox (hWnd, TEXT ("打开指定文件操作失败"),
							TEXT ("文件操作演示程序"), MB_OK | MB_ICONERROR);
						szFileName[0]  = '\0';
						szFileTitle[0] = '\0';
				        return FALSE ;
					}
					else
					{

⌨️ 快捷键说明

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