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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetWindowText 
V
    Опции темы
Afinogen
Дата 9.4.2013, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



в общем дело было вечером делать было нечего, начал изобретать велосипед - написать класс формы, кнопок и т.д. То есть обернуть winapi функции и подучить winapi.
нашел как сделать калбек функцию окна объектной
Код

class MyClass {
private:
    static LRESULT CALLBACK s_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
        MyClass * self = ( MyClass * )GetWindowLongPtr( hWnd, GWL_USERDATA );
        return self->WndProc( hWnd, message, wParam, lParam );
    }
    LRESULT WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
        ...
    }
    void installWindowProc( HWND hWnd ) {
        SetWindowLongPtr( hWnd, GWL_USERDATA, (LONG_PTR)this );
        SetWindowLongPtr( m_wnd, GWL_WNDPROC, (LONG_PTR)s_WndProc );
    }
};

код работает, но если мне нужно изменить заголовок окна
Код

SetWindowText(m_wnd,"bla-bla");

то изменение заголовка происходит только при закрытии формы, как и сообщение WM_SETTEXT. Все остальные команды проходят сразу.
Код

UpdateWindow(m_wnd);

не помогает, я так понимаю надо окно как то заставить обновить данные. Причем если делать окно без класса, то SetWindowText работает.
в функции s_WndProc hwnd окна правильный. проверял.
PM MAIL   Вверх
Dem_max
Дата 9.4.2013, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну пока что ты полный код не привел


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


Новичок



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

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



исходники вот, писал в eclipse + mingw

вынес 
Код

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

в main
сообщение о смене заголовка стало приходить но заголовок не менятеся...

Это сообщение отредактировал(а) Afinogen - 9.4.2013, 22:18
PM MAIL   Вверх
feodorv
Дата 10.4.2013, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Afinogen @  9.4.2013,  17:53 Найти цитируемый пост)
сообщение о смене заголовка стало приходить но заголовок не менятеся...

Цитата
LRESULT CALLBACK TForm::WndProc(HWND hwnd, UINT Message, WPARAM wParam,
        LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;

    switch (Message)
    /* handle the messages */
    {
        case WM_SETTEXT:
            MessageBox(NULL, (char*) lParam, "Win32 Guided Tour", NULL);
        break;
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);

            EndPaint(hwnd, &ps);
        break;
        case WM_COMMAND:

        break;
        case WM_CREATE:

        break;
        case WM_KEYDOWN:
            MessageBox(NULL, "key down", "Win32 Guided Tour", NULL);
        break;
        case WM_CLOSE:

            PostQuitMessage(0);
        break;
        case WM_DESTROY:

            PostQuitMessage(0); /* send a WM_QUIT to the message queue */
        break;
        default: /* for messages that we don't deal with */
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }

    return 0;
}

"Сообщение стало приходить" - Вы имеете в виду  MessageBox(... "Win32 Guided Tour" ...)?
Ну так сообщение WM_SETTEXT успешно перехватывается и не доходит до DefWindowProc(). А именно DefWindowProc в своих потрохах вызывает RedrawTitle в ответ на WM_SETTEXT...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Afinogen
Дата 10.4.2013, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(feodorv @  10.4.2013,  02:20 Найти цитируемый пост)
RedrawTitle в ответ на WM_SETTEXT... 

точно, спасибо

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.

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


 




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


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

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