messageFindReplace = RegisterWindowMessage(FINDMSGSTRING);




/**** Arquivo Principal ****/

#include <windows.h>
#include <commdlg.h>
#include "resource.h"

#define EDITID   1
#define UNTITLED TEXT("(Editor de Texto)")

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL    CALLBACK AboutDlgProc(HWND, UINT, WPARAM, LPARAM);

/**Functions in ConfigurarArquivo.C*/
void PopFileInitialize(HWND);
BOOL PopFileOpenDlg(HWND, PTSTR, PTSTR);
BOOL PopFileSaveDlg(HWND, PTSTR, PTSTR);
BOOL PopFileRead(HWND, PTSTR);
BOOL PopFileWrite(HWND, PTSTR);

HWND PopFindFindDlg(HWND);
HWND PopFindReplaceDlg(HWND);
BOOL PopFindFindText(HWND, int *, LPFINDREPLACE);
BOOL PopFindReplaceText(HWND, int *, LPFINDREPLACE);
BOOL PopFindNextText(HWND, int *);
BOOL PopFindValidFind(void);

/**Functions in ConfigurarFonte.C*/
void PopFontInitialize(HWND);
BOOL PopFontChooseFont(HWND);
void PopFontSetFont(HWND);
void PopFontDeinitialize(void);

/**Functions in ConfigurarImpressora.C*/
BOOL PopPrntPrintFile(HINSTANCE, HWND, HWND, PTSTR);
     // Global variables
static HWND  hDlgModeless;
static TCHAR szAppName[] = TEXT("Editor");

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hPI, PSTR szCL, int iCmdShow) {
    MSG       msg;
    HWND      hwnd;
    HACCEL    hAccel;
    WNDCLASS  wndclass;

    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hI;
    wndclass.hIcon         = LoadIcon(hI, szAppName);
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = GetSysColorBrush(WHITE_BRUSH);
    wndclass.lpszMenuName  = szAppName;
    wndclass.lpszClassName = szAppName;

    if(!RegisterClass(&wndclass)) {
        MessageBox(
            NULL,
            TEXT("This program requires Windows NT!"),
            szAppName,
            MB_ICONERROR
        );
        return 0;
    }
    hwnd = CreateWindow(
        szAppName, NULL, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, hI, szCL
    );

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);
    hAccel = LoadAccelerators(hI, szAppName);

    while(GetMessage(&msg, NULL, 0, 0)) {
        if(hDlgModeless == NULL || !IsDialogMessage(hDlgModeless, &msg)) {
            if(!TranslateAccelerator (hwnd, hAccel, &msg)) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
                FreeConsole();
            }
        }
    }
    return msg.wParam;
}

void DoCaption(HWND hwnd, TCHAR *szTitleName) {
    TCHAR szCaption[64 + MAX_PATH];
    wsprintf(
        szCaption,
        TEXT("%s − %s"),
        szAppName,
        szTitleName[0] ? szTitleName : UNTITLED
    );
    SetWindowText(hwnd, szCaption);
}

void OkMessage(HWND hwnd, TCHAR * szMessage, TCHAR * szTitleName) {
    TCHAR szBuffer[64 + MAX_PATH];
    wsprintf(szBuffer,szMessage,szTitleName[0]?szTitleName:UNTITLED);
    MessageBox(
        hwnd,
        szBuffer,
        szAppName,
        MB_OK | MB_ICONEXCLAMATION
    );
}

short AskAboutSave(HWND hwnd, TCHAR * szTitleName) {
    TCHAR szBuffer[64 + MAX_PATH];
    int   iReturn;
    wsprintf(
        szBuffer,
        TEXT("Save current changes in %s?"),
        szTitleName[0] ? szTitleName : UNTITLED
    );
    iReturn = MessageBox(
        hwnd,
        szBuffer,
        szAppName,
        MB_YESNOCANCEL | MB_ICONQUESTION
    );
    if(iReturn == IDYES)
        if(!SendMessage (hwnd, WM_COMMAND, IDM_FILE_SAVE, 0))
            iReturn = IDCANCEL;
    return iReturn;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg, WPARAM wP,LPARAM lParam) {
    static BOOL      bNeedSave = FALSE;
    static HINSTANCE hInst;
    static HWND      hEdit;
    static int       iOffset;
    static TCHAR     szFileName[MAX_PATH], szTitleName[MAX_PATH];
    static UINT      messageFindReplace;
    int              iSelBeg, iSelEnd, iEnable;
    LPFINDREPLACE    pfr;

    switch(msg) {
        case WM_CREATE:
            hInst = ((LPCREATESTRUCT) lParam) -> hInstance;
               // Create the edit control child window
            hEdit = CreateWindow(
                TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL |
                            WS_BORDER | ES_LEFT | ES_MULTILINE |
                            ES_NOHIDESEL | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
                0, 0, 0, 0,
                hwnd, (HMENU) EDITID, hInst, NULL
            );

            SendMessage(hEdit, EM_LIMITTEXT, 32000, 0L);
            /**Initialize common dialog box stuff*/
            PopFileInitialize(hwnd);
            PopFontInitialize(hEdit);

            messageFindReplace = RegisterWindowMessage(FINDMSGSTRING);
            DoCaption(hwnd, szTitleName);
            return 0;
        case WM_SETFOCUS:
            SetFocus(hEdit);
            return 0;
        case WM_SIZE:
            MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
            return 0;
        case WM_INITMENUPOPUP:
            switch(lParam) {
                case 1:             // Edit menu
                    EnableMenuItem(
                        (HMENU) wP,
                        IDM_EDIT_UNDO,
                        SendMessage(hEdit,EM_CANUNDO,0,0L)?MF_ENABLED:MF_GRAYED
                    );
                    // Enable Paste if text is in the clipboard
                    EnableMenuItem(
                        (HMENU) wP,
                        IDM_EDIT_PASTE,
                        IsClipboardFormatAvailable(CF_TEXT)?MF_ENABLED:MF_GRAYED
                    );
                    // Enable Cut, Copy, and Del if text is selected
                    SendMessage(
                        hEdit,
                        EM_GETSEL,
                        (WPARAM) &iSelBeg,
                        (LPARAM) &iSelEnd
                    );
                    iEnable = iSelBeg != iSelEnd ? MF_ENABLED : MF_GRAYED;
                    EnableMenuItem((HMENU) wP, IDM_EDIT_CUT,   iEnable);
                    EnableMenuItem((HMENU) wP, IDM_EDIT_COPY,  iEnable);
                    EnableMenuItem((HMENU) wP, IDM_EDIT_CLEAR, iEnable);
                    break;
                case 2:             // Search menu
                    iEnable = hDlgModeless == NULL ? MF_ENABLED : MF_GRAYED;
                    EnableMenuItem((HMENU) wP, IDM_SEARCH_FIND,    iEnable);
                    EnableMenuItem((HMENU) wP, IDM_SEARCH_NEXT,    iEnable);
                    EnableMenuItem((HMENU) wP, IDM_SEARCH_REPLACE, iEnable);
                    break;
            }
            return 0;
        case WM_COMMAND:
            // Messages from edit control
            if(lParam && LOWORD(wP) == EDITID) {
                switch(HIWORD(wP)) {
                    case EN_UPDATE:
                        bNeedSave = TRUE;
                        return 0;
                    case EN_ERRSPACE:
                    case EN_MAXTEXT:
                        MessageBox(
                            hwnd,
                            TEXT("Edit control out of space."),
                            szAppName,
                            MB_OK | MB_ICONSTOP
                        );
                        return 0;
                }
                break;
            }
            switch(LOWORD(wP)) {
                // Messages from File menu
                case IDM_FILE_NEW:
                    if(bNeedSave && IDCANCEL==AskAboutSave(hwnd, szTitleName)) {
                        return 0;
                    }
                    SetWindowText(hEdit, TEXT("\0"));
                    szFileName[0]  = '\0';
                    szTitleName[0] = '\0';
                    DoCaption(hwnd, szTitleName);
                    bNeedSave = FALSE;
                    return 0;
                case IDM_FILE_OPEN:
                    if(bNeedSave && IDCANCEL == AskAboutSave(hwnd,szTitleName))
                        return 0;
                    if(PopFileOpenDlg (hwnd, szFileName, szTitleName)) {
                        if(!PopFileRead(hEdit, szFileName)) {
                            OkMessage(
                                hwnd,
                                TEXT("Could not read file %s!"),
                                szTitleName
                            );
                            szFileName[0]  = '\0';
                            szTitleName[0] = '\0';
                        }
                    }
                    DoCaption(hwnd, szTitleName);
                    bNeedSave = FALSE;
                    return 0;
                case IDM_FILE_SAVE:
                    if(szFileName[0]) {
                        if(PopFileWrite(hEdit, szFileName)) {
                            bNeedSave = FALSE;
                            return 1;
                        }
                        else {
                            OkMessage(
                                hwnd,
                                TEXT("Could not write file %s"),
                                szTitleName
                            );
                            return 0;
                        }
                    }
                case IDM_FILE_SAVE_AS:
                    if(PopFileSaveDlg(hwnd, szFileName, szTitleName)) {
                        DoCaption (hwnd, szTitleName);
                        if(PopFileWrite(hEdit, szFileName)) {
                            bNeedSave = FALSE;
                            return 1;
                        }
                        else {
                            OkMessage(
                                hwnd,
                                TEXT("Could not write file %s"),
                                szTitleName
                            );
                            return 0;
                        }
                    }
                    return 0;
                case IDM_FILE_PRINT:
                    if(!PopPrntPrintFile(hInst, hwnd, hEdit, szTitleName)) {
                        OkMessage(
                            hwnd,
                            TEXT("Could not print file %s"),
                            szTitleName
                        );
                    }
                    return 0;
                case IDM_APP_EXIT:
                    SendMessage(hwnd, WM_CLOSE, 0, 0);
                    return 0;
                    // Messages from Edit menu
                case IDM_EDIT_UNDO:
                    SendMessage(hEdit, WM_UNDO, 0, 0);
                    return 0;
                case IDM_EDIT_CUT:
                    SendMessage(hEdit, WM_CUT, 0, 0);
                    return 0;
                case IDM_EDIT_COPY:
                    SendMessage(hEdit, WM_COPY, 0, 0);
                    return 0;
                case IDM_EDIT_PASTE:
                    SendMessage(hEdit, WM_PASTE, 0, 0);
                    return 0;
                case IDM_EDIT_CLEAR:
                    SendMessage(hEdit, WM_CLEAR, 0, 0);
                    return 0;
                case IDM_EDIT_SELECT_ALL:
                    SendMessage(hEdit, EM_SETSEL, 0, -1);
                    return 0;
                    // Messages from Search menu
                case IDM_SEARCH_FIND:
                    SendMessage(hEdit, EM_GETSEL, 0, (LPARAM) &iOffset);
                    hDlgModeless = PopFindFindDlg(hwnd);
                    return 0;
                case IDM_SEARCH_NEXT:
                    SendMessage(hEdit, EM_GETSEL, 0, (LPARAM) &iOffset);
                    if(PopFindValidFind())
                        PopFindNextText(hEdit, &iOffset);
                    else
                        hDlgModeless = PopFindFindDlg(hwnd);
                    return 0;
                case IDM_SEARCH_REPLACE:
                    SendMessage(hEdit, EM_GETSEL, 0, (LPARAM) &iOffset);
                    hDlgModeless = PopFindReplaceDlg(hwnd);
                    return 0;
                case IDM_FORMAT_FONT:
                    if(PopFontChooseFont (hwnd))
                        PopFontSetFont(hEdit);
                    return 0;
                case IDM_AJUDA:
                    OkMessage(
                        hwnd,
                        TEXT("Help not yet implemented!"),
                        TEXT("\0")
                    );
                    return 0;
                case IDM_APP_ABOUT:
                    DialogBox(hInst, TEXT("AboutBox"), hwnd, AboutDlgProc);
                    return 0;
            }
            break;
        case WM_CLOSE:
            if(!bNeedSave || IDCANCEL != AskAboutSave(hwnd, szTitleName))
                DestroyWindow(hwnd);
            return 0;
        case WM_QUERYENDSESSION:
            if(!bNeedSave || IDCANCEL != AskAboutSave(hwnd, szTitleName))
                return 1;
            return 0;
        case WM_DESTROY:
            PopFontDeinitialize();
            PostQuitMessage(0);
            return 0;
        default:
            /**Process "Find−Replace" messages*/
            if(msg == messageFindReplace) {
                pfr = (LPFINDREPLACE) lParam;
                if(pfr->Flags & FR_DIALOGTERM)
                    hDlgModeless = NULL;
                if(pfr->Flags & FR_FINDNEXT)
                    if(!PopFindFindText(hEdit, &iOffset, pfr))
                    OkMessage(hwnd, TEXT("Text not found!"), TEXT("\0"));
                if(pfr->Flags & FR_REPLACE || pfr->Flags & FR_REPLACEALL)
                    if(!PopFindReplaceText(hEdit, &iOffset, pfr))
                    OkMessage(hwnd, TEXT("Text not found!"), TEXT("\0"));
                if(pfr->Flags & FR_REPLACEALL)
                    while(PopFindReplaceText(hEdit, &iOffset, pfr));
                return 0;
            }
            break;
    }
    return DefWindowProc(hwnd, msg, wP, lParam);
}

BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT msg, WPARAM wP, LPARAM lP) {
    switch(msg) {
        case WM_INITDIALOG:
            return TRUE;
        case WM_COMMAND:
            switch(LOWORD(wP)) {
                case IDOK:
                    EndDialog(hDlg, 0);
                    return TRUE;
            }
            break;
    }
    return FALSE;
}



/**** Arquivo: ConfigurarArquivo.c ****/

#include <windows.h>
#include <commdlg.h>

static OPENFILENAME ofn;

void PopFileInitialize(HWND hwnd) {
    static TCHAR szFilter[] = TEXT("Text Files(*.TXT)\0*.txt\0")  \
    TEXT ("ASCII Files (*.ASC)\0*.asc\0") \
    TEXT ("All Files (*.*)\0*.*\0\0");
    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = hwnd;
    ofn.hInstance         = NULL;
    ofn.lpstrFilter       = szFilter;
    ofn.lpstrCustomFilter = NULL;
    ofn.nMaxCustFilter    = 0;
    ofn.nFilterIndex      = 0;
    ofn.lpstrFile         = NULL;
    ofn.nMaxFile          = MAX_PATH;
    ofn.lpstrFileTitle    = NULL;
    ofn.nMaxFileTitle     = MAX_PATH;
    ofn.lpstrInitialDir   = NULL;
    ofn.lpstrTitle        = NULL;
    ofn.Flags             = 0;
    ofn.nFileOffset       = 0;
    ofn.nFileExtension    = 0;
    ofn.lpstrDefExt       = TEXT("txt");
    ofn.lCustData         = 0L;
    ofn.lpfnHook          = NULL;
    ofn.lpTemplateName    = NULL;
}

