Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Регистрация класса CPropertySheet (С++)

Всем привет!
Есть такая проблема: класс-наследник CPropertySheet является главным
окном приложения. Его необходимо зарегистрировать с новым именем. Для
этого обычно используется функция PreCreateWindow(CREATESTRUCT&cs).
Однако в диалогах и property sheet эта функция не вызывается. Как можно
зарегистрировать этот класс?

С уважением, Ольга.

Номер выпуска : 4383
Возраст листа : 578 (дней)
Количество подписчиков : 515
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/354782
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Wed, 20 Apr 2005 16:25:07 +0400 (#354782)

 

Ответы:

Здравствуйте !


В смысле - нужно окно с именем класса окна, отличного от #32770 ?
Или нужно просто окно с другим заголовком ?

Если второе, то можно использовать метод CPropertySheet::Construct.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4399
Возраст листа : 581 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/356242
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Sun, 24 Apr 2005 00:20:36 +0400 (#356242)

 

Приветствую,

Да-да, именно это!

С уважением, Ольга.

Номер выпуска : 4400
Возраст листа : 581 (дней)
Количество подписчиков : 513
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/356412
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Sun, 24 Apr 2005 12:04:20 +0400 (#356412)

 

Здравствуйте !


Как ни прискорбно говорить, похоже (имхо) этого сделать нельзя :(
(я путей решения не нашел).
Можно попробовать создать диалог с нужным именем класса (как главное окно),
а в него засунуть CPropertySheet. Вот :)

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4411
Возраст листа : 588 (дней)
Количество подписчиков : 513
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/360074
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Sat, 1 Jun 2002 18:13:13 +0400 (#360074)

 

Писать на MFC приходилось совсем мало, поэтому заранее
прошу простить, если что не так скажу.

Чтобы перехватить все сообщения, идущие в окно CPropertySheet,
скорее всего, можно воспользоваться тем, что
CPropertySheet наследуется от CWnd.
В CWnd есть виртуальная функция PreSubclassWindow(),
которая позволяет заменить функцию окна
еще до того, как это сделает MFC.

Так что регистрация своего класса не потребуется, если целью
является полный контроль над сообщениями.

Вот только не знаю, зачем такие сложности. Не
получается воспользоваться обычными
таблицами сообщений MFC?

Номер выпуска : 4412
Возраст листа : 589 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/360330
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Mon, 2 May 2005 12:36:03 +0400 (#360330)

 

Приветствую всех!
Поздравляю с прошедшими праздниками.

Всем спасибо за советы. В общем, "обошла" я эту проблему. Поскольку эта
регистрация класса мне нужна была для передачи сообщений между
приложениями, и при этом приложение с главным окном-классом
CPropertySheet создавалось из первого запускаемого приложения, то в
CPropertySheet просто передается HANDLE окна первого приложения и
контролируется ситуация с закрытием первого приложения (т.е. если
закрывается первое, то при этом закрывается и второе).

Тем не менее, интерес к решению проблемы остался.


окно),
а в него засунуть CPropertySheet. Вот :)

На RSDN я встретила точно такое же предложение.

прошу простить, если что не так скажу.

всего, можно воспользоваться тем, что CPropertySheet наследуется от
CWnd. В CWnd есть виртуальная функция PreSubclassWindow(), которая
позволяет заменить функцию окна еще до того, как это сделает MFC.

А разве при этом все равно не возникает проблема с CREATESTRUCT, в
которую должна передаваться информация о новом имени класса окна? Или я
что-то не понимаю?

полный контроль над сообщениями.

воспользоваться обычными таблицами сообщений MFC?

Требовался обмен сообщениями между двумя приложениями.

С уважением, Ольга.

Номер выпуска : 4418
Возраст листа : 591 (дней)
Количество подписчиков : 518
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/361636
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Tue, 3 May 2005 12:11:09 +0400 (#361636)

 

Здравствуйте !


Проблема вообще состоит в том, что к этой самой CREATESTRUCT доступа
не получить, т.к. диалог и вкладки создаются в API функции создания
PropertySheeta-а ::PropertySheet. И передать свой шаблон для диалога
этого Sheet-a нельзя.


Ааа... дык, а смысл тогда какой именно главное окно приложения
делать определенного класса ? Можно было сделать какое либо дочернее
скрытое окно специально для обмена сообщениями (это нормальная
практика). К тому же, если программа разрабатывается только для
Win2000/XP (и выше), то можно применять Message-Only Windows -
окна, специально созданные только для получения сообщений.

Цитата из MSDN:

message-only window enables you to send and receive messages. It is not
visible, has no Z order, cannot be enumerated, and does not receive
broadcast messages. The window simply dispatches messages.

To create a message-only window, specify the HWND_MESSAGE constant or a
handle to an existing message-only window in the hWndParent parameter of
the CreateWindowEx function. You can also change an existing window to a
message-only window by specifying HWND_MESSAGE in the hWndNewParent
parameter of the SetParent function.

To find message-only windows, specify HWND_MESSAGE in the hwndParent
parameter of the FindWindowEx function. In addition, FindWindowEx
searches message-only windows as well as top-level windows if both the
hwndParent and hwndChildAfter parameters are NULL.

короче - то что надо (но только под Win2k/XP).

И еще. Если сообщения используются для передаци больших объемов данных
(например при помощи WM_COPYDATA), имеет смысл задуматься о применении
других способов interprocess communications (пайпов, например, memory-
mapped files - ов, и.т.д.).

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4423
Возраст листа : 592 (дней)
Количество подписчиков : 518
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/361768
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Thu, 5 May 2005 00:55:38 +0400 (#361768)

 

Такой метод мог быть полезен, только если нужно было бы добавить свою
функцию обработки сообщений создаваемого окна.
Экзотика, в общем. Класс так не заменить.
Тем более, что сообщения в этом случае все равно сначала обрабатываются
средствами MFC. Думаю, я был не прав, говоря, что так можно
получить полный контроль над ними.

Ну, если совсем уж точно, доступ можно получить. И MFC это делает,
используя SetWindowsHookEx() для установки WH_CBT.
Только окно к моменту вызова обработчика уже создано и
класс по-прежнему заменить нельзя.

Это лучшее решение.
Можно еще воспользоваться RegisterWindowMessage() и PostThreadMessage(),
тогда не потребуется передавать в дочернее приложение
дескриптор окна, но это не так удобно.

Номер выпуска : 4424
Возраст листа : 592 (дней)
Количество подписчиков : 517
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/361925
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Thu, 5 May 2005 10:22:39 +0400 (#361925)