gpt4 book ai didi

c - 纯 C : Dialogue default handling of Ctrl+C messages

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:21 24 4
gpt4 key购买 nike

标准 Windows 消息框具有通过按 Ctrl+C 将其内容复制到剪贴板的功能。好的,我决定自己尝试这样做。

这是我的对话资源:

IDD_MAIN DIALOGEX 0,0,500,250 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Information"
FONT 8, "MS Shell Dlg",0,0,0x1
{ LTEXT "I strongly recommend you to move all your user folders to disk D\:",ID_INFOTEXT,10,10,100,100
CHECKBOX "&Do not show this dialogue again",ID_SHOWSTATE,10,120,100,15
DEFPUSHBUTTON "&Ok",IDOK,273, 148, 100, 15
}

对话创建得很好,一切也都很好。复选框按预期选中/取消选中,然后确定关闭对话框。

现在,当您按下 Ctrl+C 时,您会听到一声难看的哔哔声。我曾尝试在对话过程中处理 Ctrl+C,但根本没有击键。现在我在子类控制窗口过程中使用了 WM_GETDLGCODE,但也没有结果 - 无法摆脱那丑陋的哔哔声,Ctrl+C 也不会去那里。

好的,我已经为对话替换了一个 windowProc,但仍然没有结果 - 丑陋的哔哔声就位,但那里没有 Ctrl+C。

所以最后的问题是,默认情况下,丑陋的哔哔声来自哪里? DefWindowProc 中某处有任何特殊消息句柄吗?最后在哪里可以处理并更换处理程序?

P. S. 没有 MFC,没有启动代码,没有 .net,只有纯 C 和 WinAPI。

最佳答案

对话管理器以特殊方式处理基于MessageBox 的对话,并向它们发送WM_COPY 消息,以便它可以填充剪贴板。

蜂鸣声来自 IsDialogMessage,因为具有键盘焦点的子控件不需要键盘输入。

要捕捉 Ctrl+C 按键并避免蜂鸣声,您必须在调用 IsDialogMessage 之前处理键盘消息。您可以调用TranslateAccelerator或者做你自己的自定义处理:

INT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM Wp, LPARAM Lp)
{
switch(Msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COPY:
MessageBoxA(hDlg, "TODO: Set clipboard content here", 0, 0);
break;
}
return FALSE;
}

BOOL IsKbdCopyMessage(HWND hDlg, MSG*pMsg)
{
if (pMsg->message == WM_CHAR && pMsg->wParam == VK_CANCEL)
{
LRESULT dlgcod = SendMessage(pMsg->hwnd, WM_GETDLGCODE, pMsg->wParam, 0);
if (!(dlgcod & (DLGC_WANTMESSAGE|DLGC_WANTCHARS)))
{
SendMessage(hDlg, WM_COPY, 0, 0);
return TRUE;
}
}
return FALSE;
}

...WinMain(...)
{
MSG msg;
HWND hDlg = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
while(GetMessage(&msg, 0, 0, 0))
{
if (IsKbdCopyMessage(hDlg, &msg)) continue;
if (IsDialogMessage(hDlg, &msg)) continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

关于c - 纯 C : Dialogue default handling of Ctrl+C messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com