BOOL PopFileOpenDlg(HWND hwnd,PTSTR pstrFileName,
                    PTSTR pstrTitleName) {
    ofn.hwndOwner         = hwnd;
    ofn.lpstrFile         = pstrFileName;
    ofn.lpstrFileTitle    = pstrTitleName;
    ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT;

    return GetOpenFileName(&ofn);
}

BOOL PopFileSaveDlg(HWND hwnd, PTSTR pFileName, PTSTR pstrTitleName) {
    ofn.hwndOwner         = hwnd;
    ofn.lpstrFile         = pFileName;
    ofn.lpstrFileTitle    = pstrTitleName;
    ofn.Flags             = OFN_OVERWRITEPROMPT;
    return GetSaveFileName(&ofn);
}

BOOL PopFileRead(HWND hwndEdit, PTSTR pstrFileName) {
    BYTE   bySwap;
    DWORD  dwBytesRead;
    HANDLE hFile;
    int    i, iFileLength, iUniTest;
    PBYTE  pBuffer, pText, pConv;
          // Open the file
    if(INVALID_HANDLE_VALUE ==
        (hFile=CreateFile(pstrFileName,GENERIC_READ,FILE_SHARE_READ,
                         NULL, OPEN_EXISTING, 0, NULL)))
        return FALSE;
          // Get file size in bytes and allocate memory for read.          // Add an extra two bytes for zero termination.
    iFileLength = GetFileSize(hFile, NULL);
    pBuffer = malloc (iFileLength + 2);
          // Read file and put terminating zeros at end.
    ReadFile(hFile, pBuffer, iFileLength, &dwBytesRead, NULL);
    CloseHandle (hFile);
    pBuffer[iFileLength] = '\0';
    pBuffer[iFileLength + 1] = '\0';

    iUniTest = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE;
    if(IsTextUnicode(pBuffer, iFileLength, &iUniTest)) {
        pText = pBuffer + 2;
        iFileLength -= 2;
        if(iUniTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE) {
            for(i = 0; i < iFileLength / 2; i++) {
                bySwap = ((BYTE *) pText) [2 * i];
                ((BYTE *) pText) [2 * i] = ((BYTE *) pText) [2 * i + 1];
                ((BYTE *) pText) [2 * i + 1] = bySwap;
            }
        }
        // Allocate memory for possibly converted string
        pConv = malloc(iFileLength + 2);
        // If the edit control is not Unicode, convert Unicode text to
        // non−Unicode (i.e., in general, wide character).
        #ifndef UNICODE
            WideCharToMultiByte(CP_ACP, 0, (PWSTR) pText, -1, pConv,iFileLength + 2, NULL, NULL) ;
        // If the edit control is Unicode, just copy the string
        #else
            lstrcpy ((PTSTR) pConv, (PTSTR) pText);
        #endif
    }
    else {
        pText = pBuffer;
        pConv = malloc(2 * iFileLength + 2);
        // If the edit control is Unicode, convert ASCII text.
        #ifdef UNICODE          MultiByteToWideChar (CP_ACP, 0, pText, −1, (PTSTR) pConv,           iFileLength + 1);
               // If not, just copy buffer
        #else          lstrcpy ((PTSTR) pConv, (PTSTR) pText) ; #endif

        #endif // lstrcpy
    }
    SetWindowText(hwndEdit, (PTSTR) pConv);
    free(pBuffer);
    free(pConv);
    return TRUE;
}

