Вопрос по atl, c++, visual-studio, user-interface – Пример диалогового окна ATL

3

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

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

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

Ваш Ответ

1   ответ
5

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

Если вы войдете внутрьPreMessageLoop Вы увидите, что она выходит из приложения в случае поддержки COM без размещения классов COM. Это позволяет коду достичьRunMessageLoop, Вот как это должно работать: либо у вас есть настоящий COM-сервер, либо вы изменили эту функцию.
Этот проект меняет функцию PreMessageLoop. Я предполагаю, что это не так, как это должно работать.
+1, как я не сделал это, чтобы ответить ему вчера
Этот проект является полнофункциональным COM-сервером (потому что проект шаблона дает вам это, и я должен был добавить минимальные изменения оттуда), и как таковой его/regserver запустить попытки зарегистрироваться в системном реестре. Это требует повышенных привилегий для успеха. Это, однако, не кажется необходимым для пользовательского интерфейса. В общем, убедитесь, что сборка из Visual Studio запущена с правами администратора. Или просто проигнорируйте эту ошибку.
Я знаю, что вы избили меня до смерти, но я получаю следующие ошибки: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. Большое спасибо. John Doe

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