我不明白。
我发送:
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的一部分)。