我有一个项目有三个对话框,让我们说A,B,C。 A包含B& C,B包含C. 它们都是从DialogBase类继承而来的 并有一个setBitmap函数来设置背景图像。
我添加了每次拖动C,B也会拖动的关系。 和B是一个透明的对话框!
当触发onLbuttonDown时,我会设置它 m_pParent-> ModifyStyleEx(0,WS_EX_TRANSPARENT);这使得B对话框变得透明。
问题是:如果我设置了这个,对话框B是透明的,但当我移动B时,它会保持闪烁。
但如果我发表评论 m_pParent-> ModifyStyleEx(0,WS_EX_TRANSPARENT); 然后对话框B不会透明,但不会闪烁。
有人可以给我一个解决方案吗?
答案 0 :(得分:2)
WS_EX_TRANSPARENT是一种难以理解的风格。它可能不会做你认为它做的事情。
当你为一个窗口设置WS_EX_TRANSPARENT时,你并没有告诉Windows让它变得透明 - 你告诉Windows你不会在整个窗口上绘画,因此它必须在绘制你的窗口之前绘制窗口窗口。您所做的只是将WM_PAINT消息的顺序更改为各种窗口。
每次对话框A重新渲染时,您都会看到闪烁。
如果您确实需要通过对话框B的背景查看对话框A的部分,则可以在OnLButtonDown中进行一些特殊处理。首先将对话框B的可见性设置为关闭,然后创建一个位图,将其分配给DC,并将对话框绘制到该DC。现在,您可以再次将对话框B设置为可见,并且每次绘制它时,首先将保存的位图的相应部分复制到背景中。