Richedit
-
Also ich programmiere ja im Moment einen Chat und verwende dort die Richeditbox.
Ich hab ein Richedit auf einem Dialog mit dem Resourceneditor erzeugt. Ich lade am Anfang meiner Anwendung die Datei "riched32.dll".Bei mir läuft alles ohne Einwand. Bei manchen Kumpels von mir, läuft es genau so wie bei mir, aber bei vielen wird in der Richedit einfach nichts angezeigt. Also das Control selber schon, aber irgentwie scheint da meine Funktion nicht drauf anzusprechen:
// function to add a text void utilAppendTextToWindow(HWND hWnd, char *szText, COLORREF crTextColor) { // private int tl; CHARFORMAT cf; tl = GetWindowTextLength(hWnd); // add new text SendMessage(hWnd, EM_SETSEL, tl, tl); SendMessage(hWnd, EM_REPLACESEL, FALSE, (LPARAM)szText); // fill struct memset( &cf, 0, sizeof(CHARFORMAT) ); cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR; cf.crTextColor = crTextColor; // select last text inserted tl = GetWindowTextLength(hWnd); SendMessage(hWnd, EM_SETSEL, (WPARAM)(tl-strlen(szText)), (LPARAM)tl); // set color SendMessage(hWnd, EM_SETCHARFORMAT ,SCF_SELECTION, (LPARAM)&cf); // remove bracket tl = GetWindowTextLength(hWnd); SendMessage(hWnd, EM_SETSEL, tl, tl); // set cusor to end of text for(int l=0; l<SendMessage(hWnd, EM_GETLINECOUNT, 0, 0); l++) SendMessage(hWnd, EM_SCROLL, SB_LINEDOWN, 0); }
Jetzt hab ich mal nach "rich*.dll" gesucht und noch die "riched20.dll" gefunden, welche ja ein viel neueres Datum hat. Also hab ich mir gedacht haben die vielleicht eine neuere Version oder so. Lade ich aber diese Library, wird mein Dialog nicht mehr angezeigt, genauso wie wenn ich garnichts lade...
Wie kann ich es erreichen, dass es in jedem Fall tut, und ich einheitlich programmieren kann? Es ist immer ärgerlich, wenn man feststellen muss, dass es dann wo anders zu Fehlern kommt...
danke
ciao para
-
Also mir wäre es schon eine große Hilfe, wenn ihr mir mal schnell sagen könntet wie groß eure riched32.dll ist, danke!
ciao
-
3,50 KB (3.584 Bytes)
-
3,76 KB (3.856 Bytes) - Windows 2000 / SP 3
-
ich glaub das wird nur auf die riched20 weitergeleitet. weil die ist richtig fett.
413 KB (423.424 Bytes)
-
Also ich habs jetzt anders gemacht, hab im Resourceneditor ein Custom Control erstellt und hab mir mit Spy Classnamen und Styles geholt. Jetzt hab ich ein Riched20A. Aber diese Funktion hier spinnt jetzt mit den Farben, sonst gehts:
// function to add a text void utilAppendTextToWindow(HWND hWnd, char *szText, COLORREF crTextColor, DWORD dwEffects) { // private int tl; CHARFORMAT cf; // get len tl = GetWindowTextLength(hWnd); // add new text SendMessage(hWnd, EM_SETSEL, tl, tl); SendMessage(hWnd, EM_REPLACESEL, FALSE, (LPARAM)szText); // fill struct memset( &cf, 0, sizeof(CHARFORMAT) ); cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR | CFM_ITALIC | CFM_BOLD; cf.crTextColor = crTextColor; cf.dwEffects = dwEffects; // select last text inserted tl = GetWindowTextLength(hWnd); SendMessage(hWnd, EM_SETSEL, (WPARAM)(tl-strlen(szText)), (LPARAM)tl); // set color SendMessage(hWnd, EM_SETCHARFORMAT ,SCF_SELECTION, (LPARAM)&cf); // remove bracket tl = GetWindowTextLength(hWnd); SendMessage(hWnd, EM_SETSEL, tl, tl); // set cusor to end of text for(int l=0; l<SendMessage(hWnd, EM_GETLINECOUNT, 0, 0); l++) SendMessage(hWnd, EM_SCROLL, SB_LINEDOWN, 0); }
-
Also ich denk ich weiss an was es liegt. Mit jedem Return wird die Farbe um eins verschoben, ich weiss kann man schlecht erklären, aber hier mal ein Bild:
http://www.brain-death.net/chat.jpgWas ich dagegen machen kann, weiss ich noch nicht, ich könnte die Returns mitzählen, aber das ist ziemlich unsauber...
ciao para
-
Hat den niemand ne Idee?
-
Kann vielleicht jemand mal mein Code probieren mit einem "RichEd20A", wenn es funzt wäre mir Recht wenn er mir die Styles mitteilen könnte, danke!
Diese ***** hält mein ganzes Projekt auf...
ciao