鱼C论坛

 找回密码
 立即注册
查看: 2108|回复: 0

[技术交流] 一个C语言的Windows记事本

[复制链接]
发表于 2018-10-2 20:14:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
  1. #include <windows.h>

  2. #include "sample.h"

  3. static char g_szClassName[] = "MyWindowClass";
  4. static HINSTANCE g_hInst = NULL;

  5. #define IDC_MAIN_TEXT   1001

  6. BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
  7. {
  8.    HANDLE hFile;
  9.    BOOL bSuccess = FALSE;

  10.    hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
  11.       OPEN_EXISTING, 0, 0);
  12.    if(hFile != INVALID_HANDLE_VALUE)
  13.    {
  14.       DWORD dwFileSize;
  15.       dwFileSize = GetFileSize(hFile, NULL);
  16.       if(dwFileSize != 0xFFFFFFFF)
  17.       {
  18.          LPSTR pszFileText;
  19.          pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
  20.          if(pszFileText != NULL)
  21.          {
  22.             DWORD dwRead;
  23.             if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
  24.             {
  25.                pszFileText[dwFileSize] = 0;
  26.                if(SetWindowText(hEdit, pszFileText))
  27.                   bSuccess = TRUE;
  28.             }
  29.             GlobalFree(pszFileText);
  30.          }
  31.       }
  32.       CloseHandle(hFile);
  33.    }
  34.    return bSuccess;
  35. }

  36. BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
  37. {
  38.    HANDLE hFile;
  39.    BOOL bSuccess = FALSE;

  40.    hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
  41.       CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  42.    if(hFile != INVALID_HANDLE_VALUE)
  43.    {
  44.       DWORD dwTextLength;
  45.       dwTextLength = GetWindowTextLength(hEdit);
  46.       if(dwTextLength > 0)
  47.       {
  48.          LPSTR pszText;
  49.          pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
  50.          if(pszText != NULL)
  51.          {
  52.             if(GetWindowText(hEdit, pszText, dwTextLength + 1))
  53.             {
  54.                DWORD dwWritten;
  55.                if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
  56.                   bSuccess = TRUE;
  57.             }
  58.             GlobalFree(pszText);
  59.          }
  60.       }
  61.       CloseHandle(hFile);
  62.    }
  63.    return bSuccess;
  64. }

  65. BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
  66. {
  67.    OPENFILENAME ofn;
  68.    char szFileName[MAX_PATH];

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

  71.    ofn.lStructSize = sizeof(ofn);
  72.    ofn.hwndOwner = hwnd;
  73.    ofn.lpstrFilter = "文本文件 (*.txt)\0*.txt\0所有文件 (*.*)\0*.*\0\0";
  74.    ofn.lpstrFile = szFileName;
  75.    ofn.nMaxFile = MAX_PATH;
  76.    ofn.lpstrDefExt = "txt";

  77.    if(bSave)
  78.    {
  79.       ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
  80.          OFN_OVERWRITEPROMPT;
  81.          
  82.       if(GetSaveFileName(&ofn))
  83.       {
  84.          if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
  85.          {
  86.             MessageBox(hwnd, "保存文件失败.", "错误信息",
  87.                MB_OK | MB_ICONEXCLAMATION);
  88.             return FALSE;
  89.          }
  90.       }
  91.    }
  92.    else
  93.    {
  94.       ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  95.       if(GetOpenFileName(&ofn))
  96.       {
  97.          if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
  98.          {
  99.             MessageBox(hwnd, "打开文件失败.", "错误信息",
  100.                MB_OK | MB_ICONEXCLAMATION);
  101.             return FALSE;
  102.          }
  103.       }
  104.    }
  105.    return TRUE;
  106. }

  107. LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
  108. {
  109.    switch(Message)
  110.    {
  111.       case WM_CREATE:
  112.          CreateWindow("EDIT", "",
  113.             WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE |
  114.                ES_WANTRETURN,
  115.             CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  116.             hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL);

  117.          SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT,
  118.             (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
  119.       break;
  120.       case WM_SIZE:
  121.          if(wParam != SIZE_MINIMIZED)
  122.             MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),
  123.                HIWORD(lParam), TRUE);
  124.       break;
  125.       case WM_SETFOCUS:
  126.          SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
  127.       break;
  128.       case WM_COMMAND:
  129.          switch(LOWORD(wParam))
  130.          {
  131.             case CM_FILE_OPEN:
  132.                DoFileOpenSave(hwnd, FALSE);
  133.             break;
  134.             case CM_FILE_SAVEAS:
  135.                DoFileOpenSave(hwnd, TRUE);
  136.             break;
  137.             case CM_FILE_EXIT:
  138.                PostMessage(hwnd, WM_CLOSE, 0, 0);
  139.             break;
  140.             case CM_ABOUT:
  141.                MessageBox (NULL, "一个Windows C 记事本程序" , "关于...", 0);
  142.          }
  143.       break;
  144.       case WM_CLOSE:
  145.          DestroyWindow(hwnd);
  146.       break;
  147.       case WM_DESTROY:
  148.          PostQuitMessage(0);
  149.       break;
  150.       default:
  151.          return DefWindowProc(hwnd, Message, wParam, lParam);
  152.    }
  153.    return 0;
  154. }


  155. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  156.    LPSTR lpCmdLine, int nCmdShow)
  157. {
  158.    WNDCLASSEX WndClass;
  159.    HWND hwnd;
  160.    MSG Msg;

  161.    g_hInst = hInstance;

  162.    WndClass.cbSize        = sizeof(WNDCLASSEX);
  163.    WndClass.style         = 0;
  164.    WndClass.lpfnWndProc   = WndProc;
  165.    WndClass.cbClsExtra    = 0;
  166.    WndClass.cbWndExtra    = 0;
  167.    WndClass.hInstance     = g_hInst;
  168.    WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  169.    WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  170.    WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  171.    WndClass.lpszMenuName  = "MAINMENU";
  172.    WndClass.lpszClassName = g_szClassName;
  173.    WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

  174.    if(!RegisterClassEx(&WndClass))
  175.    {
  176.       MessageBox(0, "注册窗口失败", "错误信息",
  177.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  178.       return 0;
  179.    }

  180.    hwnd = CreateWindowEx(
  181.       WS_EX_CLIENTEDGE,
  182.       g_szClassName,
  183.       "一个记事本程序",
  184.       WS_OVERLAPPEDWINDOW,
  185.       CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
  186.       NULL, NULL, g_hInst, NULL);

  187.    if(hwnd == NULL)
  188.    {
  189.       MessageBox(0, "创建窗口失败", "错误信息",
  190.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  191.       return 0;
  192.    }

  193.    ShowWindow(hwnd, nCmdShow);
  194.    UpdateWindow(hwnd);

  195.    while(GetMessage(&Msg, NULL, 0, 0))
  196.    {
  197.       TranslateMessage(&Msg);
  198.       DispatchMessage(&Msg);
  199.    }
  200.    return Msg.wParam;
  201. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-13 14:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表