richit Control EM_POSFROMCHAR访问冲突



我不明白。

我发送:

SendMessage(hrichedit, EM_POSFROMCHAR, (WPARAM)pos, 0);

pos=0x69

文档说:

按钮富编辑1.0和3.0:指向一个点的指针结构,该结构接收字符的客户端区域坐标。坐标以屏幕为单位,相对于左上角控件的客户端区域的角。

Edit控件和Rich Edit 2.0:性格。

lParamRich Edit 1.0和3.0:字符的从零开始的索引

编辑控件和富编辑2.0:不使用该参数。

我很确定我正在使用富编辑2.0控件,并得到以下内容:

0x00007FFE6A0121C6 (riched20.dll)抛出异常0xC0000005:访问冲突写入位置0x0000000000000069.

我还确认了查看CPU拆卸,它正试图写入pos传递的值的地址。

怎么回事?

我还以为可能不是2.0 ..但GetClassName()返回RichEdit20W

文档还说:

Rich Edit 3.0及以上版本:为了向后兼容,Microsoft RichEdit 3.0支持Microsoft Rich Edit 2.0使用的语法。如果Microsoft Rich Edit 3.0检测wParam不是一个有效的POINTL指针时,它假定消息是使用Microsoft Rich Edit发送的2.0语法。在本例中,它使用返回值返回坐标。

但显然不是这样的。

答案是,即使Visual Studio异常会发生,该异常由rich20.dll处理,并正确返回信息,就像使用了RichEdit V2控件一样。看来Win2K是V3启动时,所以如果你只需要处理Win2K或更高版本,你可以使用V3格式,如果需要NT4支持,你可以使用V2格式,并将与V3一起工作(也是rich20.dll的一部分)。

最新更新