BOOL PopFileWrite(HWND hwndEdit, PTSTR pstrFileName) {
    DWORD  dwBytesWritten;
    HANDLE hFile;
    int    iLength;
    PTSTR  pstrBuffer;
    WORD   wByteOrderMark = 0xFEFF;
    // Open the file, creating it if necessary
    if(INVALID_HANDLE_VALUE ==
       (hFile = CreateFile(pstrFileName, GENERIC_WRITE, 0,
                           NULL, CREATE_ALWAYS, 0, NULL)))
        return FALSE;
    // Get the number of characters in the edit control and allocate
    // memory for them.
    iLength = GetWindowTextLength(hwndEdit);
    pstrBuffer = (PTSTR) malloc((iLength + 1) * sizeof(TCHAR));

    if(!pstrBuffer) {
        CloseHandle(hFile);
        return FALSE;
    }
    // If the edit control will return Unicode text, write the          // byte order mark to the file.
    #ifdef UNICODE     WriteFile (hFile, &wByteOrderMark, 2, &dwBytesWritten, NULL);
    #endif
    // Get the edit buffer and write that out to the file.
    GetWindowText(hwndEdit, pstrBuffer, iLength + 1);
    WriteFile(hFile, pstrBuffer, iLength * sizeof(TCHAR), &dwBytesWritten, NULL);
    if((iLength * sizeof (TCHAR)) != (int) dwBytesWritten) {
        CloseHandle(hFile);
        free(pstrBuffer);
        return FALSE;
    }
    CloseHandle(hFile);
    free(pstrBuffer);
    return TRUE;
}




