vc变成中实现CTRL+C复制功能
我想在VC中实现CTRL+C组合键复制的功能,WINDOWS中本身有CTRL+C功能,我不想具体去实现该功能,而是想按下某件(比如回车键),就相当于摁下CTRL+C组合键...
我想在VC中实现CTRL+C组合键复制的功能,WINDOWS中本身有CTRL+C功能,我不想具体去实现该功能,而是想按下某件(比如回车键),就相当于摁下CTRL+C组合键,我想在重载的PreTranslateMessage中实现,具体代码如下:
BOOL CCtextDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam ==90)//这里90是表示想用z键代替CTRL+C键
{
pMsg->wParam=67;//这里却难住我了,如何将CTRL+C两键同时赋值给pMsg呢?????????
}
}
有其他方法更好了,可以以一键代替CTRL+C键
return CDialog::PreTranslateMessage(pMsg);
}{
return FALSE;//对话框内部控件可以接收到回车消息!!
//return TRUE;//对话框内部控件不可以接收到回车消息!!
}
}
上面代码粘贴错了,有点乱,以下是:
BOOL CCtextDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam ==90)//这里90是表示想用z键代替CTRL+C键
{
pMsg->wParam=67;//这里却难住我了,如何将CTRL+C两键同时赋值给pMsg呢?????????
}
}
return CDialog::PreTranslateMessage(pMsg);
} 展开
BOOL CCtextDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam ==90)//这里90是表示想用z键代替CTRL+C键
{
pMsg->wParam=67;//这里却难住我了,如何将CTRL+C两键同时赋值给pMsg呢?????????
}
}
有其他方法更好了,可以以一键代替CTRL+C键
return CDialog::PreTranslateMessage(pMsg);
}{
return FALSE;//对话框内部控件可以接收到回车消息!!
//return TRUE;//对话框内部控件不可以接收到回车消息!!
}
}
上面代码粘贴错了,有点乱,以下是:
BOOL CCtextDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam ==90)//这里90是表示想用z键代替CTRL+C键
{
pMsg->wParam=67;//这里却难住我了,如何将CTRL+C两键同时赋值给pMsg呢?????????
}
}
return CDialog::PreTranslateMessage(pMsg);
} 展开
4个回答
展开全部
你是想模拟替换按键吧,建议你直接发送剪贴版消息,更简便,代码如下:
BOOL CCtextDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam ==90)//这里90是表示想用z键代替CTRL+C键
{
if(GetFocus())
GetFocus()->SendMessage(WM_COPY, 0, 0);
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
附:
WM_COPY 复制
WM_CUT 剪切
WM_PASTE 粘贴
WM_CLEAR 清除
BOOL CCtextDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam ==90)//这里90是表示想用z键代替CTRL+C键
{
if(GetFocus())
GetFocus()->SendMessage(WM_COPY, 0, 0);
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
附:
WM_COPY 复制
WM_CUT 剪切
WM_PASTE 粘贴
WM_CLEAR 清除
推荐于2018-05-17
展开全部
#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 region
switch (wparam)
{
case VK_CONTROL: isCtrldown = true; break;
case 'C': iscdown = true; break;
break;
#pragma endregion
case WM_KEYUP: // VK_UP
#pragma region
switch (wparam)
{
case VK_CONTROL: isCtrldown = false; break;
case 'C': iscdown = false; break;
}
break;
#pragma endregion
接下来是响应wm_char的代码:
case WM_CHAR: // CHAR
#pragma region
switch (wparam)
{
case 0x03: // ETX
#pragma region
if (isCtrldown && isCtrldown)
PostMessage(hwnd, WM_COPY, 121, 0);
break;
#pragma endregion
}
break;
#pragma endregion
最后只要响应 wm_copy把数据复制到粘帖板就可以了。
static bool isCtrldown = false;
static bool iscdown = false;
#pragma endregion CTRL+C模拟
然后在wm_keydown和wm_keyup消息处理处加入下列代码:
case WM_KEYDOWN: // VK_DOWN
#pragma region
switch (wparam)
{
case VK_CONTROL: isCtrldown = true; break;
case 'C': iscdown = true; break;
break;
#pragma endregion
case WM_KEYUP: // VK_UP
#pragma region
switch (wparam)
{
case VK_CONTROL: isCtrldown = false; break;
case 'C': iscdown = false; break;
}
break;
#pragma endregion
接下来是响应wm_char的代码:
case WM_CHAR: // CHAR
#pragma region
switch (wparam)
{
case 0x03: // ETX
#pragma region
if (isCtrldown && isCtrldown)
PostMessage(hwnd, WM_COPY, 121, 0);
break;
#pragma endregion
}
break;
#pragma endregion
最后只要响应 wm_copy把数据复制到粘帖板就可以了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用Accelerator修改复制按钮,或者使用RegisterHotKey()来注册热键.使用UnregisterHotKey()来注销热键.
RegisterHotKey(m_hWnd,0xa001,VK_RETURN);
VK_RETURN为enter键
RegisterHotKey(m_hWnd,0xa001,VK_RETURN);
VK_RETURN为enter键
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(wParam==(0x0d&VK_CONTROL))
使用&符号表示组合键
使用&符号表示组合键
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询