MFC,是不是有任何方便的方法可以在其成员函数中获取编辑框的内容?
Posted
技术标签:
【中文标题】MFC,是不是有任何方便的方法可以在其成员函数中获取编辑框的内容?【英文标题】:MFC, Is there any handy way to get the contents of an edit box within its member function?MFC,是否有任何方便的方法可以在其成员函数中获取编辑框的内容? 【发布时间】:2021-12-30 07:30:42 【问题描述】:我正在通过基于 MFC 从CEdit
继承一个新类来自定义一个编辑框。我想在它的成员函数中访问它的内容(文本)。我想知道是否有比调用公共函数GetWindowText()
更方便/更安全/更快的方式来读写字符串?
【问题讨论】:
GetWindowText()
和 SetWindowText()
成员函数有什么不“方便”的地方?
我需要创建一个额外的字符串,然后复制它...emmm,我认为窗口类可以为它自己的成员函数留下一个后门...
IIRC,CWnd::GetWindowText()
成员函数只是全局 ::GetWindowText(hWnd, lpString, strlen)
API 例程的包装器。基于 MFC 窗口的类实际上没有任何“特殊”权限/访问本机底层 HWND
对象。
知道了,谢谢
【参考方案1】:
对于单行编辑控件,获取存储在控件中的文本的唯一方法是调用GetWindowText
(在可选调用GetWindowTextLength
之后)。 MFC 的CWnd
实现提供了两个GetWindowText
重载,其中一个引用了CString
。通过承担为您管理内存的责任,此重载肯定符合 “handy” 和 “safe” 类别。至于“快”,好吧,堆分配本质上是昂贵的;实际副本本身速度非常快。
多行编辑控件提供额外的 API 来直接访问控件文本的内存表示。编辑控件消息EM_GETHANDLE
和EM_SETHANDLE
允许客户端分别获得对文本的只读访问权限或更改控件用于存储其文本的内存位置。它们作为CEdit
成员函数GetHandle
和SetHandle
公开。
两者的 MFC 文档建议它们需要 DS_LOCALEDIT
对话框样式才能工作。虽然在 16 位 Windows 中可能会出现这种情况,但我认为现在情况并非如此。
【讨论】:
以上是关于MFC,是不是有任何方便的方法可以在其成员函数中获取编辑框的内容?的主要内容,如果未能解决你的问题,请参考以下文章