微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用WS_EX_COMPOSITED创建静态控件失败

如何解决使用WS_EX_COMPOSITED创建静态控件失败

我正在用C编写Windows程序,我有一个静态控件,其中包含一个图形,您可以单击并拖动鼠标以选择范围。但是,在拖动鼠标时,选择范围会闪烁。我从Googling中学到了这是一个常见问题,解决方案是使用WS_EX_COMPOSITED样式(也建议覆盖WM_ERASEBKGND,但在我的情况下无法解决)。问题是,当我激活此样式时,它将导致CreateWindowEx失败。这是一行:

CreateWindowEx(WS_EX_COMPOSITED,WC_STATIC,NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,graphXPos,graphYPos,GRAPH_WIDTH,GRAPH_HEIGHT,mainWindowHandle,NULL);

当这样创建窗口时,此方法工作正常:

CreateWindow(WC_STATIC,NULL);

错误代码CreateWindowEx失败,错误代码为0x57,表示“此参数不正确”。该文档说WS_EX_COMPOSITED不适用于使用样式CS_OWNDC或CS_CLASSDC的窗口类,因此我使用GetClassInfo来检查静态控件是否使用这些样式,而它们却不使用(它们仅使用CS_DBLCLKS和CS_PARENTDC)。

我不知道这是否重要,但是此静态控件是其子级的窗口具有以下样式:WS_OVERLAPPED,WS_MINIMIZEBox,WS_SYSMENU,WS_VISIBLE,WS_CLIPSIBLINGS。它所属的窗口类仅具有CS_DBLCLKS样式。

解决方法

“闪烁”是用交替的对比色重复绘画同一区域。

解决方案是双缓冲。您可以将所有内容绘制到屏幕外的内存DC上,并立即BitBlt

更复杂的选择是在图形上方创建一个半透明窗口并在其上绘制选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。