Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс окна в MFC-приложении 
V
    Опции темы
zhekha
Дата 27.3.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В приложении Win32 можно создавать окна с любым классом, а при создании приложения на базе диалога, MFC сама регистрирует класс окна как Dialog или #32770. Может кто-нибудь знает как его можно поменять? Мне это нужно для однозначной идентификации приложения с целью защиты от повторного запуска (у окна отсутствует TitleBar). Заранее спасибо!
PM MAIL   Вверх
CaptainFlint
Дата 27.3.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

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



zhekha
В ресурсах пропиши класс:
Код

IDD_MY_DIALOG DIALOGEX 0, 0, 200, 67
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOOLWINDOW | WS_EX_APPWINDOW
CAPTION "My Dialog"
CLASS "MyDialogClass"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    ...

А в CMyApp::InitInstance() перед созданием диалога добавь следующий код:
Код

    WNDCLASS wc;

    // Get the info for this class.
    // #32770 is the default class name for dialogs boxes.
    ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc);

    // Change the name of the class.
    wc.lpszClassName = "MyDialogClass";

    // Register this class so that MFC can use it.
    AfxRegisterClass(&wc);


Это сообщение отредактировал(а) CaptainFlint - 27.3.2006, 12:36


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Kostt
Дата 27.3.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

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



Для защиты от повторного запуска лучше используй мьютекс
Код

HANDLE Mutex;
    Mutex = CreateMutex( NULL, FALSE, "MyMutex" );
    if( ERROR_ALREADY_EXISTS == GetLastError() ) // Такой мьютекс уже кем-то создан...
    {
        MessageBox( 0, "Приложение уже запущено", "Error", 0 );
        CloseHandle( Mutex );
        exit(0);
    }


PM MAIL   Вверх
zhekha
Дата 28.3.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



CaptainFlint> Все замечательно работает, ещё раз спасибо!
Kostt> Я и так использовал мьютекс, но помимо отключения повторного запуска приложения хотелось активизировать окно уже запущенного процесса, поэтому мне и нужен был уникальный класс окна.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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