剪切插入符号

问题描述 投票:0回答:1

我正在编写自己的控件。它包含插入符号。我使用

SetCaretPos()
函数来移动插入符号。当我在窗口内移动插入符号时效果很好:

但是当我为

SetCaretPos()
设置负 y 坐标时,插入符号会绘制在控制窗口之外:

SetCaretPos(10, -5);

然后我使用

IntersectClipRect()
函数创建新的剪切区域:

RECT rcClip, rcClient;
GetClientRect(hEditWnd_MultyLine, &rcClient);

CopyRect(&rcClip, &rcClient);
rcClip.left += 2;//add left margin
rcClip.right -= 2;//add right margin
rcClip.top += 2;//add top margin
rcClip.bottom -= 2;//add bottom margin

HDC _hdc = GetDC(mywnd_hwnd);
IntersectClipRect(_hdc, rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);
ReleaseDC(mywnd_hwnd, _hdc);

它仅适用于像

FillRect()
这样的图形操作,但它对插入符号绘制没有影响 - 没有插入符号剪切:

我的问题是 - 当 y 坐标为负数时如何剪辑插入符号绘图? 我需要这个:

c++ winapi caret clip
1个回答
0
投票

Afaik,你不能这么简单地做到这一点。剪切区域是 GDI 的一部分,插入符号属于“窗口”——本机控件。

从 WinForms 和 C# 提供的功能来看,我认为有几种方法可以做到这一点:

  • 创建一个较小的插入符号,或者
  • 使用子控件绘制插入符号,并且
  • 在这种情况下隐藏并绘制自己的插入符。
© www.soinside.com 2019 - 2024. All rights reserved.