Annonceindlæg fra Jysk IT
Sikkerhed skal være en del af driften
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
17. marts 2006 - 00:11
#3
En text editor der er ca. så simpel som det kan blive: #include <windows.h> #include <commctrl.h> #include <fstream> char CurrentFileName[256]; enum CommandEnum { FileOpenCmd = 1025, FileSaveCmd, FileCloseCmd, AboutCmd, }; enum WindowCtrlId { EditWindowId = 130 }; HINSTANCE InstanceHandle; HWND MainWindow, EditWindow; void OnFileSave(); bool ReadFile(const char *aFileName) { std::ifstream File(aFileName); if(!File) return false; std::string Line, Text; while(std::getline(File, Line)) { Text += Line.c_str(); Text += "\r\n"; } SendMessage(EditWindow, WM_SETTEXT, 0, (LPARAM )Text.c_str()); return true; } void OnFileOpen() { if(SendMessage(EditWindow, EM_GETMODIFY, 0, 0)) { if(MessageBox(MainWindow, "The current file has been modified\r\nDo you wan't to save it before closing?", "TextEd", MB_YESNO | MB_ICONQUESTION) == IDYES) { OnFileSave(); } } static char Filter[] = "txt (*.txt)\0*.txt\0All (*.*)\0*.*\0"; OPENFILENAME OpenFilename; memset(&OpenFilename, 0, sizeof(OpenFilename)); OpenFilename.lStructSize = sizeof(OpenFilename); OpenFilename.hwndOwner = MainWindow; OpenFilename.hInstance = InstanceHandle; OpenFilename.lpstrFilter = Filter; OpenFilename.lpstrFile = CurrentFileName; OpenFilename.nMaxFile = sizeof(CurrentFileName); OpenFilename.Flags = OFN_FILEMUSTEXIST; OpenFilename.lpstrDefExt = "txt"; if(GetOpenFileName(&OpenFilename)) { if(!ReadFile(CurrentFileName)) { CurrentFileName[0] = 0; std::string Msg = "Failed to open:\r\n"; Msg += CurrentFileName; MessageBox(MainWindow, Msg.c_str(), "TextEditor", MB_OK | MB_ICONWARNING); } } } void OnFileSave() { if(CurrentFileName[0] == 0) { // Need to Get A filename static char Filter[] = "txt (*.txt)\0*.txt\0All (*.*)\0*.*\0"; OPENFILENAME OpenFilename; memset(&OpenFilename, 0, sizeof(OpenFilename)); OpenFilename.lStructSize = sizeof(OpenFilename); OpenFilename.hwndOwner = MainWindow; OpenFilename.hInstance = InstanceHandle; OpenFilename.lpstrFilter = Filter; OpenFilename.lpstrFile = CurrentFileName; OpenFilename.nMaxFile = sizeof(CurrentFileName); OpenFilename.Flags = 0; OpenFilename.lpstrDefExt = "txt"; if(!GetSaveFileName(&OpenFilename)) { CurrentFileName[0] = 0; return; } } std::ofstream File(CurrentFileName, std::ios::binary); if(!File) { std::string Msg = "Failed to open:\r\n"; Msg += CurrentFileName; MessageBox(MainWindow, Msg.c_str(), "TextEditor", MB_OK | MB_ICONWARNING); CurrentFileName[0] = 0; return; } int TextLength = GetWindowTextLength(EditWindow); char *Temp = new char [TextLength + 1]; GetWindowText(EditWindow, Temp, TextLength + 1); File << Temp; delete [] Temp; } LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: if(SendMessage(EditWindow, EM_GETMODIFY, 0, 0)) { if(MessageBox(MainWindow, "The current file has been modified\r\nDo you wan't to save it before closing?", "TextEd", MB_YESNO | MB_ICONQUESTION) == IDYES) { OnFileSave(); } } PostQuitMessage(0); break; case WM_CREATE: MainWindow = hwnd; EditWindow = CreateWindow("EDIT", "", WS_VISIBLE | WS_VSCROLL | WS_CHILD | ES_MULTILINE | WS_HSCROLL, 20, 20, 100, 100, MainWindow, (HMENU )EditWindowId, InstanceHandle, 0); if(CurrentFileName[0]) { if(!ReadFile(CurrentFileName)) { std::string Msg = "Failed to open:\r\n"; Msg += CurrentFileName; MessageBox(hwnd, Msg.c_str(), "TextEd", MB_OK); CurrentFileName[0] = 0; } } SetFocus(EditWindow); break; case WM_COMMAND: switch(LOWORD(wParam)) { case FileCloseCmd: PostQuitMessage(0); break; case FileOpenCmd: OnFileOpen(); break; case FileSaveCmd: OnFileSave(); break; case AboutCmd: MessageBox(MainWindow, "TextEditor\r\nCopyright Bertel Brander 2006", "TextEditor", MB_OK); break; } break; case WM_SIZE: RECT ClientRect; GetClientRect(hwnd, &ClientRect); MoveWindow(EditWindow, ClientRect.left, ClientRect.top, ClientRect.right - ClientRect.left, ClientRect.bottom - ClientRect.top, TRUE); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } HWND CreateMainWindow() { WNDCLASS wc; memset(&wc, 0, sizeof(WNDCLASS)); wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ; wc.lpfnWndProc = (WNDPROC )MainWndProc; wc.hInstance = InstanceHandle; wc.hbrBackground = (HBRUSH )(COLOR_WINDOW + 1); wc.lpszClassName = "SimpleWinWndClass"; wc.lpszMenuName = 0; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClass(&wc)) return 0; HMENU FileMenu = CreateMenu(); AppendMenu(FileMenu, MF_STRING, FileOpenCmd, "Open"); AppendMenu(FileMenu, MF_STRING, FileSaveCmd, "Save"); AppendMenu(FileMenu, MF_SEPARATOR, 0 , 0); AppendMenu(FileMenu, MF_STRING, FileCloseCmd, "Close"); HMENU HelpMenu = CreateMenu(); AppendMenu(HelpMenu, MF_STRING, AboutCmd, "About"); HMENU MainMenu = CreateMenu(); AppendMenu(MainMenu, MF_POPUP, (UINT )FileMenu, "File"); AppendMenu(MainMenu, MF_POPUP, (UINT )HelpMenu, "Help"); return CreateWindow("SimpleWinWndClass", "Simple Text Editor", WS_MINIMIZEBOX | WS_VISIBLE | WS_MAXIMIZEBOX | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_THICKFRAME, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, MainMenu, InstanceHandle, 0); } int WINAPI WinMain(HINSTANCE Instance, HINSTANCE, LPSTR CmdLine, INT) { InstanceHandle = Instance; InitCommonControls(); if(CmdLine[0]) { strcpy(CurrentFileName, CmdLine); } if((MainWindow = CreateMainWindow()) == (HWND )0) { MessageBox(0, "Failed to create MainWindow!", "TextEditor", MB_OK); return 0; } ShowWindow(MainWindow, SW_SHOW); MSG Msg; while(GetMessage(&Msg, 0, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }