首页 > 其他分享 >翻译《The Old New Thing》- What a drag: Dragging a Uniform Resource Locator (URL) and text

翻译《The Old New Thing》- What a drag: Dragging a Uniform Resource Locator (URL) and text

时间:2024-06-02 16:30:35浏览次数:15  
标签:Old URL TEXT Locator pmed 文本 DATA 拖拽

What a drag: Dragging a Uniform Resource Locator (URL) and text - The Old New Thingicon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20080313-00/?p=23123

Raymond Chen 2008年03月13日


 麻烦的拖拽:拖拽统一资源定位符(URL)和文本

简要

        这篇文章主要讲述了如何在Windows编程中实现一个可以同时处理文本和URL数据的拖拽功能,通过扩展数据类型枚举、设置格式等和响应数据请求来实现。

正文

        我们已经学会了如何拖拽文本以及如何拖拽统一资源定位符(URL),但如果我们想要同时拖拽两者呢?这实际上是一个简单的问题,只需要声明你拥有两者(实际上是按需生成它们)。

        首先,通过扩展数据类型的枚举来包括URL和文本:

  enum {
    DATA_URL,
    DATA_TEXT,
    DATA_NUM,
    DATA_INVALID = -1,
  };

        在我们设置这个枚举时有一个微妙之处:我们把DATA_URL放在DATA_TEXT前面,这样由SHCreateStdEnumFormatEtc生成的剪贴板格式就会按优先级顺序生成(质量最高的在前)。通过首先枚举URL,一个同时理解URL和文本格式的程序将会知道优先选择URL。在这个特定的例子中,这并不是非常关键,因为大多数文本编辑器都会自动检测URL(至少如果URL以“http:”开头的话),但在更一般的情况下,按优先级顺序枚举格式可以产生很大的不同。例如,你的数据对象可能同时提供富文本格式和纯文本格式的文本,如果一个同时理解这两种格式的程序默认使用富文本版本而不是纯文本版本,那可能会更好。

        一旦我们有了这两种格式,我们需要对它们都做出响应。在我们的构造函数中,我们必须描述这两种格式,以便GetDataIndexEnumFormatEtc了解它们。

CTinyDataObject::CTinyDataObject() : m_cRef(1)
{
  SetFORMATETC(&m_rgfe[DATA_URL],
               RegisterClipboardFormat(CFSTR_SHELLURL));
    SetFORMATETC(&m_rgfe[DATA_TEXT], CF_TEXT);
}

然后是数据对象核心的更改,IDataObject::GetData方法,反而显得平淡无奇:

HRESULT CTinyDataObject::GetData(FORMATETC *pfe, STGMEDIUM *pmed)
{
  ZeroMemory(pmed, sizeof(*pmed));

  switch (GetDataIndex(pfe)) {
  case DATA_URL:
  case DATA_TEXT:
    pmed->tymed = TYMED_HGLOBAL;
    return CreateHGlobalFromBlob(c_szURL, sizeof(c_szURL),
                              GMEM_MOVEABLE, &pmed->hGlobal);
  }

  return DV_E_FORMATETC;
}

        无论调用者请求文本还是URL,我们都给他们返回相同的字符串。

        当您运行这个程序时,请注意它结合了前两个程序的功能。您可以将文本拖入Wordpad,将URL拖放到Firefox上,并将URL拖放到Internet Explorer上。

        这些都只是热身。休息一会儿之后,我们将开始在我们的数据对象中提供更复杂的数据。

标签:Old,URL,TEXT,Locator,pmed,文本,DATA,拖拽
From: https://blog.csdn.net/weixin_41863029/article/details/139393017

相关文章

  • 翻译《The Old New Thing》- What a drag: Dragging a Uniform Resource Locator (URL
    Whatadrag:DraggingaUniformResourceLocator(URL)-TheOldNewThing(microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080312-00/?p=23133RaymondChen 2008年03月12日麻烦的拖拽:拖拽统一资源定位符(URL)简要本文介绍了如何在Windows程序中实......
  • 06.爬虫---urllib与requests请求实战(POST)
    06.urllib与requests请求实战POST1.Urllib模块2.Requests模块3.实战(Requests)POST请求Python中的POST请求是HTTP协议中的一种请求方法,用于向服务器提交数据。与GET请求不同,POST请求将数据封装在请求体中,而不是在URL中传递。通常情况下,POST请求用于向服务器提交表单......
  • java8,频繁old gc,通过修改g1回收器之后,效果很好
    原配置:-Xms15360m-Xmx15360m-XX:NewSize=4096m-XX:MaxNewSize=4096m-XX:MetaspaceSize=512m-XX:MaxDirectMemorySize=1024m-XX:+UseG1GC-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/data/logs/skynet-\${DAOKEAPPUK}/\${DAOKEAPPUK}_heapDump.hprof-XX:+UseC......
  • CentOS Linux 8x 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare interna
    问题描述今天安装CentOS8.5安装完之后,准备更新源仓库环境的时候突然出现错误:为仓库'appstream'下载元数据失败:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist,后面我找了好久没发现有解决这个问题的方法,后面无意看到了https://www.cnblogs.com/cainiaoaixuexi......
  • 学习Django【2】把视图和路由连接起来的是URLconfigs的配置文件
    在view.py视图中定义:defdetail(request,question_id):returnHttpResponse("You'relookingatquestion%s."%question_id)defresults(request,question_id):response="You'relookingattheresultsofquestion%s."......
  • URI、URL和URN的区别
    1.URI:统一资源标识符URI(UniformResourceIdentifier)是统一资源标识符,是用于标识资源的通用术语。URI采用一种特定语法标识一个资源的字符串。所标识的资源可能是服务器上的一个文件。不过,也可能是一个邮件地址、新闻消息、图书、人名、Internet主机或者任何其它内容。......
  • 使用git报错:error: RPC failed; curl 18 transfer closed with outstanding read data
    今天在使用git下载项目时发生报错:error:RPCfailed;curl18transferclosedwithoutstandingreaddataremainingerror:4790bytesofbodyarestillexpectedfatal:earlyEOFfetch-pack:unexpecteddisconnectwhilereadingsidebandpacketfatal:fetch-pack:in......
  • const filePath = fileURLToPath(new URL('plopfile.js', import.meta.url)); 解释一
    这段代码的作用是获取当前文件所在目录下的plopfile.js文件的绝对路径。这里是逐步解释:import.meta.url:这是ESModules中的一个元属性,它提供了当前模块的绝对URL。在Node.js环境中,当你在一个模块文件中访问import.meta.url时,它会返回该模块文件的文件系统路径转换成的URL格......
  • Large Language Models as Data Augmenters for Cold-Start Item Recommendation论文
    LargeLanguageModelsasDataAugmentersforCold-StartItemRecommendation论文阅读笔记Abstract​ LLM的推理和泛化能力可以帮助我们更好地理解用户的偏好和项目特征。我们建议利用LLM作为数据增强器,来弥补在训练过程中对冷启动项目的知识差距。我们使用LLM根据用户历史行......
  • 监听浏览器更新URL参数,实现伪SPA单页面应用
    在老的jqury项目中通常实现SPA一般都采用hash值变化来进行监听,但是有的项目中我们也想采用改变URL参数来进行监听,一般我们使用window.history.pushState方法来改变url参数;为了在使用window.history.pushState或window.history.replaceState后能够检测到浏览器的后退按钮操作,......