/**** Arquivo: ConfigurarBusca.c ****/

#include <windows.h>
#include <commdlg.h>
#include <tchar.h> // for _tcsstr (strstr for Unicode & non−Unicode)

#define MAX_STRING_LEN   256

static TCHAR szFindText[MAX_STRING_LEN];
static TCHAR szReplText[MAX_STRING_LEN];

HWND PopFindFindDlg(HWND hwnd) {
    static FINDREPLACE fr;// must be static for modeless dialog!!!

    fr.lStructSize      = sizeof(FINDREPLACE);
    fr.hwndOwner        = hwnd;
    fr.hInstance        = NULL;
    fr.Flags            = FR_HIDEUPDOWN | FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD;
    fr.lpstrFindWhat    = szFindText;
    fr.lpstrReplaceWith = NULL;
    fr.wFindWhatLen     = MAX_STRING_LEN;
    fr.wReplaceWithLen  = 0;
    fr.lCustData        = 0;
    fr.lpfnHook         = NULL;
    fr.lpTemplateName   = NULL;
    return FindText(&fr);
}

HWND PopFindReplaceDlg(HWND hwnd) {
    static FINDREPLACE fr;   // must be static for modeless dialog!!!
    fr.lStructSize      = sizeof(FINDREPLACE);
    fr.hwndOwner        = hwnd;
    fr.hInstance        = NULL;
    fr.Flags            = FR_HIDEUPDOWN | FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD;
    fr.lpstrFindWhat    = szFindText;
    fr.lpstrReplaceWith = szReplText;
    fr.wFindWhatLen     = MAX_STRING_LEN;
    fr.wReplaceWithLen  = MAX_STRING_LEN;
    fr.lCustData        = 0;
    fr.lpfnHook         = NULL;
    fr.lpTemplateName   = NULL;
    return ReplaceText(&fr);
}

BOOL PopFindFindText(HWND hwndEdit, int *piSearchOffset, LPFINDREPLACE pfr) {
    int    iLength, iPos;
    PTSTR  pstrDoc, pstrPos;
    // Read in the edit document
    iLength = GetWindowTextLength(hwndEdit);
    if(NULL == (pstrDoc = (PTSTR) malloc((iLength + 1) * sizeof(TCHAR))))
        return FALSE;
    GetWindowText(hwndEdit, pstrDoc, iLength + 1);
    // Search the document for the find string
    pstrPos = _tcsstr(pstrDoc + *piSearchOffset, pfr->lpstrFindWhat);
    free (pstrDoc);
    // Return an error code if the string cannot be found
    if(pstrPos == NULL)
        return FALSE;
    // Find the position in the document and the new start offset
    iPos = pstrPos - pstrDoc;
    * piSearchOffset = iPos + lstrlen (pfr->lpstrFindWhat);
    // Select the found text
    SendMessage(hwndEdit, EM_SETSEL, iPos, * piSearchOffset);
    SendMessage(hwndEdit, EM_SCROLLCARET, 0, 0);
    return TRUE;
}

BOOL PopFindNextText(HWND hwndEdit, int * piSearchOffset) {
    FINDREPLACE fr;
    fr.lpstrFindWhat = szFindText;
    return PopFindFindText(hwndEdit, piSearchOffset, &fr);
}

BOOL PopFindReplaceText(HWND hwndEdit, int *piSearchOffset, LPFINDREPLACE pfr) {
    // Find the text
    if(!PopFindFindText(hwndEdit, piSearchOffset, pfr))
        return FALSE;
        // Replace it
    SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM) pfr->lpstrReplaceWith);
    return TRUE;
}

