windows sdk编程 richedit创建,像十六进制编辑器一样显示文件
编译环境 :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创建,像十六进制编辑器一样显示文件的更多相关文章
- Win32 SDK 编程开始, 创建窗口, 消息的处理, 消息循环
Windows SDK 编程的一般步骤为: 1. 注册窗口类, 使用到的结构 WNDCLASSEX, 函数 RegisterClassEx. 2. 创建窗口, 函数 CreateWindowEx. 3 ...
- windows sdk编程为应用程序添加图标
#include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...
- windows sdk编程隐藏窗体标题栏
#include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...
- windows sdk编程禁止改变窗体大小
#include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...
- windows sdk编程禁止窗体最大化最小化
#include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...
- 【Windows编程】系列第二篇:Windows SDK创建基本控件
在Win32 SDK环境下,怎么来创建常用的那些基本控件呢?我们知道如果用MFC,简单的拖放即可完成大多数控件的创建,但是我们既然是用Windows SDK API编程,当然是从根上解决这个问题,实际 ...
- Windows API编程(SDK编程)配置VS2017——出现LNK 2019错误的win32项目如何解决
最近刚入门SDK编程,在 我终于知道为什么windowsApi学的人这么少了 这篇文章中,确实发现了这样的问题,我的教程使用VS2013->Windows桌面->win32,就诞生了能使用 ...
- windows游戏编程 创建WIN32一个HelloWOrld程序
本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22449085 作者:jadeshu 邮箱: jades ...
- (转)Windows驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
随机推荐
- Head First Html and CSS学习笔记之CSS
第七章 CSS入门 元素的许多属性都可以设置样式,太多了,记不住,可以参考<CSS Pocket Reference>. 外部样式表,<link type = "text/ ...
- iOS开发app启动原理及视图和控制器的函数调用顺序
main()函数是整个程序的入口,在程序启动之前,系统会调用exec()函数.在Unix中exec和system的不同在于,system是用shell来调用程序,相当于fork+exec+waitpi ...
- PHP 7 Xdebug 深深的坑
zend_extension 7.0 下的 php.ini 配置 [XDebug];; Only Zend OR (!) XDebugzend_extension=f:\xampp\php\ext\p ...
- Python学习之路——基础篇(1)字符串格式化
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式 ...
- JS valueOf与字符串
js在处理字符串和数值加运算的时候会转换数值为字符串 然后执行字符串连接 在覆盖String.prototype.valueOf之前,new String(111)这样的字符串与数值加法也是字符串连接 ...
- Java基础知识系列——日期
日期类型也是在编程中经常用到的一种数据类型. Java中的日期类型为Date. 另外需要记住三个类: java.text.SimpleDateFormat; java.util.Calendar; j ...
- Thailand vs Soros
| exchange rate | | Thailand | Soros | |---------------+---------+----------+---------| | | orgin | ...
- java 的面向对象
1.java是什么语言: java也属于面向对象编程语言. 2.面向对象的三大特性: 封装 ,继承, 多态. 3.什么是对象: 对象是真实存在的唯一失误. 面向对象的英文是(oop),面向对象的编程思 ...
- 关于Ajax load页面中js部分$(function(){})的执行顺序
<script type="text/javascript"> console.error(11111); $(function(){ console.error(22 ...
- Ueditor1.4.3.3+springMvc+maven 实现图片上传
前记:由于项目中需要有一个新增数据并且要能支持表格图片上传的功能.使用了ueditor控件.为实现这个功能,从一开始什么都看不懂,到一直连着弄了5天,总算是有了眉目.在此记录一下以便能帮到可以和我一样 ...