home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 November / PCWorld_2000-11_cd.bin / Software / Topware / devc40 / _SETUP.6 / Group22 / Main.c < prev    next >
C/C++ Source or Header  |  2000-03-01  |  6KB  |  226 lines

  1. #include <windows.h>
  2. #pragma hdrstop
  3.  
  4. #include "Main.h"
  5.  
  6. static char g_szClassName[] = "MyWindowClass";
  7. static HINSTANCE g_hInst = NULL;
  8.  
  9. #define IDC_MAIN_TEXT   1001
  10.  
  11. BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
  12. {
  13.    HANDLE hFile;
  14.    BOOL bSuccess = FALSE;
  15.  
  16.    hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
  17.       OPEN_EXISTING, 0, 0);
  18.    if(hFile != INVALID_HANDLE_VALUE)
  19.    {
  20.       DWORD dwFileSize;
  21.       dwFileSize = GetFileSize(hFile, NULL);
  22.       if(dwFileSize != 0xFFFFFFFF)
  23.       {
  24.          LPSTR pszFileText;
  25.          pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
  26.          if(pszFileText != NULL)
  27.          {
  28.             DWORD dwRead;
  29.             if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
  30.             {
  31.                pszFileText[dwFileSize] = 0; // Null terminator
  32.                if(SetWindowText(hEdit, pszFileText))
  33.                   bSuccess = TRUE; // It worked!
  34.             }
  35.             GlobalFree(pszFileText);
  36.          }
  37.       }
  38.       CloseHandle(hFile);
  39.    }
  40.    return bSuccess;
  41. }
  42.  
  43. BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
  44. {
  45.    HANDLE hFile;
  46.    BOOL bSuccess = FALSE;
  47.  
  48.    hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
  49.       CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  50.    if(hFile != INVALID_HANDLE_VALUE)
  51.    {
  52.       DWORD dwTextLength;
  53.       dwTextLength = GetWindowTextLength(hEdit);
  54.       if(dwTextLength > 0)// No need to bother if there's no text.
  55.       {
  56.          LPSTR pszText;
  57.          pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
  58.          if(pszText != NULL)
  59.          {
  60.             if(GetWindowText(hEdit, pszText, dwTextLength + 1))
  61.             {
  62.                DWORD dwWritten;
  63.                if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
  64.                   bSuccess = TRUE;
  65.             }
  66.             GlobalFree(pszText);
  67.          }
  68.       }
  69.       CloseHandle(hFile);
  70.    }
  71.    return bSuccess;
  72. }
  73.  
  74. BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
  75. {
  76.    OPENFILENAME ofn;
  77.    char szFileName[MAX_PATH];
  78.  
  79.    ZeroMemory(&ofn, sizeof(ofn));
  80.    szFileName[0] = 0;
  81.  
  82.    ofn.lStructSize = sizeof(ofn);
  83.    ofn.hwndOwner = hwnd;
  84.    ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0";
  85.    ofn.lpstrFile = szFileName;
  86.    ofn.nMaxFile = MAX_PATH;
  87.    ofn.lpstrDefExt = "txt";
  88.  
  89.    if(bSave)
  90.    {
  91.       ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
  92.          OFN_OVERWRITEPROMPT;
  93.          
  94.       if(GetSaveFileName(&ofn))
  95.       {
  96.          if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
  97.          {
  98.             MessageBox(hwnd, "Save file failed.", "Error",
  99.                MB_OK | MB_ICONEXCLAMATION);
  100.             return FALSE;
  101.          }
  102.       }
  103.    }
  104.    else
  105.    {
  106.       ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  107.       if(GetOpenFileName(&ofn))
  108.       {
  109.          if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
  110.          {
  111.             MessageBox(hwnd, "Load of file failed.", "Error",
  112.                MB_OK | MB_ICONEXCLAMATION);
  113.             return FALSE;
  114.          }
  115.       }
  116.    }
  117.    return TRUE;
  118. }
  119.  
  120. LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
  121. {
  122.    switch(Message)
  123.    {
  124.       case WM_CREATE:
  125.          CreateWindow("EDIT", "",
  126.             WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE |
  127.                ES_WANTRETURN,
  128.             CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
  129.             hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL);
  130.  
  131.          SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT,
  132.             (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
  133.       break;
  134.       case WM_SIZE:
  135.          if(wParam != SIZE_MINIMIZED)
  136.             MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),
  137.                HIWORD(lParam), TRUE);
  138.       break;
  139.       case WM_SETFOCUS:
  140.          SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
  141.       break;
  142.       case WM_COMMAND:
  143.          switch(LOWORD(wParam))
  144.          {
  145.             case CM_FILE_OPEN:
  146.                DoFileOpenSave(hwnd, FALSE);
  147.             break;
  148.             case CM_FILE_SAVEAS:
  149.                DoFileOpenSave(hwnd, TRUE);
  150.             break;
  151.             case CM_FILE_EXIT:
  152.                PostMessage(hwnd, WM_CLOSE, 0, 0);
  153.             break;
  154.             case CM_ABOUT:
  155.                MessageBox (NULL, "File Editor for Windows !\n Using the Win32 API" , "About...", 0);
  156.          }
  157.       break;
  158.       case WM_CLOSE:
  159.          DestroyWindow(hwnd);
  160.       break;
  161.       case WM_DESTROY:
  162.          PostQuitMessage(0);
  163.       break;
  164.       default:
  165.          return DefWindowProc(hwnd, Message, wParam, lParam);
  166.    }
  167.    return 0;
  168. }
  169.  
  170.  
  171. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  172.    LPSTR lpCmdLine, int nCmdShow)
  173. {
  174.    WNDCLASSEX WndClass;
  175.    HWND hwnd;
  176.    MSG Msg;
  177.  
  178.    g_hInst = hInstance;
  179.  
  180.    WndClass.cbSize        = sizeof(WNDCLASSEX);
  181.    WndClass.style         = 0;
  182.    WndClass.lpfnWndProc   = WndProc;
  183.    WndClass.cbClsExtra    = 0;
  184.    WndClass.cbWndExtra    = 0;
  185.    WndClass.hInstance     = g_hInst;
  186.    WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  187.    WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  188.    WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  189.    WndClass.lpszMenuName  = "MAINMENU";
  190.    WndClass.lpszClassName = g_szClassName;
  191.    WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  192.  
  193.    if(!RegisterClassEx(&WndClass))
  194.    {
  195.       MessageBox(0, "Window Registration Failed!", "Error!",
  196.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  197.       return 0;
  198.    }
  199.  
  200.    hwnd = CreateWindowEx(
  201.       WS_EX_CLIENTEDGE,
  202.       g_szClassName,
  203.       "A File Program",
  204.       WS_OVERLAPPEDWINDOW,
  205.       CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,
  206.       NULL, NULL, g_hInst, NULL);
  207.  
  208.    if(hwnd == NULL)
  209.    {
  210.       MessageBox(0, "Window Creation Failed!", "Error!",
  211.          MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  212.       return 0;
  213.    }
  214.  
  215.    ShowWindow(hwnd, nCmdShow);
  216.    UpdateWindow(hwnd);
  217.  
  218.    while(GetMessage(&Msg, NULL, 0, 0))
  219.    {
  220.       TranslateMessage(&Msg);
  221.       DispatchMessage(&Msg);
  222.    }
  223.    return Msg.wParam;
  224. }
  225.  
  226.