Пример диалогового окна ATL

Может ли кто-нибудь помочь мне найти современный работающий проект ATL, в котором есть главное окно и некоторые компоненты в нем? Пожалуйста, ради бога, не говорите мне использовать WTL / Qt или другие. Мне нужен ATL. Нет актуального проекта по этому поводу. Мне просто нужно главное окно, вот и все. Я могу понять остальное.

Заранее спасибо.

 Mark Ransom25 июн. 2012 г., 20:36
Не знаю, почему вы так боитесь WTL, это значит заполнить недостающие фрагменты ATL. Я думаю, что это даже теми же авторами.
 dirkgently25 июн. 2012 г., 20:09
Вы пытались создать его, используя настройки по умолчанию? Обычно это работает, когда вы начинаете.
 Roman R.25 июн. 2012 г., 20:40
@MarkRansom: ОП должен был связать свои предыдущие вопросы, например,stackoverflow.com/questions/11171795/creating-uis-with-atl & quot; Я читал, что WTL - лучший вариант для создания пользовательского интерфейса. Тем не менее, люди настаивали на ATL.
 John Doe25 июн. 2012 г., 21:13
Эта крошечная программа, которую я собираюсь написать - не смейтесь - будет использоваться в тонком клиенте. У него низкие системные ресурсы, и все предыдущие приложения используют ATL, поэтому они настаивали на ATL. Я не знаком с этими утверждениями С. Я заблудился, когда смотрю на исходники. Есть 0 комментариев, нет отступов, нет читабельности вообще. Итак, я просто смотрю на исходный код, плачу и спрашиваю себя: «Что я сделал не так?». Вещи действительно запутались. Но, благодаря Роману Р., я думаю, он станет гладким. Большое спасибо. Я твой большой поклонник. Вы - герой тега ATL. Благодарю.

Ответы на вопрос(1)

Решение Вопроса

Visual C 2010 / C ++ / ATL EXE-проект из шаблона + диалоговое окно.

Источник:

Trac: AtlDialogSample SVN: AtlDialogSample

Это ваш основной интерес:

////////////////////////////////////////////////////////////
// CMainDialog

class CMainDialog :
    public CDialogImpl<CMainDialog>
{
public:
    enum { IDD = IDD_MAIN };

BEGIN_MSG_MAP(CMainDialog)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_ID_HANDLER(IDCANCEL, OnCommand)
    COMMAND_ID_HANDLER(IDOK, OnCommand)
END_MSG_MAP()

public:
// CMainDialog

// Window Message Handlers
    LRESULT OnInitDialog(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        ATLVERIFY(CenterWindow());
        return 0;
    }
    LRESULT OnCommand(UINT, INT nIdentifier, HWND, BOOL& bHandled)
    {
        ATLVERIFY(EndDialog(nIdentifier));
        return 0;
    }
};

а также

VOID RunMessageLoop()
{
    CMainDialog Dialog;
    Dialog.DoModal();
}

enter image description here

 06 мар. 2014 г., 07:41
Если вы войдете внутрьPreMessageLoop Вы увидите, что она выходит из приложения в случае поддержки COM без размещения классов COM. Это позволяет коду достичьRunMessageLoop, Вот как это должно работать: либо у вас есть настоящий COM-сервер, либо вы изменили эту функцию.
 25 июн. 2012 г., 22:20
+1, как я не сделал это, чтобы ответить ему вчера
 06 мар. 2014 г., 07:37
Этот проект меняет функцию PreMessageLoop. Я предполагаю, что это не так, как это должно работать.
 25 июн. 2012 г., 21:25
Этот проект является полнофункциональным COM-сервером (потому что проект шаблона дает вам это, и я должен был добавить минимальные изменения оттуда), и как таковой его/regserver запустить попытки зарегистрироваться в системном реестре. Это требует повышенных привилегий для успеха. Это, однако, не кажется необходимым для пользовательского интерфейса. В общем, убедитесь, что сборка из Visual Studio запущена с правами администратора. Или просто проигнорируйте эту ошибку.
 John Doe25 июн. 2012 г., 21:20
Я знаю, что вы избили меня до смерти, но я получаю следующие ошибки:1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: The command ""C:\Users\E\Desktop\rr\Debug\AtlDialogSample.exe" /RegServer 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" exited with code -2147319780. Большое спасибо.

Ваш ответ на вопрос