Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在单击时将按钮设置为默认值?_C_Winapi - Fatal编程技术网

C 如何在单击时将按钮设置为默认值?

C 如何在单击时将按钮设置为默认值?,c,winapi,C,Winapi,这是Windows中字体对话框中两个按钮的示例: “确定”按钮是默认按钮,如果我按下“取消”按钮鼠标,则“取消”按钮将成为默认按钮 如何在WinAPI中实现这一点,我应该处理每个按钮的鼠标按下事件,并将BS_DefButton样式添加到单击的按钮中,并从其他按钮中删除此样式?发送到对话框以更改默认按钮ID。但请注意以下事项: 使用DM_SETDEFID消息可能会产生多个按钮 似乎具有默认的按钮状态。当系统 打开一个对话框,它在对话框中绘制第一个按钮 具有默认状态边框的模板。发送DM_SETDEF

这是Windows中字体对话框中两个按钮的示例:

“确定”按钮是默认按钮,如果我按下“取消”按钮鼠标,则“取消”按钮将成为默认按钮

如何在WinAPI中实现这一点,我应该处理每个按钮的鼠标按下事件,并将BS_DefButton样式添加到单击的按钮中,并从其他按钮中删除此样式?

发送到对话框以更改默认按钮ID。但请注意以下事项:

使用DM_SETDEFID消息可能会产生多个按钮 似乎具有默认的按钮状态。当系统 打开一个对话框,它在对话框中绘制第一个按钮 具有默认状态边框的模板。发送DM_SETDEFID消息 更改默认按钮并不总是删除默认状态 第一个按钮的边框。在这些情况下,应用程序 应发送BM_SETSTYLE消息以更改第一个按钮 边框样式

因此,除了发送DM_SETDEFID以设置新的默认按钮外,您还应该发送到旧的默认按钮以清除BS_def按钮样式。

发送到对话框以更改默认按钮ID。但请注意以下事项:

使用DM_SETDEFID消息可能会产生多个按钮 似乎具有默认的按钮状态。当系统 打开一个对话框,它在对话框中绘制第一个按钮 具有默认状态边框的模板。发送DM_SETDEFID消息 更改默认按钮并不总是删除默认状态 第一个按钮的边框。在这些情况下,应用程序 应发送BM_SETSTYLE消息以更改第一个按钮 边框样式


因此,除了发送DM_SETDEFID以设置新的默认按钮外,您还应该发送到旧的默认按钮以清除BS_def按钮样式。

对不起,我忘了提到我没有使用资源。@joseph\m您是什么意思?你没有真正的对话吗?在我的其他WinAPI问题中,我没有提到我没有使用资源,所以我想如果我在使用资源,我应该提到它。你应该提到所有与你的问题相关的东西,让那些试图帮助你的人更容易实际地帮助你,而不是浪费时间。并且不要假设人们已经读过你之前的问题。每一个新问题都需要不言自明。总是包括相关的细节。对不起,我忘了提到我没有使用资源。@joseph\m你是什么意思?你没有真正的对话吗?在我的其他WinAPI问题中,我没有提到我没有使用资源,所以我想如果我在使用资源,我应该提到它。你应该提到所有与你的问题相关的东西,让那些试图帮助你的人更容易实际地帮助你,而不是浪费时间。并且不要假设人们已经读过你之前的问题。每一个新问题都需要不言自明。始终包含相关详细信息。这是对话框管理器的一项功能。如果您不想使用对话框,可以使用IsDialogMessage并使用下面提到的DEFID消息管理默认ID。这是对话框管理器的一项功能。如果不想使用对话框,可以使用IsDialogMessage并使用下面提到的DEFID消息管理默认ID。