如何在VC++中响应ctrl+c(复制消息)
来源:互联网 发布:linux如何退出切换用户 编辑:程序博客网 时间:2024/06/04 18:42
如何在VC++中响应ctrl+c(复制消息)
对于edit类控件来说用户键盘按下ctrl+c时控件父窗口会自动收到wm_copy消息,但是如果是 其它子窗口就需要自己来处理wm_keydown和wm_char来模拟wm_copy消息(当然也可以使用快捷键)。
先用spy++随便选择一个普通的非edit窗口,依次按下ctrl键和字母c,然后再同时按下这两个键,可以看到窗口分别受到了下面几条消息:
ctrl
<000001> 00030A2E P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000002> 00030A2E P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
c
<000001> 00030A2E P WM_KEYDOWN nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000002> 00030A2E P WM_CHAR chCharCode:'99' (99) cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000003> 00030A2E P WM_KEYUP nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:1 fUp:1
ctrl+c
<000001> 00030A2E P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000002> 00030A2E P WM_KEYDOWN nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000003> 00030A2E P WM_CHAR chCharCode:'3' (3) cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000004> 00030A2E P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<000005> 00030A2E P WM_KEYUP nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:1 fUp:1
所以为了响应ctrl+c消息,可以在消息处理函数中定义两个变量来记录ctrl和c是否同时按下
#pragma region CTRL+C模拟static bool isCtrldown = false;static bool iscdown = false;#pragma endregion CTRL+C模拟
然后在wm_keydown和wm_keyup消息处理处加入下列代码:
case WM_KEYDOWN:// VK_DOWN#pragma regionswitch (wparam){case VK_CONTROL: isCtrldown = true; break;case 'C': iscdown = true; break;break;#pragma endregion
case WM_KEYUP:// VK_UP#pragma regionswitch (wparam){case VK_CONTROL: isCtrldown = false;break;case 'C': iscdown = false;break;}break;#pragma endregion
接下来是响应wm_char的代码:
case WM_CHAR:// CHAR#pragma regionswitch (wparam){case 0x03:// ETX #pragma regionif (isCtrldown && isCtrldown)PostMessage(hwnd, WM_COPY, 121, 0);break;#pragma endregion}break;#pragma endregion
最后只要响应 wm_copy把数据复制到粘帖板就可以了。
- 如何在VC++中响应ctrl+c(复制消息)
- VC MFC 视图中控件响应CTRL+C等消息
- 在VC++中如何让MSFlexGrid响应滚轮消息
- VC中如何区分Ctrl的左右键响应
- 在VC++.NET中响应Ctrl+Enter键
- 在VC中 添加响应自定义消息
- 在VC中 添加响应自定义消息
- 用户如何在VC中自定义消息以及响应该消息
- CFormView中控件无法响应Ctrl+C和Ctrl+V消息的解决办法
- 禁止在EXCEL中CTRL+C的复制快捷键
- 在Mac中设置Ctrl+C/V进行复制/粘贴
- 在Mac中设置Ctrl+C/V进行复制/粘贴
- 如何在MFC中添加消息响应
- 在VC中添加响应自定义的消息(转)
- VC 在大(死)循环中响应其他消息
- linux下如何在shell中结束进程(ctrl+c\ctrl+z\ctrl+d\ctrl+\的用法)
- 如何在Java程序中处理Ctrl+C
- 如何在Java程序中处理Ctrl+C
- mac os x上virtualbox 不能启动 guest os XP
- poj2492 A Bug's Life 种类并查集
- Linux环境编程之进程(四):创建新进程、执行程序和进程终止
- PHP magic_quotes_gpc的详细使用方法
- dynamic symbol table
- 如何在VC++中响应ctrl+c(复制消息)
- 获取文字输出之后的大小
- hive整合hbase 建表命令
- Android培训之直接控制摄像头
- 省市区三级联动菜单(附数据库)
- 放弃了正在写的Django博客
- 常用软件推荐
- corelibc.lib(pegwmain.obj) : error LNK2019
- mysql AB复制延迟配置工具