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驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
随机推荐
- crm 2013邮箱设置 “允许使用凭据进行电子邮件处理” 被禁用的解决
记录一下: 在CRM 2013/2015的邮箱设置时发现“允许使用凭据进行电子邮件处理” 选项被禁用而且无法输入凭证(如下图): 查阅官方说明得知考虑邮件安全性只能在IFD部署或https访问模式下才 ...
- Android_Fragment(碎片)知识点讲解
今天我们来了解下Android 中的fragment(碎片)这个东西. Fragment 从英文翻译而言是碎片,片段的意思.那么这个东西是什么,在Android 中有什么用呢? 一.概念 Fragme ...
- mongo管理工具
启动 D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe --dbpath d:\data\db 还原 D:\Program Files\MongoD ...
- dg
package excel; import java.util.Scanner; public class doExcel { public static void main(String args[ ...
- Volley-XUtils-OkHttp三种方式实现单张多张图片上传
OkHttp可以作为Volley底层传输协议,速度更快,传大量图片建议使用.OkHttp更多功能请看OkHttp的使用 xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更 ...
- PagedDataSource、Repeater以及AspNetPager在ASP.NET上分页。
一.前台使用服务器标签 1.1使用Repeater控件 <asp:Repeater ID="Repeater1" runat="server"> & ...
- Dijkstra搜索算法
Dijkstra无向图 算法执行步骤如下: 上面两张图来源于:http://blog.csdn.net/v_july_v/article/details/6096981 很牛的大神,膜拜,此处有鲜花 ...
- ABAP POPUP函数
POPUP_TO_CONFIRM_LOSS_OF_DATA 弹出一个对话框告知用户有可能丢失数据,询问是否操作继续.POPUP_TO_CONFIRM_STEP 弹出一个对话框询问用户是否操作继续. P ...
- 添加了有道生词本的 chrome google翻译扩展和有道翻译扩展
在chrome发布项目,需要先花美金认证,还得要美国ID,无奈. 直接上源码,需手动导入. 原始项目源码并未开源,个人是从chrome本地文件里拿出来的,拓展来的,侵删(本来想着自已写一个,业余时间, ...
- tinymce整合struts2使用
在提交之前记得 instance.post(); 这个应付老师检查还是可以的,但是很详细的怎么具体使用,还是要去看官方文档. <%@ page language="java" ...