Tag: richedit

WinAPI EM_STREAMOUT崩溃

我正试图从另一个程序中获取Richedit Control的文本。 所以我找到了SendMessage的EM_STREAMOUT。 到目前为止这是我的代码(也来自另一个Stackoverflow主题): DWORD CALLBACK EditStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { std::stringstream *rtf = (std::stringstream*) dwCookie; rtf->write((char*)pbBuff, cb); *pcb = cb; return 0; } int main() { std::stringstream rtf; EDITSTREAM es = {0}; es.dwCookie = (DWORD_PTR) &rtf; es.pfnCallback = &EditStreamOutCallback; SendMessage((HWND) 0x00000000000A06E8, EM_STREAMOUT, SF_RTF, (LPARAM)&es); } 唯一发生的事情是SendMessage返回0 – 所以显然没有读取字节 – 我试图从中获取信息的程序的CPU使用率高达100%。

如何在富编辑控件上实现鼠标单击URL

我在对话框中添加了一个只读的富编辑2.0控件(代码使用的是C windows API,该对话框是使用函数DialogBox创建的) 在对话框回调中,在WM_INITDIALOG,我添加以下代码以启用URL检测,并启用事件ENM_LINK被发送到父对话框而不是富编辑控件本身: LRESULT mask = SendMessage(hWndText, EM_GETEVENTMASK, 0, 0); //hWndText is rich edit control SendMessage(hWndText, EM_SETEVENTMASK, 0, mask | ENM_LINK); ::SendMessage(hWndText, EM_AUTOURLDETECT, TRUE, NULL); 在最初启动对话框时启用url检测时遇到了一些麻烦(这似乎是一个已知问题或行为,因为丰富的编辑控件只能启用对已修改文本的url检测)。 但是,我通过在每个WM_PAINT事件上再次设置对话框文本来解决此问题。 代码通常有效。 我还实现了以下代码,当鼠标hover在url上时,在浏览器中启动URL: case WM_NOTIFY: plink = (ENLINK *) lParam; switch(LOWORD(wParam)) { case IDC_DISPLAY_TEXT_2: //this is ID for my rich edit control szURL =m_strDisplay.Mid(plink->chrg.cpMin, plink->chrg.cpMax – plink->chrg.cpMin); LaunchURL(szURL); […]

如何在Rich Edit控件(Win32 / C)中更改下划线颜色

我正在寻找一种方法在Rich Edit控件中使用红色波浪形下划线(我使用的是带有Msftedit.dll的4.1版本)。 我可以使用以下代码生成波浪形下划线: CHARFORMAT2 format; format.cbSize = sizeof(format); format.dwMask = CFM_UNDERLINETYPE; format.bUnderlineType = CFU_UNDERLINEWAVE; SendMessage(hWndEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&format); MSDN文档未指定如何更改下划线的颜色,仅指定文本(带下划线)和文本背景。 我发现了一些代码,它们使用较低的半字节作为下划线类型(CFU_UNDERLINEWAVE),而较高的字母表示颜色。 所以我试过了: format.bUnderlineType = CFU_UNDERLINEWAVE | 0x50; 但这不起作用。 UPDATE 我已经使用3.0版(Riched20.dll)测试了这段代码并且它正在运行。 所以问题在于4.1。 该function是否已删除或移至其他位置? 它也不适用于版本6(office 2007使用的dll)。