Форум программистов CodeGuru
15 Август 2018, 07:56:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Установить диалоговому окну имя класса окна  (Прочитано 24059 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alucard
Интересующийся
**
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« : 14 Январь 2008, 01:44:07 »

Че то туплю.

Есть диалоговое MFC приложение. Для того чтобы исключить его повторный запуск я произвожу поиск окна определенного класса при помощи FindWindow. Проблема в том, что если проект SDI или MDI, то можно зарегистрировать оконный класс и задать имя класса главного окна в PreCreateWindow в CREATESTRUCT. Для диалога же PreCreateWindow не вызывается.

Смотрю при помощи Spy - класс у окна #32770. Такой класс похоже у всех диалоговых окон.
Можно поменять это как то, или не судьба ?

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

Сорри за сумбур. Поздно уже.

Буду благодарен за помощь  Пеффко !
Записан
nikitozz
Новичок
*
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #1 : 25 Январь 2008, 00:09:53 »

Здравствуйте.
Способ есть. Но только с ним много возни.
Для создания окна в Dialog Based приложении используется функция DoModal(). Если посмотреть на ее исходники, то там можно найти вызов функции CWnd::CreateDlgIndirect(.....), а уже в ней вызывается Api-шная функция ::CreateDialogIndirect(....), которая и создает диалог с предопределенным классом с помощью опять же API-шной функции ::CreateWindowEx(....). Так как API-шные фунции мы переделать не можем, можно унаследовать новый класс от CDialog и перекрыть в ней фнкцию CDialog::CreateDlgIndirect(.....), чтобы она создавала окно со своим нужным классом.
Но по-моему, если цель стоит просто в ограничении запуска второго экзэмпляра приложения, намного легче (и лучше) использовать не FindWindow, а при запуске делать запись в реестре.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!