WindowsAPI 记事本

    xiaoxiao2021-03-25  45

    // source.cpp #include<Windows.h> #pragma comment(lib,"commondlg.lib") #include"commondlg.h" #include"resource.h" #define IDEDIT 1 LPCWCHAR szAppName = L"Notepad"; BOOL CALLBACK hwndAboutDlgProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); UINT AskSaveTips(HWND _hwndOwner, LPCWCHAR lpszText, LPCWCHAR lpszCaption){ MessageBeep(NULL); return MessageBox(_hwndOwner, lpszText, lpszCaption,MB_YESNOCANCEL | MB_ICONINFORMATION); } INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, INT iCmdShow) { MSG msg; HWND hwnd; HACCEL hAccel; WNDCLASS wndclass; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = CreateSolidBrush(RGB(255,255,255)); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndclass); hwnd = CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW | WS_VISIBLE, GetSystemMetrics(SM_CXSCREEN) / 4, GetSystemMetrics(SM_CYSCREEN) / 4, GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2, GetDesktopWindow(), 0, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1)); while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd,hAccel,&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HINSTANCE hInstance; static HMENU hMenu; static HWND hwndAbout, hwndEdit; static BOOL bNeedSave = FALSE; static std::wstring szText(L"untitled - Notepad"); static FileDlgObj FileObj(hwnd, _T("Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0"), _T("txt"), 1); static WCHAR szFilePath[MAX_PATH], szFileTitle[MAX_PATH]; static FindReplaceObj FindObj(hwnd); static INT FindReplaceWindowMessage; SYSTEMTIME systime; WCHAR szBuffer[MAX_PATH * 2]; static ChooseFontObj FontObj(hwnd); switch (message) { case WM_CREATE: hInstance = ((LPCREATESTRUCT)lParam)->hInstance; hwndEdit = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | \ WS_HSCROLL | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | \ ES_NOHIDESEL, 0, 0, 0, 0, hwnd, HMENU(1), hInstance, NULL); bNeedSave = FALSE; SetWindowText(hwnd, szText.c_str()); FindReplaceWindowMessage = RegisterWindowMessage(FINDMSGSTRING); hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU1)); SetMenu(hwnd, hMenu); break; case WM_SIZE: MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam),TRUE); break; case WM_COMMAND: if (HIWORD(wParam) == EN_UPDATE) bNeedSave = TRUE; switch (LOWORD(wParam)) // Menu identifier { case ID_FILE_NEW: if (bNeedSave) { szText = (szFilePath[0] == '\0') ? std::wstring(_T("Do you want to save change to(untitled)?")) : szFilePath + std::wstring(_T(" - ")) + szAppName; switch (AskSaveTips(hwnd, szText.c_str(), szAppName)) { case IDYES: if (szFilePath[0] == '\0') { if (FileObj.GetSaveFileInfo(szFilePath, szFileTitle) == TRUE) { if (!FileWrite(hwndEdit, szFilePath)) MessageBox(hwnd, _T("File Save Error!"), szAppName, MB_ICONEXCLAMATION); szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); SetWindowText(hwndEdit, _T('\0')); } bNeedSave = FALSE; } break; case IDNO: szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); SetWindowText(hwndEdit, _T('\0')); bNeedSave = FALSE; break; case IDCANCEL: ; // No things! break; } } else { szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); SetWindowText(hwndEdit, _T('\0')); } break; case ID_FILE_OPEN: if (bNeedSave) { szText = (szFilePath[0] == '\0') ? std::wstring(_T("Do you want to save change to(untitled)?")) : _T("Do you want to save change to\n") + std::wstring(szFilePath) + _T("?"); switch (AskSaveTips(hwnd, szText.c_str(), szAppName)) { case IDYES: SendMessage(hwnd, WM_COMMAND, ID_FILE_SAVE, NULL); /**/ break; case IDNO: szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); SetWindowText(hwndEdit, _T('\0')); bNeedSave = FALSE; if (FileObj.GetOpenFileInfo(szFilePath, szFileTitle) == TRUE) { if (!FileReadin(hwndEdit, szFilePath)) { MessageBox(hwnd, _T("File Open error!"), szAppName, MB_ICONEXCLAMATION); szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); } else { szText = (szFilePath[0] != '\0') ? std::wstring(szFilePath) + _T(" - ") + szAppName : std::wstring(_T("untitled")) + _T(" - ") + szAppName; SetWindowText(hwnd, szText.c_str()); } } break; case IDCANCEL: ; // No things! break; } } if (bNeedSave == FALSE) { if (FileObj.GetOpenFileInfo(szFilePath, szFileTitle) == TRUE) { SetWindowText(hwndEdit, _T("\0")); if (!FileReadin(hwndEdit, szFilePath)) { MessageBox(hwnd, _T("File Open error!"), szAppName, MB_ICONEXCLAMATION); szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); } else { szText = (szFilePath[0] != '\0') ? std::wstring(szFilePath) + _T(" - ") + szAppName : std::wstring(_T("untitled")) + _T(" - ") + szAppName; SetWindowText(hwnd, szText.c_str()); } } } break; case ID_FILE_SAVE: if (szFilePath[0] == '\0') SendMessage(hwnd, WM_COMMAND, ID_FILE_SAVE_AS, 0); else if (!FileWrite(hwndEdit,szFilePath)) MessageBox(hwnd, _T("File Save Error!"), szAppName, MB_ICONEXCLAMATION); bNeedSave = FALSE; break; case ID_FILE_SAVE_AS: if (FileObj.GetSaveFileInfo(szFilePath, szFileTitle) == TRUE) { if (!FileWrite(hwndEdit, szFilePath)) MessageBox(hwnd, _T("File Save Error!"), szAppName, MB_ICONEXCLAMATION); } bNeedSave = FALSE; break; case ID_FILE_PRINT: MessageBeep(0); MessageBox(hwnd, TEXT("No printer!"), szAppName, MB_ICONINFORMATION); break; case ID_FILE_EXIT: SendMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_EDIT_UNDO: SendMessage(hwndEdit, WM_UNDO, 0, 0); break; case ID_EDIT_CUT: SendMessage(hwndEdit, WM_CUT, 0, 0); break; case ID_EDIT_COPY: SendMessage(hwndEdit, WM_COPY, 0, 0); break; case ID_EDIT_PASTE: SendMessage(hwndEdit, WM_PASTE, 0, 0); break; case ID_EDIT_DELETE: SendMessage(hwndEdit,WM_CLEAR , 0, 0); break; case ID_EDIT_FIND: FindObj.FindTextOpen(hwndEdit); FindObj.FindResult(); break; case ID_EDIT_FIND_NEXT: FindObj.FindTextOpen(hwndEdit); FindObj.FindResult(); break; case ID_EDIT_REPLACE: FindObj.ReplaceTextOpen(hwndEdit); FindObj.ReplaceResult(); break; case ID_EDIT_SELECT_ALL: SendMessage(hwndEdit, EM_SETSEL, 0, LPARAM(GetWindowTextLength(hwndEdit))); break; case ID_EDIT_TIME_DATE: // Problems! GetLocalTime(&systime); wsprintf(szBuffer, TEXT("%d年/%d月/%d日/%d时/%分"), systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute); // insert string to edit break; case ID_FORMAT_WORDWRAP: if (GetMenuState(hMenu, ID_FORMAT_WORDWRAP, MF_BYCOMMAND) == MF_CHECKED) { CheckMenuItem(hMenu, ID_FORMAT_WORDWRAP, MF_UNCHECKED); SetWindowLong(hwndEdit, GWL_STYLE, (LONG)WS_CHILD | WS_VISIBLE | WS_BORDER | \ WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | \ ES_NOHIDESEL); MoveWindow(hwnd, GetSystemMetrics(SM_CXSCREEN) / 4, GetSystemMetrics(SM_CYSCREEN) / 4, GetSystemMetrics(SM_CXSCREEN) / 2 + 2, GetSystemMetrics(SM_CYSCREEN) / 2 + 2, TRUE); } else { CheckMenuItem(hMenu, ID_FORMAT_WORDWRAP, MF_CHECKED); SetWindowLong(hwndEdit, GWL_STYLE, (LONG)WS_CHILD | WS_VISIBLE | WS_BORDER | \ WS_HSCROLL | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | \ ES_NOHIDESEL); MoveWindow(hwnd, GetSystemMetrics(SM_CXSCREEN) / 4, GetSystemMetrics(SM_CYSCREEN) / 4, GetSystemMetrics(SM_CXSCREEN) / 2 + 2, GetSystemMetrics(SM_CYSCREEN) / 2, TRUE); } break; case ID_FORMAT_FONT: if(FontObj.SelectFontDlgOpen()) FontObj.SetFont(hwndEdit); break; case ID_HELP_HELP: MessageBeep(0); MessageBox(hwnd, TEXT("This is help not yet implement!"), szAppName, MB_ICONINFORMATION); break; case ID_HELP_ABOUT: DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),hwnd, hwndAboutDlgProc); break; } break; case WM_CLOSE: if (bNeedSave) { szText = (szFilePath[0] == '\0') ? std::wstring(_T("Do you want to save change to(untitled)?")) : szFilePath + std::wstring(_T(" - ")) + szAppName; switch (AskSaveTips(hwnd, szText.c_str(), szAppName)) { case IDYES: if (szFilePath[0] == '\0') { if (FileObj.GetSaveFileInfo(szFilePath, szFileTitle) == TRUE) { if (!FileWrite(hwndEdit, szFilePath)) MessageBox(hwnd, _T("File Save Error!"), szAppName, MB_ICONEXCLAMATION); szFilePath[0] = '\0'; szFileTitle[0] = '\0'; SetWindowText(hwnd, _T("untitled - Notepad")); SetWindowText(hwndEdit, _T('\0')); } else return LRESULT(FALSE); bNeedSave = FALSE; } else if (!FileWrite(hwndEdit, szFilePath)) { MessageBox(hwnd, _T("File Save Error!"), szAppName, MB_ICONEXCLAMATION); return LRESULT(0); } break; case IDCANCEL: return LRESULT(0); case IDNO: break; } } break; case WM_KEYDOWN: if (!(wParam == VK_ESCAPE)) break; case WM_DESTROY: PostQuitMessage(0); // Return to WinMain of the inside of the MSG structure break; default: if (message == FindReplaceWindowMessage) FindObj.ProcessingMessage(&FindObj,(LPFINDREPLACE)lParam); break; } return DefWindowProc(hwnd, message, wParam, lParam); } BOOL CALLBACK hwndAboutDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: break; case WM_COMMAND: if (LOWORD(wParam) == IDOK || SC_CLOSE) EndDialog(hwnd, TRUE); break; }return FALSE; } // resource.rc // Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS / // // Generated from the TEXTINCLUDE 2 resource. // #include "winres.h" / #undef APSTUDIO_READONLY_SYMBOLS / // Chinese (Simplified, PRC) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #ifdef APSTUDIO_INVOKED / // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""winres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Chinese (Simplified, PRC) resources / / // English (United States) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US / // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON1 ICON "F:\\Windows API Study notes\\资源文件\\Icon\\5.ico" / // // Dialog // IDD_DIALOG1 DIALOGEX 0, 0, 189, 103 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Anout" FONT 12, "@Fixedsys", 400, 0, 0x86 BEGIN CTEXT "Notepad",IDC_STATIC,45,19,78,13 LTEXT "Author:Tom\nE-Mail:Friendly_Monkey@outlook.com",IDC_STATIC,29,38,144,18 LTEXT "***********(Copyright)Tom,2017***********",IDC_STATIC,7,87,179,9 ICON IDI_ICON1,IDC_STATIC,14,16,20,20 PUSHBUTTON "Okay",IDOK,64,59,53,15 END / // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO BEGIN IDD_DIALOG1, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 182 TOPMARGIN, 7 BOTTOMMARGIN, 96 END END #endif // APSTUDIO_INVOKED / // // Menu // IDR_MENU1 MENU BEGIN POPUP "&File" BEGIN MENUITEM "&New\tCtrl+N", ID_FILE_NEW MENUITEM "&Open\tCtrl+O", ID_FILE_OPEN MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE MENUITEM "&Save As...", ID_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "&Print", ID_FILE_PRINT MENUITEM SEPARATOR MENUITEM "E&xit", ID_FILE_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO MENUITEM "&Cut\tCtrl+X", ID_EDIT_CUT MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE MENUITEM "&Delete\tDel", ID_EDIT_DELETE MENUITEM SEPARATOR MENUITEM "&Find...\tCtrl+F", ID_EDIT_FIND MENUITEM "&Find Next\tF3", ID_EDIT_FIND_NEXT MENUITEM "&Replace...", ID_EDIT_REPLACE MENUITEM SEPARATOR MENUITEM "&Select All\tCtrl+A", ID_EDIT_SELECT_ALL MENUITEM "Time/Date\tF5", ID_EDIT_TIME_DATE END POPUP "F&ormat" BEGIN MENUITEM "&Word Wrap", ID_FORMAT_WORDWRAP, CHECKED MENUITEM "&Font...", ID_FORMAT_FONT END POPUP "&Help" BEGIN MENUITEM "&Help", ID_HELP_HELP MENUITEM "&About...", ID_HELP_ABOUT END END / // // Accelerator // IDR_ACCELERATOR1 ACCELERATORS BEGIN "^C", ID_EDIT_COPY, ASCII, NOINVERT "^X", ID_EDIT_CUT, ASCII, NOINVERT "^F", ID_EDIT_FIND, ASCII, NOINVERT VK_F3, ID_EDIT_FIND_NEXT, VIRTKEY, NOINVERT "^V", ID_EDIT_PASTE, ASCII, NOINVERT "^A", ID_EDIT_SELECT_ALL, ASCII, NOINVERT VK_F5, ID_EDIT_TIME_DATE, VIRTKEY, NOINVERT "^Z", ID_EDIT_UNDO, ASCII, NOINVERT "^N", ID_FILE_NEW, ASCII, NOINVERT "^O", ID_FILE_OPEN, ASCII, NOINVERT "^S", ID_FILE_SAVE, ASCII, NOINVERT END #endif // English (United States) resources / #ifndef APSTUDIO_INVOKED / // // Generated from the TEXTINCLUDE 3 resource. // / #endif // not APSTUDIO_INVOKED // resource.h //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by Resource.rc // #define IDR_ACCELERATOR1 101 #define IDI_ICON1 102 #define IDD_DIALOG1 103 #define IDR_MENU1 104 #define ID_FILE_NEW 40002 #define ID_FILE_OPENCTRL 40003 #define ID_FILE_SAVE 40004 #define ID_FILE_SAVEAS 40005 #define ID_FILE_PRINT 40006 #define ID_FILE_EXIT 40007 #define ID_EDIT 40008 #define ID_EDIT_UNDO 40009 #define ID_EDIT_CUT 40010 #define ID_EDIT_COPY 40011 #define ID_EDIT_PASTE 40012 #define ID_EDIT_DELETE 40013 #define ID_EDIT_FIND 40014 #define ID_EDIT_FINDNEXT 40015 #define ID_EDIT_REPLACE 40016 #define ID_EDIT_SELECTALL 40017 #define ID_EDIT_TIME 40018 #define ID_EDIT_TIMEDATE 40019 #define ID_EDIT_SELECT_ALL 40020 #define ID_EDIT_TIME_DATE 40021 #define ID_FORMAT 40022 #define ID_FORMAT_WORDWRAP 40023 #define ID_FORMAT_FONT 40024 #define ID_BACKGROUND 40025 #define ID_BACKGROUND_DEFAULT 40026 #define ID_BACKGROUND_WHITE 40027 #define ID_BACKGROUND_BLACK 40028 #define ID_HELP 40029 #define ID_HELP_HELP 40030 #define ID_HELP_ABOUT 40031 #define ID_FILE_OPEN 40035 #define ID_FILE_SAVE_AS 40036 #define ID_EDIT_FIND_NEXT 40046 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40047 #define _APS_NEXT_CONTROL_VALUE 1002 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif // commondlg.lib download address: http://files.cnblogs.com/files/zhumingyou/Commondlg链接库.rar
    转载请注明原文地址: https://ju.6miu.com/read-37601.html

    最新回复(0)