码迷,mamicode.com
首页 > Windows程序 > 详细

windows sdk编程 richedit创建,像十六进制编辑器一样显示文件

时间:2015-07-28 18:02:44      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

编译环境 :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);
}

 

windows sdk编程 richedit创建,像十六进制编辑器一样显示文件

标签:

原文地址:http://www.cnblogs.com/ipv10/p/4682982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!