您似乎创建了一个自定义编辑窗口。
您可以通过在 WndProc 中检查 WM_CONTEXTMENU 来处理编辑窗口的右键单击。
通过 wParam 参数获取窗口句柄,将其与您的编辑窗口进行比较,以查看用户是否右键单击了编辑窗口。
从那里,通过CreatePopupMenu() 创建popupmenu。
通过InsertMenu()/AppendMenu() 插入/追加到菜单中。
最后,拨打TrackPopupMenu()。
代码:
#define IDC_PASTE 102
case WM_CONTEXTMENU:
if ((HWND)wParam == hwndEdit)
{
m_hMenu = CreatePopupMenu();
InsertMenu(m_hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_ENABLED, IDC_PASTE, L"Paste");
TrackPopupMenu(m_hMenu, TPM_TOPALIGN | TPM_LEFTALIGN, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, hWnd, NULL);
}
接下来您需要处理粘贴消息。从问题可以看出,你的粘贴快捷方式还是有用的,可以使用SendInput模拟粘贴。
代码:
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDC_PASTE:
{
SetForegroundWindow(hwndEdit);
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// Press the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Press the "V" key
ip.ki.wVk = 'V';
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "V" key
ip.ki.wVk = 'V';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// Release the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
}
break;
...