C++ 示例ATL对话框窗口

C++ 示例ATL对话框窗口,c++,visual-studio,user-interface,atl,C++,Visual Studio,User Interface,Atl,有谁能帮我找到一个最新的、正在运行的ATL项目,它有一个主窗口和一些组件在里面?看在上帝的份上,请不要告诉我使用WTL/Qt或其他。我需要ATL。这方面没有最新的项目。我只需要一个主窗口,仅此而已。剩下的我都知道了 提前谢谢 好的,看在上帝的份上:Visual Studio 2010 C++/ATL EXE项目,来自模板+对话框窗口 资料来源: Trac: SVN: 这是您的主要兴趣: /////////////////////////////////////////////////////

有谁能帮我找到一个最新的、正在运行的ATL项目,它有一个主窗口和一些组件在里面?看在上帝的份上,请不要告诉我使用WTL/Qt或其他。我需要ATL。这方面没有最新的项目。我只需要一个主窗口,仅此而已。剩下的我都知道了


提前谢谢

好的,看在上帝的份上:Visual Studio 2010 C++/ATL EXE项目,来自模板+对话框窗口

资料来源:

  • Trac:
  • SVN:
这是您的主要兴趣:

////////////////////////////////////////////////////////////
// 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;
    }
};

您是否尝试使用默认设置创建一个?这通常在刚开始的时候起作用。不知道为什么你这么害怕WTL,它是用来填补ATL中缺失的部分。“我认为它甚至是由同一位作者写的。@Markransem:OP应该把他以前的问题联系起来,例如,“我读到WTL是创建UI的更好选择。然而,人们坚持使用ATL。”我将要编写的这个小程序——别笑——将用于瘦客户端。它的系统资源很低,以前的应用程序都使用ATL,所以他们坚持使用ATL。我不熟悉这些C语句。我一看源代码就迷路了。有0条注释,没有缩进,没有可读性。所以,我只是盯着源代码哭着问自己“我做错了什么?”。事情真是一团糟。但是,多亏了罗曼R,我想它会开始变得平滑。非常感谢你。我是你的超级粉丝。你是atl tag的英雄。谢谢。我知道你会把我打死,但我遇到了以下错误:
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CPPComon.targets(113,5):错误MSB3073:C:\Users\E\Desktop\rr\Debug\AtDialogSample.exe”/RegServer 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CPPComon.targets(113,5):错误MSB3073::VCEnd已退出,代码为-2147319780非常感谢。此项目是功能齐全的COM服务器(因为模板项目提供了这一点,我将从那里添加最小的更改),因此它的
/regserver
运行尝试向系统注册表注册。这需要提升权限才能成功。然而,这似乎并不是UI所必需的。总之,请确保您是以管理员身份从VisualStudio开始构建的。或者忽略此错误。此项目更改PreMessageLoop函数。我想这不是它应该如何工作的。如果你进入
PreMessageLoop
函数,你会看到它在没有COM类托管的COM支持的情况下退出应用程序。这使代码可以到达
RunMessageLoop
。这就是它的工作原理:您要么在那里有真正的COM服务器,要么更改此函数。
VOID RunMessageLoop()
{
    CMainDialog Dialog;
    Dialog.DoModal();
}