BOOL PopFindValidFind(void) {
    return * szFindText != '\0';
}




/**** Arquivo: ConfigurarFonte.c ****/

#include <windows.h>
#include <commdlg.h>

static LOGFONT logfont;
static HFONT   hFont;

BOOL PopFontChooseFont(HWND hwnd) {
    CHOOSEFONT cf;
    cf.lStructSize    = sizeof(CHOOSEFONT);
    cf.hwndOwner      = hwnd;
    cf.hDC            = NULL;
    cf.lpLogFont      = &logfont;
    cf.iPointSize     = 0;
    cf.Flags          = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS | CF_EFFECTS;
    cf.rgbColors      = 0;
    cf.lCustData      = 0;
    cf.lpfnHook       = NULL;
    cf.lpTemplateName = NULL;
    cf.hInstance      = NULL;
    cf.lpszStyle      = NULL;
    cf.nFontType      = 0;
    cf.nSizeMin       = 0;
    cf.nSizeMax       = 0;
    return ChooseFont(&cf);
}

void PopFontInitialize(HWND hwndEdit) {
    GetObject(
        GetStockObject(SYSTEM_FONT),
        sizeof(LOGFONT),
        (PTSTR) &logfont
    );
    hFont = CreateFontIndirect(&logfont);
    SendMessage(hwndEdit, WM_SETFONT, (WPARAM) hFont, 0);
}

void PopFontSetFont(HWND hwndEdit) {
    HFONT hFontNew;
    RECT  rect;
    hFontNew = CreateFontIndirect(&logfont);
    SendMessage(hwndEdit, WM_SETFONT, (WPARAM) hFontNew, 0);
    DeleteObject(hFont);
    hFont = hFontNew;
    GetClientRect(hwndEdit, &rect);
    InvalidateRect(hwndEdit, &rect, TRUE);
}

void PopFontDeinitialize(void) {
    DeleteObject(hFont);
}





/**** Arquivo: ConfigurarImpressora.c ****/

#include <windows.h>

BOOL PopPrntPrintFile(HINSTANCE hInst, HWND hwnd, HWND hEdit, PTSTR pTitleName) {
    return FALSE;
}



/**** Arquivo: resource.h ****/

#define IDC_FILENAME                    1000
#define IDM_FILE_NEW                    40001
#define IDM_FILE_OPEN                   40002
#define IDM_FILE_SAVE                   40003
#define IDM_FILE_SAVE_AS                40004
#define IDM_FILE_PRINT                  40005
#define IDM_APP_EXIT                    40006
#define IDM_EDIT_UNDO                   40007
#define IDM_EDIT_CUT                    40008
#define IDM_EDIT_COPY                   40009
#define IDM_EDIT_PASTE                  40010
#define IDM_EDIT_CLEAR                  40011
#define IDM_EDIT_SELECT_ALL             40012
#define IDM_SEARCH_FIND                 40013
#define IDM_SEARCH_NEXT                 40014
#define IDM_SEARCH_REPLACE              40015
#define IDM_FORMAT_FONT                 40016
#define IDM_AJUDA                       40017
#define IDM_APP_ABOUT                   40018



/**** Arquivo: resource.rc ****/

#include "resource.h"
#include "afxres.h"

ABOUTBOX DIALOG DISCARDABLE  32, 32, 180, 100
STYLE DS_MODALFRAME | WS_POPUP
FONT 10, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",                    IDOK,66,80, 50,14
    ICON            "Editor",          IDC_STATIC, 7, 7, 20,20
    CTEXT           "Arquivos Necessários:",          IDC_STATIC,40,12,100, 8
    CTEXT           "libgdi32.a",IDC_STATIC, 7,40,166, 8
    CTEXT           "libcomdlg32.a",   IDC_STATIC, 7,52,166, 8
END

