编译环境 :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创建,像十六进制编辑器一样显示文件的更多相关文章

  1. Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环

    Windows SDK 编程的一般步骤为: 1. 注册窗口类, 使用到的结构 WNDCLASSEX, 函数 RegisterClassEx. 2. 创建窗口, 函数 CreateWindowEx. 3 ...

  2. windows sdk编程为应用程序添加图标

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...

  3. windows sdk编程隐藏窗体标题栏

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...

  4. windows sdk编程禁止改变窗体大小

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...

  5. windows sdk编程禁止窗体最大化最小化

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...

  6. 【Windows编程】系列第二篇:Windows SDK创建基本控件

    在Win32 SDK环境下,怎么来创建常用的那些基本控件呢?我们知道如果用MFC,简单的拖放即可完成大多数控件的创建,但是我们既然是用Windows SDK API编程,当然是从根上解决这个问题,实际 ...

  7. Windows API编程(SDK编程)配置VS2017——出现LNK 2019错误的win32项目如何解决

    最近刚入门SDK编程,在 我终于知道为什么windowsApi学的人这么少了 这篇文章中,确实发现了这样的问题,我的教程使用VS2013->Windows桌面->win32,就诞生了能使用 ...

  8. windows游戏编程 创建WIN32一个HelloWOrld程序

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22449085 作者:jadeshu   邮箱: jades ...

  9. (转)Windows驱动编程基础教程

    版权声明     本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...

随机推荐

  1. UVa 1354 天平难题 Mobile Computing

    整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计 ...

  2. P4基函数

    July , P4 syms p1 p2 p3 phi(:,) = /*p1.*(*p1-).*(*p1-).*(*p1-); phi(:,) = /*p2.*(*p2-).*(*p2-).*(*p2 ...

  3. mongo管理工具

    启动 D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe --dbpath d:\data\db 还原 D:\Program Files\MongoD ...

  4. [Docker] docker 基础学习笔记6(共6篇)

    这个迁移指的是docker整个系统的迁移,而不是说images存储位置迁移 docker info 查看docker的各项配置   首先做文件的迁移 使用rsync软件将docker的文件夹整体迁移到 ...

  5. java 访问mysql 实例

    前提条件: 1.安装eclipse,mysql.java jdk 2.安装mysql connect J  (我安装的版本是mysql connect J 5.1.39) 3.配置java环境变量 4 ...

  6. 微信小程序 wx.getUserInfo 解密 C# 代码

    花了6小时,弄出来的代码.网上的是PHP代码 public static string DecodeUserInfo(string raw, string signature,string encry ...

  7. [Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?

    首先,问题是如何出现的? 晚上复查代码,发现一个activity没有调用自己的ondestroy方法 我表示非常的费解,于是我检查了下代码. 发现再finish代码之后接了如下代码 finish(); ...

  8. 使用spring配置quartz定时器

    quartz是石英钟的意思,所以用这个名字来做定时器的框架名称再适合不过.一年前做项目的时候有用过这个框架,当时没有整理,今天刚好新的商城系统也需要定时器.想要达到的效果是:每天的固定时间,比如凌晨3 ...

  9. Excel列名 字母和数字的转换

    Excel的列名是由于字母组成的. A-Z 分别代表1-26  AA 是27 AB是28 以此类推. 以下是这种编码的转换方法,如果遇到需要用纯字母编号来表示数字的时候可以用到. /** * 类似EX ...

  10. Jquery div展开收缩

    <html> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...