首页 > 代码库 > 一个简单的记事本

一个简单的记事本

#include <Windows.h>
#include "resource.h"
#include <stdio.h>
void echo(char *str)
{
MessageBox(NULL, str, TEXT("提示"), MB_OK);
}
int CALLBACK DialogProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
OPENFILENAME ofn;       // OpenFileName 的结构体
char szFile[260];       // 保存文件名称的缓冲字符串
HANDLE hf;              // 文件句柄
DWORD fileSize, readSize;
char *buffer;
switch(Message)
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
{       
switch(wParam)
{
case ID_NEW_FILE:
SetDlgItemText(hwnd, IDC_TEXT, "");
break;
case ID_OPEN_FILE:
// 初始化 OPENFILENAME 结构体
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to ‘\0‘ so that GetOpenFileName does not 
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = ‘\0‘;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// 若成功获取到文件名
if (GetOpenFileName(&ofn)==TRUE)
{
// 输出文件名
//echo(szFile);
hf = CreateFile(szFile, 
GENERIC_READ, // 只读方式打开
0,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, // 只当文件存在时打开
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL
);
}
if (hf == INVALID_HANDLE_VALUE) // 如果打开失败
echo("无法打开文件\n");
} else 
{
fileSize = GetFileSize(hf,NULL); // 获取文件大小
buffer = (char *)malloc(fileSize + 1); // 获取一块内存
buffer[fileSize] = ‘\0‘; // 设置结尾
ReadFile(
hf, // 文件句柄
buffer,     // 读取到的文件所存放的缓冲区
fileSize,   // 要读取的字节数
&readSize,  // 实际读取的字节数
NULL        // 用 FILE_FLAG_OVERLAPPED 打开时所需的
);
SetDlgItemText(hwnd, IDC_TEXT, buffer);
CloseHandle(hf); // 关闭文件句柄
free(buffer); // 释放内存
}
break;
case ID_EXIT:
EndDialog(hwnd, 0);
break;  
}
}
break;
case WM_CLOSE:              
DestroyWindow(hwnd);
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
// 加载 Rich Edit 控件的 DLL 动态链接库
LoadLibrary("RICHED20.DLL");
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DialogProc);
}

一个简单的记事本