检测.NET中的窗体图标更改

检测.NET中的窗体图标更改,.net,winforms,forms,icons,.net,Winforms,Forms,Icons,我试图检测窗体的图标属性何时被修改。 目前,我覆盖WndProc并处理WM_SETICON消息来实现这一点 这是侵入式的,我更喜欢非侵入式的方法。 我想我可以使用一些旧的Win32 SetWindowLong来指定一个新的WndProc,但我听说窗体可以在更改属性时在幕后重新创建Win32窗口,如果是这样,这可能会很难处理 我的第二个更重要的问题是,在不可见窗口上设置Icon属性不会发送WM_SETICON消息(直到窗体变为可见) 如果能对如何实现这一目标有更多的见解,我将不胜感激。 很遗憾Fo

我试图检测窗体的图标属性何时被修改。 目前,我覆盖WndProc并处理WM_SETICON消息来实现这一点

这是侵入式的,我更喜欢非侵入式的方法。 我想我可以使用一些旧的Win32 SetWindowLong来指定一个新的WndProc,但我听说窗体可以在更改属性时在幕后重新创建Win32窗口,如果是这样,这可能会很难处理

我的第二个更重要的问题是,在不可见窗口上设置Icon属性不会发送WM_SETICON消息(直到窗体变为可见)

如果能对如何实现这一目标有更多的见解,我将不胜感激。 很遗憾Form类没有实现INotifyPropertyChanged接口


/该属性是如何更改的?通过您自己的托管代码?目前我自己做(因为所有表单都需要使用重写的WndProc从我的表单继承),所以是的,我可以找到所有更改Icon属性的地方并采取适当的操作。但是由于我正在开发一些将由不同团队使用的东西,这是一个“困难”的过程强制他们使用我的表单作为基类的要求,这就是为什么我希望它与普通表单一起工作(用Win32方式覆盖WndProc似乎是唯一的方法)。这是一个上帝类的症状,一个相当麻烦的设计问题。当Icon属性被更改时,您为什么要做任何事情还不清楚,这是标题栏的一个次要实现细节。通过解释它的重要性得到一个好的答案。我想操纵新图标。在某些情况下,我会覆盖一个图像来添加一些额外的视觉状态信息。就像大多数代码一样,这不是我需要它或者我丢掉了工作的问题,更重要的是我希望用户体验以某种方式出现(对于我的情况来说,这是最理想的)。真正的问题在于visible标志,因为即使表单是隐藏的,也可以使用图标(我在上下文菜单中枚举所有表单)。当窗口可见时:Form.Icon=NewIcon Catch WM_SETICON,操纵图标并将设置为已操纵。可见窗口使用我的操纵图标进行渲染。上下文菜单是阅读表单。图标,现在可以操作并正常工作。