BCB接管消息循环

private:    // User declarations
    void __fastcall RichNewProc1(TMessage& Message);
    void __fastcall RichNewProc2(TMessage& Message);
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    // 使两个RichEdit大小一样
    RichEdit2->Width = RichEdit1->Width;
    RichEdit2->Height = RichEdit1->Height;
 
    // 接管RichEdit的WidowProc,实现子类化
    RichEdit1->WindowProc = RichNewProc1;
    RichEdit2->WindowProc = RichNewProc2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichNewProc1(TMessage &Message)
{
    if (Message.Msg == WM_VSCROLL || Message.Msg == WM_HSCROLL)
    {
        DWORD dwWParam = Message.WParam;
        DWORD dwFlag = 0x1000;
 
        // 判断滚动消息是否来自另一个RichEdit
        if ((dwWParam & dwFlag) != dwFlag)
        {
            // 如果消息不是来自另一个RichEdit,对Message.WParam添加标志
            dwWParam |= dwFlag;
 
            // 投递滚动消息给另一个RichEdit
            ::PostMessage(RichEdit2->Handle, Message.Msg, dwWParam, Message.LParam);
 
            // 更改另一个RichEdit的滚动条滑块位置
            if (Message.Msg == WM_VSCROLL)
                // 竖滚动
                ::SetScrollPos(RichEdit2->Handle, SB_VERT, Message.WParamHi, true);
            else if (Message.Msg == WM_HSCROLL)
                // 横滚动
                ::SetScrollPos(RichEdit2->Handle, SB_HORZ, Message.WParamHi, true);
        }
        else
        {
            Message.WParam = (dwWParam & ~dwFlag);
        }
    }
    RichEdit1->Dispatch(&Message);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RichNewProc2(TMessage &Message)
{
    if (Message.Msg == WM_VSCROLL || Message.Msg == WM_HSCROLL)
    {
        DWORD dwWParam = Message.WParam;
        DWORD dwFlag = 0x1000;
 
        // 判断滚动消息是否来自另一个RichEdit
        if ((dwWParam & dwFlag) != dwFlag)
        {
            // 如果消息不是来自另一个RichEdit,对Message.WParam添加标志
            dwWParam |= dwFlag;
 
            // 投递滚动消息给另一个RichEdit
            ::PostMessage(RichEdit1->Handle, Message.Msg, dwWParam, Message.LParam);
 
            // 更改另一个RichEdit的滚动条滑块位置
            if (Message.Msg == WM_VSCROLL)
                // 竖滚动
                ::SetScrollPos(RichEdit1->Handle, SB_VERT, Message.WParamHi, true);
            else if (Message.Msg == WM_HSCROLL)
                // 横滚动
                ::SetScrollPos(RichEdit1->Handle, SB_HORZ, Message.WParamHi, true);
        }
        else
        {
            Message.WParam = (dwWParam & ~dwFlag);
        }
    }
    RichEdit2->Dispatch(&Message);
}

 

转载于:https://www.cnblogs.com/luyuxibaby/p/5217283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值