c html dialog,[翻译]CTaskDialog:新的可供选择的消息框!

翻译:viiv(viiv at 163.com)

原文:http://blogs.msdn.com/vcblog/archive/2008/12/04/ctaskdialog-an-alternative-to-the-simple-message-box.aspx

大家好:

首先让我自我介绍一下,我是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();

它创建了如下样式的窗体:

BuildOutputTargetVS9Tools.jpg

或者您也可以使用如下的函数进行创建:

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文件中:

type="win32"

name="Microsoft.Windows.Common-Controls"

version="6.0.0.0"

processorArchitecture="x86"

publicKeyToken="6595b64144ccf1df"

language="*"

/>

由于版本低于Windows Vista的操作系统不支持TaskDialog的API,所以您需要使用CTaskDialog::IsSupported()方法来检查是否可以使用CTaskDialog对话框。通常是这样的结构:

if (CTaskDialog::IsSupported())

{

... //call CTaskDialog

}

else MessageBox();  //调用经典的消息对话框

这个使用了CTaskDialog的样例工程被放置在了Visual Studio 2010的样例文件夹中,希望通过这些介绍您能积极的使用CTaskDialog,同时欢迎您的反馈信息

谢谢!

Lukasz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-dialog 消息可以通过修改 CSS 的方式来进行移动。具体方法如下: 1. 在 el-dialog 标签中添加一个 v-dialog-drag 属性,例如 v-dialog-drag="dialogDrag"。 2. 在 data 中添加一个 dialogDrag 对象,并设置属性 x 和 y 的初始值为 0,例如 dialogDrag: { x: 0, y: 0 }。 3. 在样式表中添加以下代码来实现拖拽效果: .el-dialog__wrapper.v-dialog-drag .el-dialog { margin: 0; } .el-dialog__wrapper.v-dialog-drag .el-dialog .el-dialog__header { cursor: move; } .el-dialog__wrapper.v-dialog-drag .el-dialog__body { position: relative; top: 0; left: 0; } .el-dialog__wrapper.v-dialog-drag .el-dialog__body::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; z-index: -1; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active ~ .el-dialog__body::before { opacity: 0.1; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover ~ .el-dialog__body::before { opacity: 0.05; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active { cursor: grabbing; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover { cursor: grab; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active ~ .el-dialog__body { transition: none; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover ~ .el-dialog__body { transition: none;} .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active { cursor: grabbing; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover { cursor: grab; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active ~ .el-dialog__body { transition: none; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover ~ .el-dialog__body { transition: none; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active { cursor: grabbing; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover { cursor: grab; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:active ~ .el-dialog__body { transition: none; } .el-dialog__wrapper.v-dialog-drag .el-dialog__header:hover ~ .el-dialog__body { transition: none; } 4. 在 el-dialog 标签中添加一个 @drag="handleDrag" 事件,例如 @drag="handleDrag"。 5. 在 methods 中添加一个 handleDrag 方法,用于计算 el-dialog 的位置,例如: handleDrag(e) { this.dialogDrag.x += e.dx; this.dialogDrag.y += e.dy; this.$nextTick(() => { this.$refs.dialog.style.transform = `translate(${this.dialogDrag.x}px, ${this.dialogDrag.y}px)`; }); } --相关问题--:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值