Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сообщение полного конца, инициализации окна 
V
    Опции темы
dizzy1984
Дата 4.6.2008, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  3.6.2008,  12:27 Найти цитируемый пост)
Ты сам-то понял, что чушь написал? Ну, будем считать это опиской   

Написал по-проще для ясности, имелось в виду, что очередь значимых сообщений (идущих до WM_USER) уже будет обработана, останется только "надуманное" сообщение (WM_USER), которое, конечно, формально будет последним в той же очереди, но кого это волнует? Это как раз и нужно.

Это сообщение отредактировал(а) dizzy1984 - 4.6.2008, 05:21
PM MAIL   Вверх
dizzy1984
Дата 4.6.2008, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А на счет RegisterWindowMessage, это было дельное предложение. Вот более верный вариант :
Код

static const UINT messageAppInit = ::RegisterWindowMessage("3D5914BB-6689-4697-81F9-4DADA4A5964B");

BEGIN_MESSAGE_MAP(CTest2Dlg, CDialog)
//...    
ON_REGISTERED_MESSAGE(messageAppInit, Proc2)    
//...    
END_MESSAGE_MAP()    

BOOL CTest2Dlg::OnInitDialog()    
{    
         //...    
    SendMessage(messageAppInit, 0, 0);    
    return FALSE;  // return TRUE  unless you set the focus to a control    
}    
void CTest2Dlg::Proc2()    
{     
    return ;    
}

PM MAIL   Вверх
Earnest
Дата 4.6.2008, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



ОК, поясняю: ни в какую очередь SendMessage не идет - это, считай, прямой вызов CallWindowProc.


--------------------
...
PM   Вверх
dizzy1984
Дата 4.6.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



И в самом деле лопухнулся! Ведь знал же, что если SendMessage вызывается кодом процесса породившим окно-получатель, сообщение не ставится в очередь! Выходит, мой код ничем не лучше вызова процедуры из OnInitDialog. Ладно, тогда вот 3-я редакция. На этот раз с PostMessage :
Код

static const UINT messageAppInit = ::RegisterWindowMessage("3D5914BB-6689-4697-81F9-4DADA4A5964B");    
BEGIN_MESSAGE_MAP(CTest2Dlg, CDialog)    
//...     
ON_REGISTERED_MESSAGE(messageAppInit, Proc2)     
//...     
END_MESSAGE_MAP()     
BOOL CTest2Dlg::OnInitDialog()     
{     
    //...     
    PostMessage(messageAppInit, 0, 0);     
    return FALSE;  // return TRUE  unless you set the focus to a control     
}     
void CTest2Dlg::Proc2()     
{      
    return ;     
}

Поставил флажки afxTraceFlags = traceAppMsg | traceWinMsg - вроде бы уж последнее-распоследнее.
Здесь-то хоть не накосячил?
PM MAIL   Вверх
Earnest
Дата 4.6.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Увы... smile  
В студии 7 и выше просто не скомпилируется, а в более ранних - весьма вероятны проблемы в релизе, т.к.
у обработчика должна быть другая сигнатура:
LRESULT CTest2Dlg::OnProc  (WPARAM, LPARAM);

И еще: использовать для имени зарегистрированного сообщения GUID, мягко говоря, неудобно. Смысл ведь в том, чтобы из разных мест можно было к одному сообщению обратиться, не перевязывая код общими хедерами... так что сообщение должно быть типа "Test2Dlg_InitMessage"... Но это мелочи




--------------------
...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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