Yng*_*and 4 windows winapi windows-xp visual-c++
我想通知用户我的应用程序想要使用该标准启动升级过程MessageBox.有没有办法实现这种重新实现的缺点MessageBox?
例如,对于标准按钮,您可以发送BCM_SETSHIELD消息.消息框有类似的东西吗?
为了将屏蔽图标放到系统提供的消息对话框的按钮上,您将需要处理来自对话框的回调.
例如,我将用TaskDialogIndirect()Vista中介绍的API进行说明.
基本对话框允许您指定主图标,但不能指定对话框上按钮的屏蔽图标.为此,您需要提供响应通知的回调函数TDN_CREATED.
回调可能如下所示:
HRESULT CALLBACK TaskDialogCallbackProc(
HWND hwnd,
UINT uNotification,
WPARAM wParam,
LPARAM lParam,
LONG_PTR dwRefData
)
{
if (TDN_CREATED == uNotification)
{
SendMessage(
hwnd,
TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE,
ID_FOR_MY_BUTTON_SPECIFIED_IN_TASKDIALOGCONFIG_STRUCT,
1
);
}
return S_OK;
}
Run Code Online (Sandbox Code Playgroud)
魔术包含在TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE消息中.
据我所知,这是你想达到你想要的效果的方式.
消息对话框中的按钮是标准按钮,您可以向它们发送BCM_SETSHIELD消息.
为此,您需要知道何时激活消息对话框.一种方法是设置一个临时WH_CBT挂钩,并在其回调监视中为HCBT_ACTIVATE具有对话类(#32770)的窗口的'nCode' .
另一种方法是WM_ACTIVATE在调用'MessageBox'之后处理,'wParam'应该是WA_ACTIVE,'lParam'应该是对话框类的窗口句柄.然后,您可以将'BCM_SETSHIELD'消息发送到具有控制ID的按钮fi IDOK.

| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |