В edit добавил стиль ES_MULTILINE ,теперь при вводе текста backspace'ом не удаляются символы,он их перепрыгивает и удаляет всю строку когда дойдет до начала.
Dial Dialog 0,0,200,270 STYLE WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER | DS_SETFOREGROUND Caption "Prog" FONT 12,"Times New Roman" { CONTROL "",ID_EDIT,"EDIT",WS_VISIBLE | WS_TABSTOP | ES_AUTOVSCROLL | ES_WANTRETURN | ES_MULTILINE | WS_BORDER,10,95,180,25 }
у меня такой работает Код (Text): 200 DIALOGEX 0, 0, 252, 148 STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX CAPTION "" FONT 10, "Courier New", 400, 0 { CONTROL "", IDC_EDIT_1, "edit", ES_LEFT | ES_MULTILINE | ES_WANTRETURN | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 4, 17, 244, 116, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE CONTROL "", IDC_MSCTLS_STATUSBAR1, "msctls_statusbar32", SBT_NOBORDERS | CCS_TOP | CCS_NOMOVEY | WS_CHILD | WS_VISIBLE, 0, 135, 252, 13 }
Да... проблема не нова как вижу, а решения так и не найдено. Я тоже столкнулся с таким поведением EDIT со стилем ES_MULTILINE, если поменять его фон. Вот мой код: Код (Text): // win.c #include <windows.h> HDC hDC; BOOL CALLBACK DlgP (HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) { switch (message) { case WM_INITDIALOG : hDC = GetDC(hDlg); break; case WM_CTLCOLOREDIT : SetTextColor((HDC) wParam,0); SetBkMode((HDC) wParam,TRANSPARENT); return ((DWORD) GetStockObject(LTGRAY_BRUSH)); break; case WM_CLOSE : EndDialog (hDlg, 0); break; } return FALSE; } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { DialogBoxParamA(hInstance, "WINDOW", 0, DlgP, 0); return 0; } Код (Text): // win.rc #include "windows.h" WINDOW DIALOGEX 142, 58, 270, 94 STYLE DS_SETFOREGROUND | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 8, "Tahoma" BEGIN EDITTEXT 104,40,22,189,46,ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL END Резултат - backspaсe работает не правильно, при прокрутке текст накладывается друг на друга. Проблема, как я думаю кроется в неправильной отрисовке содержимого окна самой виндой, а вот как это побороть ума не приложу. Перекопал весь интернет, но тщетно. Пробовал различные манипуляции с InvalidateRect, но выходит криво. Может быть всё-таки кто-нибудь решил эту проблему? Подскажите пожалуйста.
gloom а кто вас так учил писать DlgProc ? Код (Text): BOOL __stdcall DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: break; case WM_CLOSE: EndDialog(hDlg, 0); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_DOIT: break; case IDCANCEL: case IDC_EXIT: SendMessage(hDlg, WM_CLOSE, 0, 0); break; default: return 0; } break; default: return 0; } return 1; }
а что в этом есть какая-то проблема? а по поводу вопроса я решил сам. Меняем SetBkMode((HDC) wParam,TRANSPARENT); на SetBkColor((HDC) wParam,0x00C6C3C6);