Похоже, что вы создали собственное окно редактирования.
Вы можете обрабатывать щелчок правой кнопкой мыши в окне редактирования, проверяя WM_CONTEXTMENU в вашем WndPro c.
Захватите дескриптор окна через параметр wParam, сравните его с окном редактирования, чтобы увидеть, щелкнул ли пользователь правой кнопкой мыши в окне редактирования.
Оттуда создайте popupmenu
через CreatePopupMenu ( ) .
Вставить / добавить в меню с помощью 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;
...