Как Visual Studio связывает mfc диалоговые классы с диалоговыми ресурсами?

Я задавался вопросом, как Visual Studio связывается MFC CDialog производные классы с их соответствующими диалоговыми ресурсами. Я не интересуюсь тем, как связь установлена во время выполнения (как спросили здесь), а скорее во время проектирования.

Когда я добавляю обработчика сообщений к диалоговому окну, как это знает который класс добавить обработчик к. Кроме того, это возможный иметь несколько CDialog производные классы связаны с тем же диалоговым ресурсом и наоборот?

Я искал каталог проекта IDD_SOMEDIALOG представьте в виде строки, но только нашли его в SomeDialog.h, resource.h и Project.rc в ожидаемых местах, таким образом, я предполагаю, что это так или иначе выводит соединение из тех файлов, скорее всего, перечисление в SomeDialog.h:

// in class CSomeDialog:
    enum { IDD = IDD_SOMEDIALOG };

Я спрашиваю это главным образом из любопытства.

6
задан Community 23 May 2017 в 12:08
поделиться

2 ответа

Я пишу на iPhone, а вдали от стола, но быстрый Google появился на этой странице: Отключить выбор текста с jQuery .


Отредактировано В ответ на комментарий «Dead Link» (от @Herb Caudill). В то время как исходная ссылка, действительно, мертвая, оказывается из-за реструктуризации сайта (а не удаления), а новое местоположение для статьи можно найти здесь: http://chris-barr.com/index .php / intract / disable_text_selice_with_jquery /

и код, предусмотренный в этой статье, воспроизводится ниже:

$(function(){
    $.extend($.fn.disableTextSelect = function() {
        return this.each(function(){
            if($.browser.mozilla){//Firefox
                $(this).css('MozUserSelect','none');
            }else if($.browser.msie){//IE
                $(this).bind('selectstart',function(){return false;});
            }else{//Opera, etc.
                $(this).mousedown(function(){return false;});
            }
        });
    });
    $('.noSelect').disableTextSelect();//No text selection on elements with a class of 'noSelect'
});

jQuery Snippet, написанный Chris Carr, Chris-barr.com , как доступно в пятницу, 21 st января 2011 года.

-121--1047324-

Это зависит от какой версии DEV Studio.

В VS6 все было сохранено в CLW (Wizard класса Wizard).

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

Что касается нескольких производных диалогов, используя тот же ресурс, это можно сделать вручную. Вы можете дублировать созданные файлы классов и переименовать их и удалить enum от заголовка и отредактировать использование IDD Enum в исходном файле, чтобы быть фактическим диалоговым ресурсом ID (idd_somedialog).

AFAIK DEV Studio будет только «счастливо» обрабатывать один класс в диалог одновременно. По моему опыту, пытаясь повторно использовать диалоговый ресурс, подобный так, как это заканчивается немного битвы с MFC & DEV Studio, поскольку они не были предназначены для этого.

4
ответ дан 17 December 2019 в 02:28
поделиться

Чтобы добавить в ответ Рудди:

Я заметил, что некоторые из моих диалоговых классов, в которых я заменил enum {IDD} с Static Const int больше не было связано с его диалоговым ресурсом. Возвращение к перечете повторно связали их. Таким образом, кажется, что Visual Studio разрабатывает исходный код для определения отношений.

Что касается совместного использования ресурсов, это было бы неоднозначно, поскольку какой класс должен получить код обработчика события. Обмен классом, кажется, не может быть невозможен, так как он полагается на IDD , который не может быть назначен IDD_Something и idd_something_else одновременно.

2
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: