Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с GetWindowText 
:(
    Опции темы
Ksander1000
  Дата 29.7.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



Помогите пожалуйста перенести текст из поля edit в переменную LPSTR:
Код

#undef UNICODE

#include <Windows.h>
#include <WindowsX.h>

LRESULT _stdcall WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

int ButGo();
void CreateWins(HINSTANCE hInstance, HWND *, HWND *, HWND *, HWND *, int *);
void Command(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int nCmdShow)
{
    MSG msg;
    HWND hMainWindow, hButtonExet, hButtonGo, hMainEdit;
    
    WNDCLASSEX wc;

    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)(5);
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.hIcon = LoadIcon(0, IDI_APPLICATION);
    wc.hInstance = hInstance;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = "myclass";
    wc.lpszMenuName = 0;
    wc.style = CS_HREDRAW|CS_VREDRAW;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.hIconSm = 0;

    RegisterClassEx(&wc);
    
    CreateWins(hInstance, 
        &hMainWindow,
        &hButtonExet,
        &hButtonGo,
        &hMainEdit,
        &nCmdShow);

    if(hMainWindow == 0)
        MessageBox(0, "Ошибка при создании окна", "Ошибка!", MB_OK);

        while(GetMessage(&msg, 0, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

LRESULT _stdcall WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    HWND hEdit = (FindWindow("edit", "Введите сюда текст..."));
    switch(msg)
    {
        
    case WM_COMMAND:        
        ///////////////////////////////////////////

        switch(wParam)
        {
        case 1: //Кнопка Выход
            PostQuitMessage(0);
            return 0;
        case 2: // Кнопка Пуск
            ButGo();

        default: return 0;
        }
        ////////////////////////////////////////////
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;        
    default: return DefWindowProc(hWnd, msg, wParam, lParam);
    }
}


/////////////////////////////////////////////////////////////////////////////////////////////////

void CreateWins(
    HINSTANCE hInstance, 
    HWND *hMainWindow, 
    HWND *hButtonExet, 
    HWND *hButtonGo, 
    HWND *hMainEdit,  
    int *nCmdShow)
{
    *hMainWindow = CreateWindowEx(0,
        "myclass",
        "Окно",
        WS_VISIBLE|WS_SYSMENU|WS_MINIMIZEBOX,
        300,
        300,
        300,
        500,
        0,
        0,
        hInstance,
        0);
    
    *hButtonExet = CreateWindowEx(0, "button",
        "Выход",
        BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,
        180, 430,
        100, 30,
        *hMainWindow,
        (HMENU)1, hInstance, 0);

    *hButtonGo = CreateWindowEx(0, "button",
        "Пуск :)",
        BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,
        50, 430, 
        100, 30,
        *hMainWindow,
        (HMENU)2, hInstance, 0);

    *hMainEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
        "edit",
        "Введите сюда текст...",
        WS_CHILD|WS_VISIBLE|ES_LEFT,
        20,20,
        260,
        380,
        *hMainWindow,
        (HMENU)3,
        hInstance,
        0);


    ShowWindow(*hMainWindow, *nCmdShow);
    UpdateWindow(*hMainWindow);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

int ButGo()
{
    int lenght;
    HWND hEdit = (FindWindowEx(FindWindowEx(0,0, "myclass", "Окно"), 0, "edit", "Введите сюда текст..."));
    
    lenght = GetWindowTextLength(hEdit)+1;
    LPSTR *r = new LPSTR[lenght];
    
    GetWindowText(hEdit, *r, lenght+1);
    MessageBox(0, *r, "Текст", MB_OK);

    delete r;
    return 0;
}


Я знаю что в GetWindowText(hEdit, *r, lenght+1); *r неправильно, но как сделать иначе? smile

Это сообщение отредактировал(а) Ksander1000 - 29.7.2010, 18:19
PM MAIL   Вверх
Dem_max
Дата 29.7.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



GetWindowText(hEdit, r, lenght+1); ?????


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
586
Дата 29.7.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
LRESULT _stdcall WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        
    case WM_COMMAND:        
        ///////////////////////////////////////////
        switch(LOWORD(wParam))
        {
        case 1: //Кнопка Выход
            PostQuitMessage(0);
            return 0;
        case 2: // Кнопка Пуск
            ButGo(hWnd);
            return 0;
        default: return 0;
        }
        return 0;
        ////////////////////////////////////////////
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;        
    default: return DefWindowProc(hWnd, msg, wParam, lParam);
    }
}

int ButGo(HWND hWndMain)
{
    int length;
    HWND hEdit = GetDlgItem(hWndMain, 3);
    
    length = GetWindowTextLength(hEdit)+1;
    LPSTR r = new CHAR[length];
    
    GetWindowText(hEdit, r, length/*+1*/);   // (прибавлять единицу не нужно, она уже прибавлена там где вызван GetWindowTextLength)
    MessageBox(0, r, "Текст", MB_OK);
    delete []r;
    return 0;
}


Это сообщение отредактировал(а) 586 - 29.7.2010, 20:51
PM   Вверх
Ksander1000
  Дата 30.7.2010, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 8.8.2009

Репутация: нет
Всего: нет



586 Огромнейшее спасибо, я с этим макросом целый день мучился smile

Это сообщение отредактировал(а) Ksander1000 - 30.7.2010, 08:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.