一个简单的文本编辑小程序,c++实现(附源码)

今天的程序是一个简单的版本,后期会有更新的。

main.cpp

#include <windows.h>
#include "main.h"

BOOL LoadFile(HWND hEdit,LPSTR pszFileName)
{
	HANDLE hFile;
	BOOL bSuccess=FALSE;

	hFile=CreateFile(pszFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0);
	if(hFile!=INVALID_HANDLE_VALUE)
	{
		DWORD dwFileSize;
		dwFileSize=GetFileSize(hFile,NULL);
		if(dwFileSize!=0xFFFFFFFF)
		{
			LPSTR pszFileText;
			pszFileText=(LPSTR)GlobalAlloc(GPTR,dwFileSize+1);
			if(pszFileText!=NULL)
			{
				DWORD dwRead;
				if(ReadFile(hFile,pszFileText,dwFileSize,&dwRead,NULL))
				{
					pszFileText[dwFileSize]=0; // Null terminator
					if(SetWindowText(hEdit,pszFileText)) bSuccess=TRUE; // It worked!
				}
				GlobalFree(pszFileText);
			}
		}
		CloseHandle(hFile);
	}
	return bSuccess;
}

BOOL SaveFile(HWND hEdit,LPSTR pszFileName)
{
	HANDLE hFile;
	BOOL bSuccess=FALSE;

	hFile=CreateFile(pszFileName,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
	if(hFile!=INVALID_HANDLE_VALUE)
	{
		DWORD dwTextLength;
		dwTextLength=GetWindowTextLength(hEdit);
		if(dwTextLength>0)
		{
			LPSTR pszText;
			pszText=(LPSTR)GlobalAlloc(GPTR,dwTextLength+1);
			if(pszText!=NULL)
			{
				if(GetWindowText(hEdit,pszText,dwTextLength+1))
				{
					DWORD dwWritten;
					if(WriteFile(hFile,pszText,dwTextLength,&dwWritten,NULL)) bSuccess=TRUE;
				}
				GlobalFree(pszText);
			}
		}
		CloseHandle(hFile);
	}
	return bSuccess;
}

BOOL DoFileOpenSave(HWND hwnd,BOOL bSave)
{
	OPENFILENAME ofn;
	char szFileName[MAX_PATH];

	ZeroMemory(&ofn,sizeof(ofn));
	szFileName[0]=0;

	ofn.lStructSize=sizeof(ofn);
	ofn.hwndOwner=hwnd;
	ofn.lpstrFilter="Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0";
	ofn.lpstrFile=szFileName;
	ofn.nMaxFile=MAX_PATH;
	ofn.lpstrDefExt="txt";

	if(bSave)
	{
		ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;
		if(GetSaveFileName(&ofn))
		{
			if(!SaveFile(GetDlgItem(hwnd,IDC_MAIN_TEXT),szFileName))
			{
				MessageBox(hwnd,"Save file failed.","Error",MB_OK|MB_ICONEXCLAMATION);
				return FALSE;
			}
		}
	}
	else
	{
		ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
		if(GetOpenFileName(&ofn))
		{
			if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT),szFileName))
			{
				MessageBox(hwnd,"Load of file failed.","Error",MB_OK|MB_ICONEXCLAMATION);
				return FALSE;
			}
		}
	}
	return TRUE;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
	switch(Message)
	{
		case WM_CREATE:
			CreateWindow("EDIT","",WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_WANTRETURN,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,(HMENU)IDC_MAIN_TEXT,GetModuleHandle(NULL),NULL);
			SendDlgItemMessage(hwnd,IDC_MAIN_TEXT,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
			break;
		case WM_SIZE:
			if(wParam!=SIZE_MINIMIZED)
				MoveWindow(GetDlgItem(hwnd,IDC_MAIN_TEXT),0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
			break;
		case WM_SETFOCUS:
			SetFocus(GetDlgItem(hwnd,IDC_MAIN_TEXT));
			break;
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
				case CM_FILE_OPEN:
					DoFileOpenSave(hwnd,FALSE);
					break;
				case CM_FILE_SAVEAS:
					DoFileOpenSave(hwnd,TRUE);
					break;
				case CM_FILE_EXIT:
					PostMessage(hwnd,WM_CLOSE,0,0);
					break;
				case CM_ABOUT:
					MessageBox(NULL,"File Editor for Windows!\nCreated using the Win32 API" ,"About...",0);
					break;
			}
			break;
		case WM_CLOSE:
			DestroyWindow(hwnd);
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hwnd, Message, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
	WNDCLASSEX wc;
	HWND hwnd;
	MSG Msg;

	wc.cbSize=sizeof(WNDCLASSEX);
	wc.style=0;
	wc.lpfnWndProc=WndProc;
	wc.cbClsExtra=0;
	wc.cbWndExtra=0;
	wc.hInstance=hInstance;
	wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor=LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
	wc.lpszMenuName="MAINMENU";
	wc.lpszClassName="WindowClass";
	wc.hIconSm=LoadIcon(hInstance,"A"); //A is name used by project icons

	if(!RegisterClassEx(&wc))
	{
		MessageBox(0,"Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL);
		return 0;
	}

	hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","File Editor Example Program",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,320,240,NULL,NULL,hInstance,NULL);

	if(hwnd==NULL)
	{
		MessageBox(0,"Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL);
		return 0;
	}

	ShowWindow(hwnd,1);
	UpdateWindow(hwnd);

	while(GetMessage(&Msg,NULL,0,0)>0)
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}
	return Msg.wParam;
}

main.h

#define CM_FILE_SAVEAS	9072
#define CM_FILE_EXIT	9071
#define CM_FILE_OPEN	9070
#define CM_ABOUT        9069
#define IDC_MAIN_TEXT 1001

resource.rc

#include"main.h"
MAINMENU MENU
{
 	POPUP"&File"
 	{
 		MENUITEM"&Open...",CM_FILE_OPEN
 		MENUITEM"Save &As...",CM_FILE_SAVEAS
 		MENUITEM SEPARATOR
 		MENUITEM"E&xit",CM_FILE_EXIT
 	}
	POPUP "&Help"
 	{
 		MENUITEM"&About",CM_ABOUT
 	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值