проблема с edit и ES_MULTILINE

Тема в разделе "WASM.BEGINNERS", создана пользователем zxcc, 12 фев 2007.

  1. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    В edit добавил стиль ES_MULTILINE ,теперь при вводе текста backspace'ом не удаляются символы,он их перепрыгивает и удаляет всю строку когда дойдет до начала.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    исходник показывай, что-то со стилями намудрил..
     
  3. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    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
    }
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    у меня такой работает
    Код (Text):
    1. 200 DIALOGEX 0, 0, 252, 148
    2. STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
    3. CAPTION ""
    4. FONT 10, "Courier New", 400, 0
    5. {
    6.  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
    7.  CONTROL "", IDC_MSCTLS_STATUSBAR1, "msctls_statusbar32", SBT_NOBORDERS | CCS_TOP | CCS_NOMOVEY | WS_CHILD | WS_VISIBLE, 0, 135, 252, 13
    8. }
     
  5. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Спасибо Asterix.Попробовал ,пока всё так же.
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    очевидно проблема в самом коде а не в стилях эдита
     
  7. gloom

    gloom New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2004
    Сообщения:
    11
    Да... проблема не нова как вижу, а решения так и не найдено. :dntknw:
    Я тоже столкнулся с таким поведением EDIT со стилем ES_MULTILINE, если поменять его фон.
    Вот мой код:

    Код (Text):
    1. // win.c
    2.  
    3. #include <windows.h>
    4.  
    5. HDC hDC;
    6.  
    7. BOOL CALLBACK DlgP (HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
    8. {
    9.     switch (message)
    10.     {
    11.         case WM_INITDIALOG :
    12.             hDC = GetDC(hDlg);
    13.             break;
    14.  
    15.         case WM_CTLCOLOREDIT :
    16.             SetTextColor((HDC) wParam,0);
    17.             SetBkMode((HDC) wParam,TRANSPARENT);
    18.             return ((DWORD) GetStockObject(LTGRAY_BRUSH));
    19.             break;
    20.  
    21.         case WM_CLOSE :
    22.             EndDialog (hDlg, 0);
    23.             break;
    24.     }
    25.     return FALSE;
    26. }
    27.  
    28. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    29. {
    30.     DialogBoxParamA(hInstance, "WINDOW", 0, DlgP, 0);
    31.     return 0;
    32. }
    Код (Text):
    1. // win.rc
    2.  
    3. #include "windows.h"
    4.  
    5. WINDOW DIALOGEX 142, 58, 270, 94
    6. STYLE DS_SETFOREGROUND | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
    7. FONT 8, "Tahoma"
    8. BEGIN
    9.     EDITTEXT        104,40,22,189,46,ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL
    10. END
    Резултат - backspaсe работает не правильно, при прокрутке текст накладывается друг на друга.
    Проблема, как я думаю кроется в неправильной отрисовке содержимого окна самой виндой, а вот как это побороть ума не приложу. Перекопал весь интернет, но тщетно.
    Пробовал различные манипуляции с InvalidateRect, но выходит криво.

    Может быть всё-таки кто-нибудь решил эту проблему? Подскажите пожалуйста.
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    gloom
    а кто вас так учил писать DlgProc ?

    Код (Text):
    1. BOOL __stdcall DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    2. {
    3.     switch(uMsg)
    4.     {
    5.         case WM_INITDIALOG:
    6.             break;
    7.         case WM_CLOSE:
    8.             EndDialog(hDlg, 0);
    9.             break;
    10.         case WM_COMMAND:
    11.             switch(LOWORD(wParam))
    12.             {
    13.                 case IDC_DOIT:
    14.                     break;
    15.                 case IDCANCEL:
    16.                 case IDC_EXIT:
    17.                     SendMessage(hDlg, WM_CLOSE, 0, 0);
    18.                     break;
    19.                 default:
    20.                     return 0;
    21.             }
    22.             break;
    23.         default:
    24.             return 0;
    25.     }
    26.     return 1;
    27. }
     
  9. gloom

    gloom New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2004
    Сообщения:
    11
    а что в этом есть какая-то проблема?

    а по поводу вопроса я решил сам.
    Меняем SetBkMode((HDC) wParam,TRANSPARENT);
    на SetBkColor((HDC) wParam,0x00C6C3C6);
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    если сообщение обрабатывается то принято возвращать TRUE в диалоговой процедуре