0

我正在创建一个按钮并将 FlatStyle 设置为 System.

因为此模式通常不支持图像,所以要与文本一起显示图像,Button 自己的 Text 设置为“”,我正在通过捕获 WndProc 中的 Graphics.FromHwnd 和 TextRenderer 在顶部绘制自己的图像和文本,通过捕获 WM_PAINT并在调用 base.WndProc 后自己绘图。

这很好用,除了一个问题:在 Windows 7 上,突出显示的按钮在灰色和蓝色之间缓慢地跳动。我发现这种脉冲会导致按钮偶尔闪烁。

  1. 我已经使用了 WS_EX_COMPOSITED。
  2. 我试过 DoubleBuffered = true。它没有帮助。
  3. 我用 WM_PRINTCLIENT 尝试了 BufferedGraphics,但这并没有以 Aero 风格绘制,所以根本没有脉动。

有任何想法吗?

4

1 回答 1

0

“因为这种模式通常不支持图像”......事实证明可以完全避免这个难题。

在 Windows Vista 和更新版本上,可以使 FlatStyle = System 显示图像而无需任何特殊绘画。(在 Windows XP 上,回退到默认绘画。)

将 BM_SETIMAGE 发送到 FlatStyle = System 按钮以设置图像。这不适用于 Windows 窗体的 Button AutoSize 实现。因此,使用 BCM_GETIDEALSIZE 进行测量。最后,如果按钮只有图像而没有文本,请在 CreateParams.Style 中设置 BS_BITMAP。

于 2017-10-01T12:02:16.633 回答