一个简单的记事本
1 #include <Windows.h> 2 #include "resource.h" 3 #include <stdio.h> 4 5 void echo(char *str) 6 { 7 MessageBox(NULL, str, TEXT("提示"), MB_OK); 8 } 9 10 int CALLBACK DialogProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) 11 { 12 OPENFILENAME ofn; // OpenFileName 的结构体 13 char szFile[260]; // 保存文件名称的缓冲字符串 14 HANDLE hf; // 文件句柄 15 DWORD fileSize, readSize; 16 char *buffer; 17 18 switch(Message) 19 { 20 case WM_INITDIALOG: 21 break; 22 case WM_COMMAND: 23 { 24 switch(wParam) 25 { 26 case ID_NEW_FILE: 27 SetDlgItemText(hwnd, IDC_TEXT, ""); 28 break; 29 case ID_OPEN_FILE: 30 // 初始化 OPENFILENAME 结构体 31 ZeroMemory(&ofn, sizeof(ofn)); 32 ofn.lStructSize = sizeof(ofn); 33 ofn.hwndOwner = hwnd; 34 ofn.lpstrFile = szFile; 35 // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 36 // use the contents of szFile to initialize itself. 37 ofn.lpstrFile[0] = '\0'; 38 ofn.nMaxFile = sizeof(szFile); 39 ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; 40 ofn.nFilterIndex = 1; 41 ofn.lpstrFileTitle = NULL; 42 ofn.nMaxFileTitle = 0; 43 ofn.lpstrInitialDir = NULL; 44 ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 45 46 // 若成功获取到文件名 47 if (GetOpenFileName(&ofn)==TRUE) 48 { 49 // 输出文件名 50 //echo(szFile); 51 hf = CreateFile(szFile, 52 GENERIC_READ, // 只读方式打开 53 0, 54 (LPSECURITY_ATTRIBUTES) NULL, 55 OPEN_EXISTING,// 只当文件存在时打开 56 FILE_ATTRIBUTE_NORMAL, 57 (HANDLE) NULL 58 ); 59 } 60 61 if (hf == INVALID_HANDLE_VALUE) // 如果打开失败 62 { 63 echo("无法打开文件\n"); 64 } else 65 { 66 fileSize = GetFileSize(hf,NULL); // 获取文件大小 67 buffer = (char *)malloc(fileSize + 1); // 获取一块内存 68 buffer[fileSize] = '\0'; // 设置结尾 69 70 ReadFile( 71 hf,// 文件句柄 72 buffer, // 读取到的文件所存放的缓冲区 73 fileSize, // 要读取的字节数 74 &readSize, // 实际读取的字节数 75 NULL // 用 FILE_FLAG_OVERLAPPED 打开时所需的 76 ); 77 78 SetDlgItemText(hwnd, IDC_TEXT, buffer); 79 80 CloseHandle(hf); // 关闭文件句柄 81 free(buffer);// 释放内存 82 } 83 84 break; 85 case ID_EXIT: 86 EndDialog(hwnd, 0); 87 break; 88 } 89 } 90 break; 91 case WM_CLOSE: 92 DestroyWindow(hwnd); 93 break; 94 } 95 return 0; 96 } 97 98 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) 99 { 100 // 加载 Rich Edit 控件的 DLL 动态链接库 101 LoadLibrary("RICHED20.DLL"); 102 DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DialogProc); 103 }
Posted By veis