gpt4 book ai didi

c# - 如何使用 RichTextBox 去除烦人的 BEEP

转载 作者:太空狗 更新时间:2023-10-30 01:10:28 28 4
gpt4 key购买 nike

我在新窗体上放置了一个 RichTextBox 控件并启动了该项目。所以 RichTextBox.Text = "";

每次我按下向上或向下键时,我都会听到烦人的哔哔声!如何摆脱这个问题?

在 KeyDown 方法中使用“e.SuppressKeyPress = true”锁定光标位置。

最佳答案

首先我们需要发送EM_GETOLEINTERFACE发送到 rich edit 窗口的消息 - 这是检索 IRichEditOle 对象,客户端可以使用该对象访问 rich edit 控件的组件对象模型 (COM) 功能。

然后检索 ITextServices指针,在 EM_GETOLEINTERFACE 返回的私有(private) IUnknown 指针上调用 QueryInterface .

这里存在有趣的一点 - IID_ITextServices 不是众所周知但需要在运行时从 Msftedit.dll 获取

来自 About Windowless Rich Edit Controls

Msftedit.dll exports an interface identifier (IID) called IID_ITextServices that you can use to query the IUnknown pointer for the ITextServices interface.

在我们得到ITextServices之后指针 - 我们可以调用 OnTxPropertyBitsChange(TXTBIT_ALLOWBEEP, 0)

代码示例:

    if (HMODULE hmodRichEdit = LoadLibrary(L"Msftedit.dll"))
{
// create richedit window
if (HWND hwndRich = CreateWindowExW(0, MSFTEDIT_CLASS, ...))
{
if (IID* pIID_ITS = (IID*) GetProcAddress(hmodRichEdit, "IID_ITextServices"))
{
IUnknown* pUnk;
if (SendMessageW(hwndRich, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk))
{
ITextServices* pTxtSrv;
HRESULT hr = pUnk->QueryInterface(*pIID_ITS, (void**)&pTxtSrv);
pUnk->Release();
if (0 <= hr)
{
pTxtSrv->OnTxPropertyBitsChange(TXTBIT_ALLOWBEEP, 0);
pTxtSrv->Release();
}
}
}
}
}

关于c# - 如何使用 RichTextBox 去除烦人的 BEEP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683663/

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