- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
标准 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/
我正在使用的文本如下。 到目前为止,我已经导入了文本: tempest.v sum(unlist(strsplit(speaker_parts[prosp], split = "")) == " "
我想在没有网络时退出我的应用程序在退出之前我想向用户显示一条消息哪个对话可以用于此。 我试图从 OnDestroy() 显示警报对话框 但它给出窗口泄漏异常 在我调用 finish 的 asyncta
我是 PHP 新手,所以这可能是一个 super 简单的任务: 现在,我正在从脚本内将文件上传到 blob,但不允许用户选择特定文件: $result = $storageClient->putBlo
在对话完成并且其确认状态更改为已确认之后,我发出另一个对话指令./intent ,但其指令不起作用,它直接跳转到发出并结束 代码:- const handlers = { 'LaunchReq
如何在图片中显示文字“Selected Item x”来点赞? ITM=$(dialog --stdout --menu "\nSelect Items...\n " 20 12
我最近才开始使用 Cast SDK,并按照指南进行设置(可在此处找到:https://developers.google.com/cast/docs/android_sender_integrate)
我想要的禁止在新的浏览器选项卡/窗口中打开a-references。 可能的解决方案:将 a 的 href 属性替换为 data-href。 问题:由于 twitter bootstrap 的实现,要
有没有一种方法可以选择多个文件并将它们按您点击的顺序添加到列表中?我知道如何选择多个文件,但它们通常只是按字母顺序添加。 最佳答案 不,文件选择器默认没有这个功能(为什么会有?)。 您可以将源代码带到
我正在尝试在网站上方构建一个文本栏,例如 Twitter or SO does.任何关于如何构建它的建议都会很棒。我不知道你怎么称呼这个功能,但也许有一个 jQuery 插件可以做到这一点? 我想到的
我正在尝试在 React 和 Material UI 中创建一个简单的确认对话。我已经打开它以响应提交表单。但是,当我尝试在对话框中创建一个将关闭它的按钮时,单击该按钮时没有任何反应。我将打开状态绑定
我正在尝试在 React 和 Material UI 中创建一个简单的确认对话。我已经打开它以响应提交表单。但是,当我尝试在对话框中创建一个将关闭它的按钮时,单击该按钮时没有任何反应。我将打开状态绑定
我目前正在为两个流编写一个包装器。最后,我想模仿一段对话Person使我的代码清晰易用。 声明 class Person { public: void process(); private:
我正在使用 simpledialog2 在 jQuery Mobile 应用程序中创建对话框。 至少在 Google Chrome 中,如果用户通过单击一个 ListView 项打开一个对话框,关闭它
在为 windows 使用 node-webkit 构建应用程序时,我需要在没有对话框的情况下进行打印。这可能吗? Similar to: http://drziegler.net/kiosksile
我想完全重新设计 Android 中的默认对话组件。具体来说,我想这样做: 将半透明叠加背景从默认的黑色更改为半透明的白色。 改变对话窗口删除默认的窗口框架边框,并用布局替换它在 XML 中定义(它将
我在使用 facebook javascript sdk 的页面选项卡中有一个应用程序。当新用户使用该应用程序时,我会看到预期的“使用 facebook 登录”弹出窗口。我也有一些扩展权限,我在 FB
每当我为特定项目启动 Visual Studio 2015 Publish Web Dialogue(或 Visual Studio 2013,两者都有相同的问题)时,它需要大约 20-30 秒才能打
当我按下 Add... “附加数据库”窗口中的按钮出现以下错误: TITLE: Microsoft SQL Server Management Studio ---------------------
我有一个带有 PrimeFaces 的 JSF 项目。 我的项目中有一个“仪表板”,其中包含一个带有 p:datatable 的小 p:panel。我的表中的数据由我的 bean 动态更新。我希望能够
标准 Windows 消息框具有通过按 Ctrl+C 将其内容复制到剪贴板的功能。好的,我决定自己尝试这样做。 这是我的对话资源: IDD_MAIN DIALOGEX 0,0,500,250 STYL
我是一名优秀的程序员,十分优秀!