大家好!
我在list control上面建立了一个右键菜单,使用的是静态的方法,就是在资源里建立一个菜单的资源,然后当点击右键的时候加载。
主要完成的功能就是选中list control中的若干行,点击右键菜单中的“复制”,把选中的内容复制到剪切板上。
我现在想加一个快捷键“Ctrl+C”,就是选中以后,按Ctrl+c可以实现和点“复制”一样的功能。
我VC刚起步,所以还请大家多帮忙。
谢谢。
我在list control上面建立了一个右键菜单,使用的是静态的方法,就是在资源里建立一个菜单的资源,然后当点击右键的时候加载。
主要完成的功能就是选中list control中的若干行,点击右键菜单中的“复制”,把选中的内容复制到剪切板上。
我现在想加一个快捷键“Ctrl+C”,就是选中以后,按Ctrl+c可以实现和点“复制”一样的功能。
我VC刚起步,所以还请大家多帮忙。
谢谢。
解决方案 »
- 求助:如何在win32下实现电脑与单片机进行蓝牙无线通信?
- 问个 MessageBox 的问题
- 获得Window Media Player的缓冲进度
- 急问!!!!
- 简单问题,virtual key是不是不分像1和!两个键?
- help
- 请问作gif解码的程序现在还需要付费吗?
- 哪里可以找到路由器,交换机,网守等的图标?
- 请问vc6的补丁哪里有?给我给地址好吗。
- 高手请进(本人认为很难的一个问题)~~~~~~~~~~~~~~~~~~~~~~~
- shell扩展编程 如何给文件夹添加右键菜单(如何注册菜单 和 遍历文件夹所有文件)
- 自己写的一个图形处理软件,打开一张图片,然后对此图片进行删除,移动,重命名时都会报错:此文件正在被使用.....怎样解决?
在里面处理
if(pMsg->message == WM_KEYDOWN
&& GetKeyState(VK_CONTROL) < 0
&&(pMsg->wParam=='c' ||pMsg->wParam=='C'))
{
DoMyCopy();
return TRUE;
}
{
// TODO: Add your specialized code here and/or call the base class
if (TranslateAcc(pMsg)) return TRUE; return CDialog::PreTranslateMessage(pMsg);
}
添加虚函数重载PreTranslateMessage
{
// TODO: Add your specialized code here and/or call the base class
if( pMsg->message == WM_KEYDOWN )
{
char nchar;
nchar=pMsg->wParam;
if(nchar=='V'&&(GetKeyState(VK_CONTROL)&0x80)) //按下Ctrl+V键
{OnEditPaste();return 1;}
else if(nchar=='X'&&(GetKeyState(VK_CONTROL)&0x80)) //按下Ctrl+X键
{OnEditCut();return 1;}
else if(nchar=='C'&&(GetKeyState(VK_CONTROL)&0x80)) //按下Ctrl+C键
{OnEditCopy();return 1;}
return CDialog::PreTranslateMessage(pMsg);
}
2 在对话框头文件中声明:
HACCEL m_hAccel;
3 在对话框的构造函数里初始化m_hAccel
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
4 然后重载对话框的PreTranslateMessage函数,在
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccelTable)
{
if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg))
{
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
方法二:
1 声明热键消息处理函数原型
在.h中消息映射声明处(AFX_mSG字样之后)加入如下语句:
LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2. 消息与相应处理函数相关联
在.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,
ON_MESSAGE(WM_HOTKEY,OnHotKey);
3. 为方便以后的操作
预先在类中创建一个响应WM_CREATE和WM_DESTROY消息的函数
OnCreate()与OnDestroy()的框架
4.向系统登记热键
在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为
Ctrl+Shift+A.
RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'A');
RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');
5.处理热键
在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码
LRESULT C****::OnHotKey(WPARAM wParam,LPARAM lParam)
if(wParam==1001||wParam==1002)
CWnd::SetForegroundWindow();//使得被激活窗口出现在前景
MessageBox("Hello!");
//用户可在此添加代码
return 0;
6.程序运行完毕后解除热键
在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.
UnRegisterHotKey(m_hWnd,1001);
UnRegisterHotKey(m_hWnd,1002);
7.编译并运行程序