如何在TRichEdit控件中取消MouseWheel Windows消息以修复滚动?

时间:2017-07-06 16:58:39

标签: c++builder

在我正在处理的应用程序中,表单中有TListViewTRichEdit。 当用户点击TListView中的项目时,它会加载TRichEdit文字。当文本长度超过TRichEdit的高度时,会出现问题。

如果我真的快速滚动鼠标滚轮并且即使滚动条位于底部我继续滚动,那么我点击TListview中的另一个项目(使TRichEdit->Text更改),滚动有时会在新加载的文本上继续。

我的假设是有某种Windows消息尚未处理,当我点击另一个项目时,会读取滚动消息并继续滚动?!

我已经尝试禁用然后启用TRichEdit MouseLeave上的TRichEdit但没有成功(当我更改TListView的选定项目时滚动继续)。

我想知道是否有人有任何想法?

[编辑]

好的,所以我正在尝试使用Remy的解决方案,但PeekMessage()没有抓住任何WM_VSCROLLWM_HSCROLLWM_MOUSEWHEEL。我试图在函数DescriptionChanged();之前和之后捕获它,但它们都没有捕获滚动消息。

void __fastcall TfrmJob::lvDescriptionSelectItem(TObject *Sender, TListItem *Item, bool Selected)
{

    //Function where ListView load item into RichEdit->Text  
    DescriptionChanged();

    MSG msg;

    //Loop while there is messages ("If no messages are available, the return value is zero")
    while (PeekMessage(&msg, NULL /*reDocDetail->Handle*/ /*lvDescription->Handle*/, 0, 0, PM_REMOVE | PM_QS_INPUT) > 0)
    {
        //Trying to catch Scroll message
        if(msg.message == WM_VSCROLL || msg.message == WM_HSCROLL || msg.message == WM_MOUSEWHEEL)
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    }
}

0 个答案:

没有答案