2016-09-18 3 views
-1

Ich habe eine schreibgeschützte Edit Control, die eine mehrzeilige Zeichenfolge anzeigt. Ich setze die Hintergrundfarbe dafür mit WM_CTLCOLORSTATIC in der Fensterprozedur des Dialogs, von dem mein Steuerelement abgeleitet ist. Wenn das Fenster geschrumpft ist, erscheint scrollbar für das Edit Control. Es funktioniert alles gut, Sie können wählen, kopieren, scrollen Sie den Text nach links und rechts.WinAPI: Zeichnen Sie Rechtecke hinter Edit Control Text

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

Ich möchte benutzerdefinierte Hintergrundfarbe hinter einer bestimmten Zeile vornehmen. Meine normale BG ist dort weiß, und für diese Linie möchte ich sagen, blau.

Ich habe versucht, WM_PAINT für die Bearbeitungssteuerung zu verwenden, aber dann scheint ich den Text noch einmal zu zeichnen, oder der ursprüngliche Text des Steuerelements wird nicht sichtbar sein, bis ich es auswähle. Und wenn ich manuell auch Text zeichne, scrollt es nicht wie der ursprüngliche Text.

+0

Da dies linienorientiert zu sein scheint, verwenden Sie stattdessen eine Listensteuerung? – alk

+0

hätte ich, wenn es ursprünglich von mir erstellt wurde. Hier muss ich ein vorhandenes Steuerelement optimieren, wobei viel Logik bereits darauf basiert, dass es Edit ist. – feos

+0

Related: http://StackOverflow.com/Q/8024157/694576 – alk

Antwort

1

Wenn Sie unbedingt ein Bearbeitungssteuerelement haben müssen, sehe ich keine Lösung. Mit einigen Optimierungen können Sie jedoch ein Rich-Edit-Steuerelement verwenden. Es akzeptiert die meisten der gleichen Nachrichten wie ein Bearbeitungssteuerelement. Der Trick wäre, SetCharFormat zu verwenden, um das Format der Zeile festzulegen, die Sie ändern möchten.

+0

Ich versuche bereits, es zu wechseln, und es hat nicht das übliche Kontextmenü Bearbeiten Steuerelement hat: Kopieren, Einfügen, Alles auswählen, etc. Ich versuche gerade mein eigenes Menü dafür zu erstellen. Gibt es eine einfache Möglichkeit, das Standard-Textmenü anzuzeigen, oder ich muss es manuell erstellen? – feos

+0

Ich denke, Sie müssen Ihren eigenen Handler und Menü rollen. –

+0

Nachdem ich komplett auf RichEdit umgestiegen bin, habe ich herausgefunden, dass ** ich keine bestimmten Farben für die BG einer beliebigen Zeile setzen kann, ohne exakt den gleichen Hack, den ich mit Edit Control habe. Sie müssen es entweder auswählen oder ein Caret darauf haben, oder zeichnen Sie Ihren Text über sein eigenes. http://win32assembly.programminghorizon.com/tut35.html – feos