본문 바로가기

프로그램언어/C++

파일 입출력2

메모장 만들기1

 

텍스트 컨트롤을 이용하여 메모장 만들기

#include <windows.h>

#include <TCHAR.H>

#include <tchar.h>

#include "resource.h"

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

HINSTANCE hInst;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

    HWND hwnd;

    MSG msg;

    WNDCLASS WndClass;

    hInst = hInstance;

 

    WndClass.style = CS_HREDRAW | CS_VREDRAW;

    WndClass.lpfnWndProc = WndProc;

    WndClass.cbClsExtra = 0;

    WndClass.cbWndExtra = 0;

    WndClass.hInstance = hInstance;

    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);

    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

    WndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);

    WndClass.lpszClassName= _T("Window Class Name");

    RegisterClass(&WndClass);

    hwnd = CreateWindow( _T("Window Class Name"),  _T("Main Window Title"),  WS_OVERLAPPEDWINDOW,

        CW_USEDEFAULT,  CW_USEDEFAULT,  CW_USEDEFAULT, CW_USEDEFAULT,  NULL,  NULL,  hInstance,  NULL);

    ShowWindow(hwnd, nCmdShow);

    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0))

    {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }

    return (int)msg.wParam;

}

 

void FileRead(HWND hwnd, LPTSTR filename)

{

    HANDLE hFile;

    LPTSTR buffer;

    DWORD size, CharNum;

    int fileSize;

    hFile=CreateFile( filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );

    if (hFile == INVALID_HANDLE_VALUE)

        return;

    fileSize = GetFileSize(hFile, &size);

    buffer = new TCHAR[(int)fileSize/sizeof(TCHAR) + 1];

    memset(buffer, 0, fileSize);

    ReadFile(hFile, buffer, fileSize, &CharNum, NULL);

    buffer[(int)fileSize/sizeof(TCHAR)] = NULL;

    SetWindowText(hwnd, buffer);

    free(buffer);

    CloseHandle(hFile);

}

 

void FileSave(HWND hwnd, LPTSTR filename)

{

    HANDLE hFile;

    LPTSTR buffer;

    int size;

#ifdef _UNICODE

    WORD uni = 0xFEFF;

    DWORD nSize;

#endif

    hFile = CreateFile( filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );

#ifdef _UNICODE

    WriteFile(hFile, &uni, 2, &nSize, NULL);

#endif

    size = GetWindowTextLength(hwnd);

    buffer = new TCHAR[size + 1];

    memset(buffer, 0, (size+1)*sizeof(TCHAR));

    size = GetWindowText(hwnd, (LPTSTR)buffer, size+1);

    buffer[size] = NULL;

    WriteFile(hFile, buffer, size*sizeof(TCHAR), (LPDWORD)&size, NULL);

    free(buffer);

    CloseHandle(hFile);

}

 

#define IDC_EDIT1 100

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

    static HWND hEdit;

    RECT rect;

 

    switch (iMsg)

    {

    case WM_CREATE:

        GetClientRect(hwnd, &rect);

        hEdit = CreateWindow(_T("edit"),  NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |

            ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE, 0, 100, rect.right, rect.bottom, hwnd,

            (HMENU)IDC_EDIT1, hInst, NULL );

        return 0;

    case WM_SIZE:

        GetClientRect(hwnd, &rect);

        MoveWindow(hEdit, 0, 0, rect.right, rect.bottom, TRUE);

        return 0;

    case WM_COMMAND:

        switch(LOWORD(wParam))

        {

        case ID_FILEOPEN:

            FileRead(hEdit, _T("test2.txt"));

            break;

        case ID_FILESAVE:

            FileSave(hEdit, _T("test2.txt"));

            break;

        }

        return 0;

    case WM_DESTROY:

        PostQuitMessage(0);

        return 0;

    }

    return DefWindowProc(hwnd, iMsg, wParam, lParam);

}

실행 결과]

 

 

 

리치에디트 컨트롤로 메모장 만들기

#include <windows.h>

#include <TCHAR.H>

#include <richedit.h>

#include "resource.h"

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

HINSTANCE hInst;

 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

    HINSTANCE hRichedit;

    HWND hwnd;

    MSG msg;

    WNDCLASS WndClass;

    hInst = hInstance;

    WndClass.style = CS_HREDRAW | CS_VREDRAW;

    WndClass.lpfnWndProc = WndProc;

    WndClass.cbClsExtra = 0;

    WndClass.cbWndExtra = 0;

    WndClass.hInstance = hInstance;

    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);

    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

    WndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU8_5);

    WndClass.lpszClassName = _T("Window Class Name");

    RegisterClass(&WndClass);

    hRichedit = LoadLibrary(_T("RICHED20.DLL"));

    hwnd = CreateWindow( _T("Window Class Name"), _T("Main Window Title"), WS_OVERLAPPEDWINDOW,

        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, nCmdShow);

    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0))

    {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }

    FreeLibrary(hRichedit);

    return (int)msg.wParam;

}

 

DWORD CALLBACK StreamInCallback(DWORD dwCookie, LPBYTE buffer, LONG size, LONG *CharNum)

{

    HANDLE hFile = (HANDLE)dwCookie;

    ReadFile(hFile, buffer, size, (LPDWORD)CharNum, NULL);

    return(0);

}

 

DWORD CALLBACK StreamOutCallback(DWORD dwCookie, LPBYTE buffer, LONG size, LONG *CharNum)

{

    HANDLE hFile = (HANDLE)dwCookie;

    WriteFile(hFile, buffer, size, (LPDWORD)CharNum, NULL);

    return(0);

}

 

void FileRead(HWND hwnd, LPTSTR filename)

{

    HANDLE hFile;

    EDITSTREAM es;

    hFile=CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);

    if (hFile == INVALID_HANDLE_VALUE) return;

    es.dwCookie = (DWORD)hFile;

    es.pfnCallback = StreamInCallback;

    SendMessage(hwnd, EM_STREAMIN, (WPARAM)SF_RTF, (LPARAM)&es);

    CloseHandle(hFile);

}

 

void FileSave(HWND hwnd, LPTSTR filename)

{

    HANDLE hFile;

    EDITSTREAM es;

    hFile = CreateFile( filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );

    es.dwCookie = (DWORD)hFile;

    es.pfnCallback = StreamOutCallback;

    SendMessage(hwnd, EM_STREAMOUT, (WPARAM)SF_RTF, (LPARAM)&es);

    CloseHandle(hFile);

}

 

#define IDC_RICHEDIT 100

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

    static HWND hRichedit;

    CHOOSEFONT FONT;

    LOGFONT LogFont;

    RECT rect;

    CHARFORMAT cf;

 

    switch (iMsg)

    {

    case WM_CREATE:

        GetClientRect(hwnd, &rect);

        hRichedit = CreateWindow(_T("RichEdit20W"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |

            ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE, 0, 100, rect.right, rect.bottom, hwnd,
           
(HMENU)IDC_RICHEDIT, hInst, NULL );

        return 0;

    case WM_SIZE:

        GetClientRect(hwnd, &rect);

        MoveWindow(hRichedit, 0, 0, rect.right, rect.bottom, TRUE);

        return 0;

    case WM_COMMAND:

        switch(LOWORD(wParam))

        {

        case ID_FILEOPEN:

            FileRead(hRichedit, _T("test3.txt"));

            break;

        case ID_FILESAVE:

            FileSave(hRichedit, _T("test3.txt"));

            break;

        case ID_FONTDLG:

            memset(&FONT, 0, sizeof(CHOOSEFONT));

            FONT.lStructSize = sizeof(CHOOSEFONT);

            FONT.hwndOwner = hwnd;

            FONT.lpLogFont= &LogFont;

            FONT.Flags = CF_EFFECTS | CF_SCREENFONTS;

            if(ChooseFont(&FONT)!=0)

            {

                cf.cbSize = sizeof (CHARFORMAT);

                cf.dwMask = CFM_FACE | CFM_SIZE | CFM_COLOR;

                cf.yHeight = FONT.iPointSize * 3;

                cf.dwEffects = NULL;

                _tcscpy_s(cf.szFaceName, FONT.lpLogFont -> lfFaceName);

                cf.crTextColor = FONT.rgbColors;

                SendMessage(hRichedit, EM_SETCHARFORMAT, (WPARAM)(UINT)SCF_SELECTION, (LPARAM)&cf);

            }

            return 0;

        }

        return 0;

    case WM_DESTROY:

        PostQuitMessage(0);

        return 0;

    }

    return DefWindowProc(hwnd, iMsg, wParam, lParam);

}

실행 결과]

 

'프로그램언어 > C++' 카테고리의 다른 글

윈도우 소켓2  (0) 2021.01.13
윈도우 소켓1  (0) 2021.01.12
파일 입출력1  (0) 2021.01.05
컨트롤 윈도우 사용하기  (0) 2021.01.05
MID 프로그래밍  (0) 2021.01.03