现在的位置: 首页 > 综合 > 正文

CTaskDialog 与Visual Studio 2010 C++

2013年12月04日 ⁄ 综合 ⁄ 共 3600字 ⁄ 字号 评论关闭
CTaskDialog 与Visual Studio 2010 C++

 

 

首先让我自我介绍一下,我是Lukasz Chodorski,Visual C++ Libraries团队中的一名新软件设计工程师(SDE)。这次我给大家带来的是MFC库中的CTaskDialog消息框类,它包装了一组新的Windows API。CTaskDialog究竟是什么?
它是一个能根据您的需求易于客制化的类/组件。您可以在CTaskDialog中添加如下的元素:
• 窗体的标题
• 应用程序图标
• 应用程序提示
• 内容
• 进度条
• 单选按钮
• 自定义按钮
• 展开/折叠按钮
• 可验证的复选框
• 页脚图标
• 页脚文本
• 普通按钮
正如你所看到的,这里有很多的配置选项可供选择。使用最简单的配置时,它的行为就像一个经典的消息框,但是在更多高级应用中它有进度条,自定义按钮或者单选按钮。它甚至可以在其上设置超链接或是建立简单的向导应用。当然,开发者可以使用MFC通常的执行机制来响应对话框中的事件。
CTaskDialog提供了像往常一样的方法用以创建和初始化控件。例如:
CTaskDialog dlg(_T("A CTaskDialog presents information in a clear and consistent way."),
                     _T("How much do you like CTaskDialog?"), _T("Sample CTaskDialog"), 0,
                     TDF_ENABLE_HYPERLINKS | TDF_USE_COMMAND_LINKS , _T("I hope you like it!"));
  
       dlg.AddCommandControl( 10, _T("&Use it!/nIt's the best dialog you can have!"));
       dlg.AddCommandControl( 20, _T("&Maybe?/nDon't you want to try it?"));
       dlg.AddCommandControl( 25, _T("&No way!/nI'm not going to use it!"));
       
       dlg.AddRadioButton( 3, _T("Lots"));
       dlg.AddRadioButton( 7, _T("A little"));
       dlg.AddRadioButton( 4, _T("Not at all"));
       
    dlg.SetMainIcon(TD_SHIELD_ICON);
       dlg.SetFooterIcon(TD_INFORMATION_ICON);
       
       INT_PTR nResult = dlg.DoModal();
它创建了如下样式的窗体:

或者您也可以使用如下的函数进行创建:
INT_PTR nResult = CTaskDialog::ShowDialog(
                     _T("Don't spend to much time on code, write only one line and get your CTaskDialog!"),
                     _T("Where do you like to go?"),
                     _T("One line command"), IDS_RADIO_START, IDS_RADIO_START + 3, TDCBF_CANCEL_BUTTON);
    注意这些新特性在Windows Vista系统才被引入,所以在编程时需要将_WIN32_WINNT宏定义为0x0600(标识Windows Vista)或更高。
    当然,在targetver.h文件中默认值已经为Windows Vista。您应该注意到Windows提供了两个comctl32.dll库(版本5.x.x.x和6.x.x.x)。CTaskDialog需要版本6.x.x.x或更高,所以VC10需要在manifest文件中加入该配置。
    当您运行时得到这样的错误:"不能定位xxx在动态链接库COMCTL32.DLL中"。这意味着您的操作系统在运行应用程序时使用了错误的动态链接库,通常是由于在manifest文件中使用了错误的assemblies配置(外部设置或内部设置中的一个)。
    强制让Windows使用适合版本的动态库的方法是将如下的配置段加入到manifest文件中:
<dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="x86"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
</dependency>
    由于版本低于Windows Vista的操作系统不支持TaskDialog的API,所以您需要使用CTaskDialog::IsSupported()方法来检查是否可以使用CTaskDialog对话框。通常是这样的结构:
if (CTaskDialog::IsSupported())
{
       ... //call CTaskDialog
}
else MessageBox(); //调用经典的消息对话框
    这里描述的特性是微软预发布软件Visual Studio 2010及.NET Framework 4.0社区技术预览版(CTP)中的一部分,您可以通过如下的网址进行下载和体验:http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814
    这个使用了CTaskDialog的样例工程被放置在了Visual Studio 2010的样例文件夹中,希望通过这些介绍您能积极的使用CTaskDialog,同时欢迎您的反馈信息
谢谢!

下载CTaskDialog代码生成器

 

示例代码:

//包含头文件afxtaskdialog.h

CTaskDialog taskdialog( CString(), CString(), CString(), 0);   //构造

taskdialog.SetWindowTitle( _T("标题栏文字") );   //对话框标题
taskdialog.SetMainInstruction( _T("主要说明(蓝)") );    //对话框主要说明
taskdialog.SetContent( _T("详细内容说明") );    //对话框详细内容
taskdialog.SetOptions( TDF_ENABLE_HYPERLINKS | TDF_USE_COMMAND_LINKS);//对话框样式

//taskdialog.AddRadioButton( 3, _T("") ); //Radio button 1 可更改数字3
//taskdialog.AddRadioButton( 7, _T("") ); //Radio button 2 可更改数字7
//taskdialog.AddRadioButton( 4, _T("") ); //Radio button 3 可更改数字4
//taskdialog.AddCommandControl( 10, _T("") ); //command button 1 可更改数字10
//taskdialog.AddCommandControl( 20, _T("") ); //command button 2 可更改数字20
//taskdialog.AddCommandControl( 30, _T("") ); //command button 3 可更改数字30
//taskdialog.SetFooterText( _T("") ); //对话框页脚文字
//taskdialog.SetFooterIcon( MAKEINTRESOURCEW(-3) ); //页脚图标

//taskdialog.SetVerificationCheckboxText( _T("") ); //对话框确认复选框文本
taskdialog.SetMainIcon( MAKEINTRESOURCEW(-1) ); //主图标
INT_PTR nResult = taskdialog.DoModal(); // 显示模态对话框

 

抱歉!评论已关闭.