PRINTDLGBOX DIALOG DISCARDABLE  32, 32, 186, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Editor"
FONT 10, "MS Sans Serif"
BEGIN
    PUSHBUTTON      "Cancel",             IDCANCEL,67,74, 50,14
    CTEXT           "Sending",          IDC_STATIC, 8, 8,172, 8
    CTEXT           "",               IDC_FILENAME, 8,28,172, 8
    CTEXT           "to print spooler.",IDC_STATIC, 8,48,172, 8
END

/////////////////////////////////// // Menu

Editor MENU DISCARDABLE
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&New\tCtrl+N",    IDM_FILE_NEW
        MENUITEM "&Open...\tCtrl+O",IDM_FILE_OPEN
        MENUITEM "&Save\tCtrl+S",   IDM_FILE_SAVE
        MENUITEM "Save &As...",     IDM_FILE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "&Print\tCtrl+P",  IDM_FILE_PRINT
        MENUITEM SEPARATOR
        MENUITEM "E&xit",           IDM_APP_EXIT
    END
    POPUP "&Editar"
    BEGIN
        MENUITEM "&Undo\tCtrl+Z", IDM_EDIT_UNDO
        MENUITEM SEPARATOR
        MENUITEM "Cu&t\tCtrl+X",  IDM_EDIT_CUT
        MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY
        MENUITEM "&Paste\tCtrl+V",IDM_EDIT_PASTE
        MENUITEM "De&lete\tDel",  IDM_EDIT_CLEAR
        MENUITEM SEPARATOR
        MENUITEM "&Select All",   IDM_EDIT_SELECT_ALL
    END
    POPUP "Busca"
    BEGIN
        MENUITEM "&Find...\tCtrl+F",   IDM_SEARCH_FIND
        MENUITEM "Find &Next\tF3",     IDM_SEARCH_NEXT
        MENUITEM "&Replace...\tCtrl+R",IDM_SEARCH_REPLACE
    END
    POPUP "F&ormat"
    BEGIN
        MENUITEM "&Font...",           IDM_FORMAT_FONT
    END
    POPUP "Ajuda"
    BEGIN
        MENUITEM "&Help",              IDM_AJUDA
        MENUITEM "&About PopPad...",   IDM_APP_ABOUT
    END
END

Editor ACCELERATORS DISCARDABLE
BEGIN
    VK_BACK,  IDM_EDIT_UNDO,  VIRTKEY, ALT, NOINVERT
    VK_DELETE,IDM_EDIT_CLEAR, VIRTKEY, NOINVERT
    VK_DELETE,IDM_EDIT_CUT,   VIRTKEY, SHIFT, NOINVERT
    VK_F1,    IDM_AJUDA,      VIRTKEY, NOINVERT
    VK_F3,    IDM_SEARCH_NEXT,VIRTKEY, NOINVERT
    VK_INSERT,IDM_EDIT_COPY,  VIRTKEY, CONTROL, NOINVERT
    VK_INSERT,IDM_EDIT_PASTE, VIRTKEY, SHIFT,   NOINVERT
    "^C",     IDM_EDIT_COPY,     ASCII,  NOINVERT
    "^F",     IDM_SEARCH_FIND,   ASCII,  NOINVERT
    "^N",     IDM_FILE_NEW,      ASCII,  NOINVERT
    "^O",     IDM_FILE_OPEN,     ASCII,  NOINVERT
    "^P",     IDM_FILE_PRINT,    ASCII,  NOINVERT
    "^R",     IDM_SEARCH_REPLACE,ASCII,  NOINVERT
    "^S",     IDM_FILE_SAVE,     ASCII,  NOINVERT
    "^V",     IDM_EDIT_PASTE,    ASCII,  NOINVERT
    "^X",     IDM_EDIT_CUT,      ASCII,  NOINVERT
    "^Z",     IDM_EDIT_UNDO,     ASCII,  NOINVERT
END

Editor        ICON    DISCARDABLE     "poppad.ico"

Comentários