ctrl+v后字符是"怎样"输出

没原来那个名字长了 2009-08-19 04:49:15
比如我复制一个字符串"abc"
然后我把它粘贴到记事本->用sp++查只得到wm_command消息....
然后我把他粘贴到魔兽争霸里面云sp++查只有WM_KEYDOWN消息....
虽然消息不一样可结果是一样的....在可以输入的地方显示了"abc"
我知道魔兽里用的是utf-8的所以如果是中文可能出错这里不是讨论怎样让他不乱码.....
我只想知道ctrl+v背后的事情.....
ctrl+v之后调用了是什么才让字符输出到编辑框中去的
有理有分......
...全文
166 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2009-08-19
  • 打赏
  • 举报
回复
用key_event看看
zhugay 2009-08-19
  • 打赏
  • 举报
回复
按ctrl+v,记事本在快捷键表里发现是个快捷键,转换成了相应的菜单命令。
ctrl+v的组合键,可以由OnChar捕获到,nChar = 22
见习学术士 2009-08-19
  • 打赏
  • 举报
回复
LZ 在做魔兽的什么辅助工具,我对此很感兴趣哇

  • 打赏
  • 举报
回复
看来大家对低层的东西不太关心啊.....算了只能用剪贴板然后再通过模拟键盘发送按键ctrl+v来实现文字输出了
提示这个问题的原因是因为我找不到魔兽争霸聊天栏的控件ID....这直接导致我没法用SetWindowText...然后我试着发送wmchar消息结果也不成功(wmchar在其它一般的程序试过是可以的,可能是因为war3用的是utf-8的原因吧)...我现在的做法是先把CString转成utf-8然后发送到剪贴板然后再模拟键盘发送按键ctrl+v来实现文字输出.....
不知各位大大还有没有更好的建议..........没有的话明天给分了.......
副组长 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 free365 的回复:]
以上代码是可以写入数据到剪贴板但我还是想知道ctrl+v之后显示器是怎样显示字符的......
[/Quote]

裁剪版不仅保存了你拷贝的文字信息,同时还包括有关这些数据的元数据,ctrl+v以后应用程序分析元数据格式,再按格式显示,不但可以显示文字,还可以显示位图等。如果你从网页上拷贝一段文字到WORD里面,字体字号字符颜色等信息都一同拷贝了。但是如果你粘贴到记事本里面,记事本不能处理这些字符属性,就只有文字,字体字号等属性就丢弃了。WORD里面的选择粘贴->无格式文本也是这样的情况。
具体参考元数据格式。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oyljerry 的回复:]
引用 6 楼 free365 的回复:
引用 4 楼 mazm_yanzhu 的回复:
复制只是将选中的内容放入到剪贴板,那相当于一个内存buffer,在粘贴时将该内存的东西拷贝到目标地址

这么说我直接写内存也可以达到跟ctrl+v同样的效果了

你只要写入正确的clipboard 对应的数据内存等...
[/Quote]

if(OpenClipboard())
{
CString str;
HANDLE hClip;
char *pBuf;
EmptyClipboard();
GetDlgItemText(IDC_EDIT_SEND,str);
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
pBuf=(char*)GlobalLock(hClip);
strcpy(pBuf,str);
GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip);
CloseClipboard();
}

以上代码是可以写入数据到剪贴板但我还是想知道ctrl+v之后显示器是怎样显示字符的......
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 neohope 的回复:]
你的到的消息是不对的
至少在笔记本里有wm_copy及获取文本长度等信息
自己好好看看
[/Quote]
现在的重点不是消息对不对的问题......
我想知道他是怎样实现字符显示的........
比如象SetWindowText那样.....后面的显示过程是我关心的重点.....
oyljerry 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 free365 的回复:]
引用 4 楼 mazm_yanzhu 的回复:
复制只是将选中的内容放入到剪贴板,那相当于一个内存buffer,在粘贴时将该内存的东西拷贝到目标地址

这么说我直接写内存也可以达到跟ctrl+v同样的效果了
[/Quote]
你只要写入正确的clipboard 对应的数据内存等...
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mazm_yanzhu 的回复:]
复制只是将选中的内容放入到剪贴板,那相当于一个内存buffer,在粘贴时将该内存的东西拷贝到目标地址
[/Quote]
这么说我直接写内存也可以达到跟ctrl+v同样的效果了
BAKER_LEE 2009-08-19
  • 打赏
  • 举报
回复
估计是你看漏了WM_PASTE消息
An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.


mazm_yanzhu 2009-08-19
  • 打赏
  • 举报
回复
复制只是将选中的内容放入到剪贴板,那相当于一个内存buffer,在粘贴时将该内存的东西拷贝到目标地址
oktsl 2009-08-19
  • 打赏
  • 举报
回复
复制时 wm_copy 拷到内存里
粘贴 wm_paste从内存拷出来
wish_cn 2009-08-19
  • 打赏
  • 举报
回复
你应该用spyxx查看记事本的edit控件的消息,而不是记事本大窗口的消息。
neohope 2009-08-19
  • 打赏
  • 举报
回复
你的到的消息是不对的
至少在笔记本里有wm_copy及获取文本长度等信息
自己好好看看

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