如何使用EM_INSERTIMAGE?

时间:2015-07-25 16:10:43

标签: richedit

使用Visual Studio 2013社区。

在源代码中添加了#include。 将Shlwapi.lib添加到链接器。 编译并链接确定。

这是使用EM_INSERTIMAGE的代码:

static void insertimage( )
   {
   RICHEDIT_IMAGE_PARAMETERS rip;
   IStream *pStream = NULL;
   DWORD grfMode = STGM_READ | STGM_SHARE_DENY_NONE;
   HRESULT hr = SHCreateStreamOnFileA( "add.png", grfMode, &pStream );
   if (hr == S_OK)
      {
      ZeroMemory( &rip, sizeof( rip ) );
      rip.xWidth = 2000;   // unit 0.01mm
      rip.yHeight = 2000;
      rip.Type = TA_BASELINE;
      rip.pwszAlternateText = L"adding xyz";
      rip.pIStream = pStream;
      hr = SendMessage( hwndrichedit, EM_INSERTIMAGE, (WPARAM)0, (LPARAM)&rip );
      if (hr == S_OK)
         {
         // getting here, but not getting any image or alternate text
         // output on screen 
         }
      }
   }

但它不会在屏幕上输出任何图像或替代文字,也不会将图像控制字放入rtf文件中。 我也尝试了SHCreateStreamOnFileEx,结果相同。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

我忘了提到我使用的是Windows 7。

我一直在搜索Google上的EM_INSERTIMAGE和其他密钥并找到了 表示EM_INSERTIMAGE需要Windows 8的匹配。我检查了EM_INSERTIMAGE MSDN并在“要求”部分'最低支持的客户端中找到了此信息 Windows 8 [仅限桌面应用程序]'。

我没想到这是因为我的Windows 7 PC上有Wordpad和Windows Office 10 可以插入图像。此外,Linux TED richedit文本编辑器可以插入图像 在三年前发布的Ubuntu 12.04中。

也许这些程序只是将图像规格插入rtf 根据rtf格式规范的要求。

我假设用户程序发出的EM_INSERTIMAGE会生成图像 rtf部分并将其插入rtf格式文本。

我对Windows 7感到满意,不会改为Windows 8,所以看来我好像 将无法拥有图像。

如果EM_INSERTIMAGE仅适用于Windows 8,我认为应该有错误 从Windows 7,Windows XP等发出EM_INSERTIMAGE时返回。

答案 1 :(得分:0)

EM_INSERTIMAGE仅适用于Windows 8及更高版本。在Windows 7中,您需要使用RichEdit的OLE接口来插入图像。这就是写字板如何做到的。您可以在MSDN上查找此示例:

RichEdit OLE sample