编译环境 :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. json文本装换为JSONArray

    package com.beijxing.TestMain; import java.io.File; import java.io.IOException; import org.apache.co ...

  2. 史航416第八次作业&总结

    一.知识点总结: 1.数组的输入,输出及对整个数组所有元素进行操作通常都用循环结构实现. 2.可以只给部分元素赋初值.当{ }中值的个数少于元素个数时,只给前面部分元素赋值. 3.只能给元素逐个赋值, ...

  3. C#中关于异步的三种写法

    1 投票 IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null); while (!ar.IsCompleted) class Program { ...

  4. 【POJ3691】DNA repair(AC自动机,DP)

    题意: 生物课上我们学到,DNA序列中只有A, C, T和G四种片段. 经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段"ATC"是不好片段,则"AGATC ...

  5. highlight.js 页面 代码高亮

    官网:https://highlightjs.org/ 功能: 支持 155 种编程语言的语法解析:拥有 73 种样式 自动检测编程语言 可以在 node.js 平台上运行 支持各种标签 与任何 js ...

  6. c程序中出现segment error 和 bus error 的原因

    在c程序中,经常会遇到段错误(segment error)和总线错误(bus error),这两种问题出现的原因可能如下 段错误: 对一个NULL指针解引用. 访问程序进程以外的内存空间. 实际上,第 ...

  7. Finder Item脚本如何包装成 Mac App

    第一步,包装 记得之前把一个 java 程序的 jar 包 用 automator包装成了 app, 但自己找不到做法了.回头我想了想 这么实验可行. 这样做成 app 后保存在 /Applicati ...

  8. Windows 10通过本地镜像离线安装.NET 3.5

    在Windows10中,当我们安装某些软件的时候会提示"你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)",由于 ...

  9. Hibernate持久化类属性映射

    Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...

  10. [问题记录.dotnet]取网卡信息报错"找不到"-WMI - Not found

    异常: System.Management.ManagementException: 找不到     在 System.Management.ManagementException.ThrowWith ...