2016-09-18 26 views
-1

我有一个只读编辑控件,它显示多行字符串。我在对话框的窗口过程中使用WM_CTLCOLORSTATIC为它设置背景颜色,我的控件从中被分类。如果窗口缩小,编辑控件会出现滚动条。它一切正常,你可以选择,复制,左右滚动文字。WinAPI:在编辑控件文本后面绘制矩形

case WM_CTLCOLORSTATIC: 
     if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_DEBUGGER_DISASSEMBLY)) 
     { 
      SetBkColor((HDC)wParam, RGB(255, 255, 255)); 
      return (LRESULT) GetStockObject(DC_BRUSH); 
     } 
     break; 

我想在特定行后面制作自定义背景色。我的普通BG在那里是白色的,对于那条线我想要蓝色。

我尝试使用WM_PAINT作为编辑控件,但是我似乎不得不再次绘制文本,否则控件的原始文本在我选择它之前将不可见。如果我也手动绘制文本,它将不会像原始文本一样滚动。

+0

由于这似乎是面向行的使用列表控件呢? – alk

+0

如果它最初是由我创建的,我会拥有它。在这里,我必须调整一个现有的控件,有很多逻辑已经依赖于它的编辑。 – feos

+0

相关:http://stackoverflow.com/q/8024157/694576 – alk

回答

1

如果您绝对必须拥有编辑控件,那么我看不到解决方案。但是,通过一些调整,您可以使用丰富的编辑控件。它接受大部分与编辑控件相同的消息。技巧就是使用SetCharFormat来设置想要更改的行的格式。

+0

我已经尝试切换到它,并没有通常的上下文菜单编辑控件有:复制,粘贴,全选等。我目前正试图为它生成我自己的菜单。有没有简单的方法来显示标准的编辑文本菜单,或者我必须手动创建它? – feos

+0

我认为你必须推出你自己的处理程序和菜单。 –

+0

完全转向RichEdit后,我发现它**不能**将特定颜色设置为任意行的BG,而没有使用编辑控件所具有的完全相同的hackery。您必须选择它,或者选择它,或者在自己的顶部绘制文本。 http://win32assembly.programminghorizo​​n.com/tut35.html – feos