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驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
随机推荐
- json文本装换为JSONArray
package com.beijxing.TestMain; import java.io.File; import java.io.IOException; import org.apache.co ...
- 史航416第八次作业&总结
一.知识点总结: 1.数组的输入,输出及对整个数组所有元素进行操作通常都用循环结构实现. 2.可以只给部分元素赋初值.当{ }中值的个数少于元素个数时,只给前面部分元素赋值. 3.只能给元素逐个赋值, ...
- C#中关于异步的三种写法
1 投票 IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null); while (!ar.IsCompleted) class Program { ...
- 【POJ3691】DNA repair(AC自动机,DP)
题意: 生物课上我们学到,DNA序列中只有A, C, T和G四种片段. 经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段"ATC"是不好片段,则"AGATC ...
- highlight.js 页面 代码高亮
官网:https://highlightjs.org/ 功能: 支持 155 种编程语言的语法解析:拥有 73 种样式 自动检测编程语言 可以在 node.js 平台上运行 支持各种标签 与任何 js ...
- c程序中出现segment error 和 bus error 的原因
在c程序中,经常会遇到段错误(segment error)和总线错误(bus error),这两种问题出现的原因可能如下 段错误: 对一个NULL指针解引用. 访问程序进程以外的内存空间. 实际上,第 ...
- Finder Item脚本如何包装成 Mac App
第一步,包装 记得之前把一个 java 程序的 jar 包 用 automator包装成了 app, 但自己找不到做法了.回头我想了想 这么实验可行. 这样做成 app 后保存在 /Applicati ...
- Windows 10通过本地镜像离线安装.NET 3.5
在Windows10中,当我们安装某些软件的时候会提示"你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)",由于 ...
- Hibernate持久化类属性映射
Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...
- [问题记录.dotnet]取网卡信息报错"找不到"-WMI - Not found
异常: System.Management.ManagementException: 找不到 在 System.Management.ManagementException.ThrowWith ...