Api функции

Тема в разделе "Общие вопросы по С и С++", создана пользователем softrix, 1 сен 2008.

Статус темы:
Закрыта.
  1. softrix

    softrix Гость

    Помогите новичку.

    Не могу найти функцию для получения char *p (или просто текста) из диалог бокса, т.е. что-то вроде
    GetDlgItemInt должно быть но только для строк.
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Что за зверь такой?
    GetWindowText
     
  3. softrix

    softrix Гость

    Посмотрел эту функцию, не очень понял что она делает. Как я понял она заголовок окна вынимает !?

    А мне вообще нужно делать следующее: допустим открывается окно, в нем пользовательский диалог, куда можно вставить кусок текста, нажимаем кнопку и.... Вот что дальше ХЗ как мне этот кусок текста получить, не пойму, функцию для int нашел а для текста ХЗ.

    Если для этого можно использовать GetWindowText может напишите коротенький пример?
     
  4. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    GetDlgItemText
     
  5. softrix

    softrix Гость

    Ну вот кусок кода может будет понятнее:

    ПРостое окно, где есть кнопка и окно для ввода данных (в Диалог Едиторе VS называется Edit Control). Вставляем текст в окно и нажимаем кнопку.
    Результат обрабатывается в My_OnDlgCommand
    [codebox]void My_OnDlgCommand(HWND hwndDlg ,int id, HWND hwndCtrl, UINT codeNotify)
    {
    HWND hOwner;
    hOwner = GetParent(hwndDlg);
    switch(id)
    {
    case IDC_BUTTON1: //Нажали кнопку
    int IntInfl;
    IntInfl = GetDlgItemInt(hwndDlg,IDC_EDIT1,0,TRUE); //Копирует из диалогового окна int данные это понятно
    //А что если нужено текст получить?
    WCHAR *tmp;
    GetDlgItemText(hwndDlg,IDC_EDIT1,tmp,10); //В tmp ничего нет !!! Как правильно этой функцией пользоваться ?

    break;
    }
    }[/codebox]
     
  6. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Конечно ничего не будет... Кто память под буфер будет выделять?
    Код (Text):
    WCHAR tmp[10];
     
  7. softrix

    softrix Гость

    Угу, понял ;) а как выяснить размер текста в буфере, чтобы размер буфера не наобум ставить ?
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Или GetWindowTextLength
     
  9. softrix

    softrix Гость

    А синтаксис ее такой?
    Код (Text):
            int IntInfl;
    IntInfl = SendMessage(hwndDlg,WM_GETTEXTLENGTH ,0,0);
    Если так делаю то она мне постоянно возвращает цифру 6, видимо сообщает длинну названия "Dialog", а как ее затавить чтобы из IDC_EDIT1 длинну давала?
     
  10. Trupik

    Trupik Гость

    [codebox]HWND editBox = GetDlgItem(IDC_EDIT1);
    int bufSize = GetWindowTextLength(wnd) + 1;
    TCHAR* text = new TCHAR[bufSize];
    ZeroMemory(text, bufSize * sizeof(TCHAR));
    GetWindowText(editBox, text, bufSize);
    // ...
    delete [] text;[/codebox]

    Писал сходу, т.ч. могут быть неточности с порядком следования аргументов. :)
    Ну и, естественно, надо добавить проверки возвращаемых значений.
     
  11. softrix

    softrix Гость

    Блин, все равно не получается длинну получить :)((( Вот посмотрите пожалуйста мой код, что тут не так ?

    Код (Text):
    void My_OnDlgCommand(HWND hwndDlg ,int id, HWND hwndCtrl, UINT codeNotify)
    {
    HWND hOwner;
    hOwner = GetParent(hwndDlg);
    HWND editBox=   GetDlgItem(hOwner,IDC_EDIT1);

    switch(id)
    {
    case IDC_BUTTON1:

    TCHAR tmp[10];
    int IntInfl;
    IntInfl = SendMessage(editBox,WM_GETTEXTLENGTH,0,0); // 0
    IntInfl = GetWindowTextLength(editBox); // 0

    GetDlgItemText(hwndDlg,IDC_EDIT1,tmp,10);  //все ок
    GetWindowText(editBox,tmp,10);  //все ок

    break;
    }
    }
     
  12. Trupik

    Trupik Гость

    Код (Text):
    hOwner = GetParent(hwndDlg);
    Это не надо. Этой функцией ты запрашиваешь описатель родительского окна (для окон верхнего уровня это, десктоп), которое окном диалога не является и никаких IDC_EDIT1 не содержит.

    Правильно:
    Код (Text):
    HWND editBox = GetDlgItem(hwndDlg, IDC_EDIT1);
    P.S.: Чего это у меня блоки кода такие большие? :)
     
  13. softrix

    softrix Гость

    Ура получилось ! Спасибо за помощь !
     
Загрузка...
Похожие Темы - Api функции
  1. Vadik(R)
    Ответов:
    2
    Просмотров:
    3.018
  2. Hehabr
    Ответов:
    1
    Просмотров:
    545
  3. rinsk
    Ответов:
    7
    Просмотров:
    657
  4. lmike
    Ответов:
    2
    Просмотров:
    582
  5. slavon-x86
    Ответов:
    0
    Просмотров:
    589
Статус темы:
Закрыта.

Поделиться этой страницей