编译环境 :windows 7 64位 vs2010,工程创建选择"win32项目"
注意添加几个头文件
#include <WinBase.h>
#include <commctrl.h>
#include <Commdlg.h>
#include <Richedit.h>
#include <malloc.h>
主文件中找到: 主函数添加
//载入RICHEDIT控件库文件
HINSTANCE hRich;
hRich = LoadLibrary(TEXT("riched20.dll")); // RICHED20.dll
主函数最后添加:
//卸载Richedit控件库文件
FreeLibrary(hRich);
在消息循环中添加一个消息:
//注意在主文件头中定义一个richedit控件句柄变量 static HWND hRichEdit;
WM_CREATE:
//创建RichEdit控件,并设置默认字体,及大小
hRichEdit =CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("RichEdit20A"),NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_NOHIDESEL,
0,0,0,0,hWnd,0,hInst,NULL);
stCf.cbSize = sizeof(stCf);
stCf.yHeight = 10 * 20;
stCf.dwMask = CFM_FACE | CFM_SIZE | CFM_BOLD;
wcscpy(stCf.szFaceName,_T("宋体"));
SendMessage(hRichEdit,EM_SETCHARFORMAT,0,(LPARAM)&stCf);
SendMessage(hRichEdit,EM_EXLIMITTEXT,0,-1);
break;
//----读取文件并显示-------------
void DoReadFile(HWND hRichEdit,const wchar_t strFileName[MAX_PATH])
{
//******打开文件***********
if((hFile = CreateFile(strFileName,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)) == INVALID_HANDLE_VALUE)
{
return;
}
//******获取文件长度*******
if(!(iFileLen = GetFileSize(hFile,NULL)))
{
MessageBox(NULL,_T("提示"),_T("文件长度为零"),NULL);
return;
}
//以下函数建立内存映射文件;
hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
if(!hFileMap)
{
return;
}
//建立映射视图,并用pBuffer指向内存映射文件的第一个字节。
pBuffer = PBYTE(MapViewOfFile(hFileMap,FILE_MAP_READ | FILE_MAP_WRITE,0,0,0));
if(!pBuffer)
{
return;
}
wchar_t sz[4],szR[512];
CHARRANGE stcf; //定义结构,EM_EXSETSEL消息需要此消息,
memset(&stcf,0,sizeof(stcf)); //并且将成员变量设置为 -1 是将光标置文本尾部
stcf.cpMax = -1;
stcf.cpMin = -1;
int count;
//以下处理字节流并在控件中以十六进制显示
for(int j = 0;j<iFileLen/16;j++)
{
memset(sz,0,sizeof(sz));
memset(szR,0,sizeof(szR));
count = 0;
for(int i = 0;i<16;i++)
{
wsprintf(sz,_T(" %02X"),pBuffer[i]);
wcscat(szR,sz);
count++;
}
pBuffer += count;
wcscat(szR,_T("\r\n")); //文本加入换行转义字符,实现 在下行输出;
SendMessage(hRichEdit,EM_EXSETSEL,0,(LPARAM)&stcf);
SendMessage(hRichEdit,EM_REPLACESEL,0,(LPARAM)szR);
}
//关闭文件句柄,内存映射文件句柄和释放内存;
UnmapViewOfFile(pBuffer);
CloseHandle(hFileMap);
CloseHandle(hFile);
}