CDialog 在win7和xp下运行效果的差异。解决思路

CDialog 在win7和xp下运行效果的差异。
这几天在win7下编了个MFC的小程序,是vs2008下完成的。
  CDialog的属性设置了 Transparent == true。
  然后自己填充了背景图片,
  使用
 
C/C++ code
 OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
   {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if (pWnd == this)
    {
        return m_brBk;
    }
    return hbr;
   }

   
  最后发现在win7下,背景显示很正常。
  但是同样的程序在xp下背景真透明了。
  各位大侠来讨论一下,这方面win7和xp的差异。


------解决方案--------------------
这个倒没发现,学习
------解决方案--------------------
很多这样的情况
像CMFC....的类,有些在XP下是显示异常的。
------解决方案--------------------
win7和xp的色彩显示有差异,用同样的RGB值感觉效果不一样。
如果你想要透明效果的话可以在oninitialdialog里面加入。但是这个可能在会消耗资源,如果程序控件较多,会很明显的看出来。
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibraryW(_T("User32.DLL"));
if (hInst)
{
typedef BOOL(WINAPI *MYFUNC)(HWND, COLORREF, BYTE, DWORD);
MYFUNC fun = NULL;
fun = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");

if (fun)
{
fun(this->GetSafeHwnd(), 0, 250, 2); //中间的250是调节透明度的
}
FreeLibrary(hInst);
}


------解决方案--------------------
估计是底层的实现方式发生了变化
------解决方案--------------------
系统底层的变化没办法,把代码放到OnPaint里面避开这个问题吧
------解决方案--------------------
绘制机制不同
有些情况下要区分系统做针对性开发