//头文件//

  main.h

  #define CM_FILE_SAVEAS 9072

  #define CM_FILE_EXIT 9071

  #define CM_FILE_OPEN 9070

  #define CM_ABOUT 9069

  //主程序文件//

  main.c

  /*****************************************************/

  #include <windows.h>

  #pragma hdrstop

  #include "Main.h"

  static char g_szClassName[] = "MyWindowClass";

  static HINSTANCE g_hInst = NULL;

  #define IDC_MAIN_TEXT 1001

  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)// No need to bother if there's no text.

   {

   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, g_hInst, 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 !\n Using the Win32 API" , "About...", 0);

   }

   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 WndClass;

   HWND hwnd;

   MSG Msg;

   g_hInst = hInstance;

   WndClass.cbSize = sizeof(WNDCLASSEX);

   WndClass.style = 0;

   WndClass.lpfnWndProc = WndProc;

   WndClass.cbClsExtra = 0;

   WndClass.cbWndExtra = 0;

   WndClass.hInstance = g_hInst;

   WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

   WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);

   WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

   WndClass.lpszMenuName = "MAINMENU";

   WndClass.lpszClassName = g_szClassName;

   WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

   if(!RegisterClassEx(&WndClass))

   {

   MessageBox(0, "Window Registration Failed!", "Error!",

   MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);

   return 0;

   }

   hwnd = CreateWindowEx(

   WS_EX_CLIENTEDGE,

   g_szClassName,

   "A File Program",

   WS_OVERLAPPEDWINDOW,

   CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,

   NULL, NULL, g_hInst, NULL);

   if(hwnd == NULL)

   {

   MessageBox(0, "Window Creation Failed!", "Error!",

   MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);

   return 0;

   }

   ShowWindow(hwnd, nCmdShow);

   UpdateWindow(hwnd);

   while(GetMessage(&Msg, NULL, 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 //主程序文件// main.c /*****************************************************/ #include <windows.h> #pragma hdrstop #include "Main.h" static char
g_szClassName[] = "MyWindowClass"; static HINSTANCE g_hInst = NULL; #define IDC_MAIN_TEXT 1001 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)// No need to bother if there's no text. { 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, g_hInst,
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 !\n Using the Win32 API" , "About...", 0); } 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 WndClass; HWND hwnd; MSG Msg; g_hInst = hInstance; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = 0;
WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = g_hInst; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
WndClass.lpszMenuName = "MAINMENU"; WndClass.lpszClassName = g_szClassName; WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
return 0; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "A File Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, NULL, NULL, g_hInst, NULL); if(hwnd == NULL) { MessageBox(0, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION
| MB_OK | MB_SYSTEMMODAL); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }

一个简单的文本编辑器。(是在DEV C++下写的)的更多相关文章

  1. python使用wxPython创建一个简单的文本编辑器。

    ubuntu下通过'sudo apt-get install python-wxtools'下载wxPython.load和save函数用于加载和保存文件内容,button通过Bind函数绑定这两个函 ...

  2. 学习vi和vim编辑(3):一个简单的文本编辑器(2)

    然后文章,继续评论vi编辑简单的文本编辑命令. 本文主要是删除的文字.复制,运动命令. 删除文本: 正如上一篇文章中讲过的,对于删除命令("d")也具有"(command ...

  3. C++ 容器的综合应用的一个简单实例——文本查询程序

    C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...

  4. 原生JS实现简单富文本编辑器2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 原生JS实现简单富文本编辑器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)

    简单的写了一个文本编辑器,功能很简单,但足以把文件IO相关的操作熟悉了,可能功能或者分配的大小还不够完善.请参考参考: #include <stdio.h> #include <co ...

  7. JS 的execCommand 方法 做的一个简单富文本

    execCommand 当一个 HTML 文档切换到设计模式(designMode)时,文档对象暴露 execCommand 方法,该方法允许运行命令来操纵可编辑区域的内容.大多数命令影响文档的选择( ...

  8. C语言实例解析精粹学习笔记——39(简单的文本编辑器)

    实例说明: 编辑一个简单的单行文本编辑器,编辑命令有以下几种:(E.Q.R.I.D) 只有自己在完全空白的情况下编写出来的程序,才是真正自己会的程序,现在所做的,不过是程序的搬运工,把书上的程序搬到网 ...

  9. Win7下安装一个装逼文本编辑器Atom + activate-power-mode插件

    Atom是Github推出的一个文本编辑器,搜索一下大概是给Web前端用的,最近比较火的是他的一个插件activate-power-mode,可以实现打字屏振效果. 用来装装逼还是挺适合的,本来想试试 ...

随机推荐

  1. retain、strong、weak、assign区别

    1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a 和b指向同一块内存,请问当a不再需要这块内存,能 ...

  2. ANDROID SHAPE画圆形背景_ANDROID实现角标布局

    ANDROID SHAPE画圆形背景_ANDROID实现角标布局 <?xml version="1.0" encoding="UTF-8"?> &l ...

  3. VPN的分类方式

    VPN的分类方式    VPN的分类方式比较混乱.不同的生产厂家在销售它们的VPN产品时使用了不同的分类方式,它们主要是产品的角度来划分的.不同的ISP在开展VPN业务时也推出了不同的分类方式,他们主 ...

  4. 2016 Multi-University Training Contest 8 总结

    回家之后一堆的事情,最后两场多校都没怎么参加,终于现在有些时间可以把第八场的总结补上. 欣君开局看出06题公式,我照着写,一A,差一分钟拿到FB,有点可惜. 磊哥觉得11题水题,写了一下,一A. 欣君 ...

  5. C++中实现链表的删除和颠倒

    MFC工程中关于链表的操作 1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向. 由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单 ...

  6. oracle字符集

    oracle server端字符集

  7. 差一本CSS 3的书,有兴趣的作者来写

    最近出版了一套CSS图书,但是缺一个CSS 3作者,是要独立写一本书的,所以要求作者务必有2年以上的经验,有写作时间和写作爱好 平时写BLOG者优先 有兴趣的可以联系Q:1602943293,验证:写 ...

  8. SQL学习之使用视图

    1.简介:视图是虚拟的表.与包含的数据不一样,视图只包含使用时动态检索数据的查询.重点:视图是一个查询,不是一个表!

  9. inline函数和一般的函数有什么不同

    1.比如: int g(int x) { return x + x; } int f() { return g(); } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者. 如 ...

  10. ADO知识的运用二(Day 28)

    可能是最近有些沉迷于电视剧了,所以,好多天都没写总结了.我知道这样不好,但又老管不住自己,也许是我自控力太差了吧......呵呵,如果在不写总结,可能以后就会成为习惯了.所以今天要赶紧补上...... ...