CDialog 在win7和xp下运行效果的差异。解决思路
CDialog 在win7和xp下运行效果的差异。
这几天在win7下编了个MFC的小程序,是vs2008下完成的。
CDialog的属性设置了 Transparent == true。
然后自己填充了背景图片,
使用
最后发现在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里面避开这个问题吧
------解决方案--------------------
绘制机制不同
有些情况下要区分系统做针对性开发
这几天在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里面避开这个问题吧
------解决方案--------------------
绘制机制不同
有些情况下要区分系统做针对性开发