技术控

    今日:43| 主题:49507
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 用 C 编写的记事本

[复制链接]
说闹觉余 发表于 2016-11-29 18:49:43
165 3

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近想好好研究C,于是便拿记事本这个小程序练练手。
  自己从网上找了一个挺不错的,就从这个开始学习吧。。。。
  一:代码
  先建立一文件夹->方便管理与查看
  拿我来说,在d盘根目录下新建note文件夹
  1.新建一note.rc资源文件,代码如下。
  [code]#include "sample.h"  
  
A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "sample.ico"  
  
MAINMENU MENU  
{  
  POPUP "文件(&F)"  
{  
  MENUITEM "打开(&O)...", CM_FILE_OPEN  
  MENUITEM "另存为(&S)...", CM_FILE_SAVEAS  
  MENUITEM SEPARATOR  
  MENUITEM "关闭", CM_FILE_EXIT  
}  
  
POPUP "帮助(&H)"  
{  
  MENUITEM "关于(&A)", CM_ABOUT  
}  
}
[/code]  2.新建sample.h,代码如下
  [code]#define CM_FILE_SAVEAS    9072  
#define CM_FILE_EXIT    9071  
#define CM_FILE_OPEN    9070  
#define CM_ABOUT        9069
[/code]  3.新建源程序note.c ,代码如下
  [code]#include   
#include "sample.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;  
               if(SetWindowText(hEdit, pszFileText))  
                  bSuccess = TRUE;  
            }  
            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 = "文本文件 (*.txt)\0*.txt\0所有文件 (*.*)\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, "保存文件失败.", "错误信息",  
               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, "打开文件失败.", "错误信息",  
               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, "一个Windows C 记事本程序" , "关于...", 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, "注册窗口失败", "错误信息",  
         MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);  
      return 0;  
   }  
  
   hwnd = CreateWindowEx(  
      WS_EX_CLIENTEDGE,  
      g_szClassName,  
      "一个记事本程序",  
      WS_OVERLAPPEDWINDOW,  
      CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,  
      NULL, NULL, g_hInst, NULL);  
  
  
   if(hwnd == NULL)  
   {  
      MessageBox(0, "创建窗口失败", "错误信息",  
         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;  
}
[/code]  二:编译,连接运行
  在编译之前需要一个sample.ico图标.
  打开运行,输入cmd,回车,进入dos命令行
  进入d:note下
  1.用dir命令列一下当前目录包含文件。
   
用 C 编写的记事本-1 (include,记事本,文件夹,根目录,程序)
  
  2.编译源程序(用cl编译器,/c的意思是:只编译,不连接)

用 C 编写的记事本-2 (include,记事本,文件夹,根目录,程序)
  
  用dir命令查看一下当前目录,是不是多了一个note.obj文件。
  3.编译资源文件(用rc编译器编译)
123下一页
友荐云推荐




上一篇:定制化开发 Rational Team Concert 的 Project Dashboard 报表物件
下一篇:Best Free jQuery Plugins of 2016
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

BogdanKn 发表于 2016-11-30 14:21:05
前排,哇咔咔
回复 支持 反对

使用道具 举报

槐念 发表于 6 天前
好贴,被吓尿了
回复 支持 反对

使用道具 举报

杜丽 发表于 4 天前
要么回帖,要么捡肥皂
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表