Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Сделать текстовое поле, как Memo


Автор: champion 25.1.2006, 09:23
Как можно сделать такое поле, где можно вводить текст? Типа memo. Соответвенно на форме.

Автор: _hunter 25.1.2006, 11:20
а чем memo не подходит?

Автор: champion 25.1.2006, 11:52
Я делаю в чистом С++, CodeBlocks компилятор ) Меня интересует как сделать в нём

Автор: _hunter 25.1.2006, 12:54
что значит "в чистом С++"? это значит и без API?

Автор: Romikgy 25.1.2006, 13:04
В апи есть точно листбокс, юзай его

Автор: champion 25.1.2006, 13:09
А как к нему обратится? Как им пользоваться?
И подскажите пожалуйста, где можно найти описание всех событий Windows? Я читал в msdn ничего токлвого не нашел ( Точнее ин. яз плохо знаю

Автор: Romikgy 25.1.2006, 13:36
Пример из МСДН
Код

#define BUFFER MAX_PATH  
 
#define NAMELENGTH 15 
#define POSITIONLENGTH 20 
#define TEAMSIZE 15 
 
typedef struct { 
    TCHAR tchName[NAMELENGTH]; 
    TCHAR tchPosition[POSITIONLENGTH]; 
    int nGamesPlayed; 
    int nInningsPlayed; 
    double xBattingAverage; 
    TCHAR tchFoodName[NAMELENGTH]; 
} Player; 
 
Player Roster[] = { 
        {"Pete", "shortstop", 26, 90, .608, "Rutabaga"}, 
        {"Suzanna", "catcher", 16, 53, .286, "Toast"}, 
        {"Jack", "pitcher", 27, 110, .542, "Animal Crackers"}, 

        {"Karen", "second base", 26, 140, .238, "Pez"}, 
        {"Dave", "first base", 28, 138, .508, "Suds"}, 
        {"Wendy", "third base", 25, 154, .493, "Ham"}, 
        {"Matt", "shortstop", 24, 112, .579, "Oats"}, 
        {"Jenny", "right field", 22, 101, .509, "Mashed Potatoes"}, 
        {"Seth", "left-center field", 20, 76, .407, "Otter Pop"}, 
        {"Kathie", "left field", 26, 127, .353, "Baba Ganouj"}, 
        {"Colin", "pitcher", 26, 96, .456, "Lefse"}, 

        {"Penny", "right field", 24, 112, .393, "Zotz"}, 
        {"Art", "left-center field", 17, 56, .375, "Cannelloni"}, 
        {"Cindy", "second base", 13, 58, .207, "Tequila"}, 
        {"David", "center field", 18, 101, .612, "Bok Choy"} 
    }; 
 
/* 
 * FUNCTION: DlgTeamProc(HWND, unsigned, UINT, LONG) 
 * 
 * PURPOSE:  Dialog box for "BFG Softball Statistics" 
 */ 
 
BOOL APIENTRY DlgTeamProc( 
    HWND hDlg,            /* window handle of dialog box   */ 

    UINT message,         /* type of message               */ 
    UINT wParam,          /* message-specific information  */ 
    LONG lParam)          /* message-specific information  */ 
{ 
    TCHAR tchBuffer[BUFFER]; 
    int nItem; 
    int i; 
    HWND hwndList; 
 
    switch (message) { 
 
        case WM_INITDIALOG: 
        { 
             hwndList = GetDlgItem(hDlg, IDL_SOFTBALL); 
 
 
            /* Initialize the list box (fill it with player names). */ 

 
            for (i = 0; i < TEAMSIZE; i++) { 
                SendMessage(hwndList, LB_ADDSTRING, 0, 
                    (LPARAM) Roster[i].tchName); 
                SendMessage(hwndList, LB_SETITEMDATA, i, (LPARAM) i); 
 
            } 
            SetFocus(hwndList); 
            return FALSE; 
        } 
 
        case WM_COMMAND: 
 
            switch (LOWORD(wParam)) { 
 
                case IDL_SOFTBALL: 
 
                    switch (HIWORD(wParam)) { 

 
                        case LBN_SELCHANGE: 
 
                            /* Show the selected player's statistics. */ 
 
                            hwndList = GetDlgItem(hDlg, IDL_SOFTBALL); 
                            nItem = SendMessage(hwndList, LB_GETCURSEL, 
                                0, 0); 
                            i = SendMessage(hwndList, LB_GETITEMDATA, 
                                nItem, 0); 
 
                            SetDlgItemText(hDlg, IDS_POS, 

                                Roster[i].tchPosition); 
                            SetDlgItemText(hDlg, IDS_GAME, 
                                _itoa(Roster[i].nGamesPlayed, 
                                tchBuffer, 10)); 
                            SetDlgItemText(hDlg, IDS_INN, 
                                _itoa(Roster[i].nInningsPlayed, 
                                tchBuffer, 10)); 
                            SetDlgItemText(hDlg, IDS_BA, 
                                _gcvt(Roster[i].xBattingAverage, 

                                3, tchBuffer)); 
                            SetDlgItemText(hDlg, IDS_FOOD, 
                                Roster[i].tchFoodName); 
 
                            return TRUE; 
                    } 
                    break; 
 
                case IDOK: 
                case IDCANCEL: 
 
                  /* Destroy the dialog box. */ 
 
                  EndDialog(hDlg, TRUE); 
                  return TRUE; 
 
                default: 

                  return FALSE; 
            } 
 
        default: 
            return FALSE; 
    } 
} 
 

Автор: _hunter 25.1.2006, 13:43
т.е. таки юзаем API.
в индексе ( или поиске ) MSDN' а набираем Create window function, открываем описание и читаем

в качестве стиля передай EDIT + ES_MULTILINE

Автор: Fixin 25.1.2006, 15:45
могу к вечеру полноприводный пример притащить, если нужно. Еще в "библиотеке системного программиста" в каком-то томе, не помню, есть пример создания пародии на "Блокнот".

Автор: champion 25.1.2006, 16:34
Спасибо всем.
fixin, пожалуйста, приведи пример кода блокнота )

Автор: Fixin 25.1.2006, 17:31
ок, жди.

Автор: Fixin 25.1.2006, 20:35
Рыться не стал, подрихтовал маленько одни из своих старых творений. Тут многого нехватает (не считая потенциальных "тонких мест", я говорю об отсутствии работы с копипастом и редо/андо), но если надо, можно будет дополнить.

в расширении нехватает "а".

Автор: Alca 16.7.2008, 11:27
Для того, чтобы окно редактирования могло отобразить многострочный текст, сам контрол должен иметь стиль ES_MULTILINE, и текст в окне должен разделяться на строки цепочками символов \r\n. Чтобы разбивать текст на строки во время ввода с клавиатуры (нажатием Enter), необходимо добавить окну редактирования стиль ES_WANTRETURN. Убрать стиль ES_AUTOHSCROLL.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)