关于一个很高级的界面问题 这个网站http://www.cfishsoft.com/上面的软件界面很酷,就是模拟vista界面效果,大家知道用gdiplus怎么实现,小弟不懂,多指教。谢谢!最好给出实现思路或例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 恩,这个软件界面具体用什么开发就不大清楚了,用Delphi设计界面工作量相对少些,做出的界面也比较好看,说不定用QT做的~~ 我用VC做出效果了,不过有个问题了,代码贴出来让你们看看, Image img( L"bg.png" ); BLENDFUNCTION blend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; CRect rc; GetWindowRect( &rc ); CPoint ptWindow( rc.TopLeft() ); CPoint ptSrc( 0, 0 ); CSize szWindow( img.GetWidth(), img.GetHeight() ); HDC dcSrc = ::GetDC( NULL ); HDC dcMem = ::CreateCompatibleDC( dcSrc ); HBITMAP m_bp = ::CreateCompatibleBitmap( dcSrc, img.GetWidth(), img.GetHeight() ); ::SelectObject( dcMem, m_bp ); Graphics grap( dcMem ); grap.DrawImage( &img, 0, 0, img.GetWidth(), img.GetHeight() ); Pen pen( Color( 255, 255, 0, 0 ) ); grap.DrawEllipse( &pen, 0, 0, 50, 50 ); UpdateLayeredWindow( hWnd, dcSrc, &ptWindow, &szWindow, dcMem, &ptSrc, 0, &blend, ULW_ALPHA ); grap.ReleaseHDC( dcMem ); ::ReleaseDC( 0, dcSrc ); dcSrc = NULL; ::DeleteObject( m_bp ); ::DeleteDC( dcMem ); dcMem = NULL; 我用GDI+和UpdateLayeredWindow分层窗口api来做,不过Onpaint事件不能用了,放上去的控件显示不出来, 楼上的库能支持什么格式的图片,alpha通道支持吗,图片半透明和界面的半透明能支持吗?顶上去 to: nntt(blackman) ( ) 信誉:100 2006-7-21 9:21:20 得分: 0 楼上的库能支持什么格式的图片,alpha通道支持吗,图片半透明和界面的半透明能支持吗?顶上去好像是支持bmp格式的。alpha通道不知道支持不支持,即使不支持,想做半透明窗口,只要在程序中对窗口调用SetLayeredWindowAttributes就可以。 这个库不行,这个窗口层API的用法只有两种,有锯齿功能(圆的话) to: nntt(blackman) ( ) 信誉:100 2006-07-24 11:50:00 得分: 0 这个库不行,这个窗口层API的用法只有两种,有锯齿功能(圆的话) 好像圆角的图片做父窗口都有锯齿的,微软的MediaPlayer播放器都有。没办法消除的。等Vista出来后,窗口周围与后面窗口的背景做alpha混合可能能去掉。现在还没发现有能去掉的软件呢。 上面那段代码没有锯齿啊,用alpha通道技术 求助怎样将单文档应用程序转换为一个DLL供另外一个程序调用!!! WSASend出错返回183(使用C++SocketsLibrary库) 这个是CFile对象的初始化问题吗 我的程序loading大的时候偶尔会crash,不知道怎样debug才好? 急,在线求教,用ChangeDisplaySettings将1024*768改为800*600后,怎么任务栏不见了,怎样不让任务栏消失 关于资源释放的问题,散分 一个关于信号量的问题,有一些经验,不知道对不对,大家来谈谈 怎样学好算法与数据结构? 这三个函数有什么作用 动态创建控件的移动 关于视图间发送消息的一个简单问题。 线程停止的问题
Image img( L"bg.png" );
BLENDFUNCTION blend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
CRect rc;
GetWindowRect( &rc );
CPoint ptWindow( rc.TopLeft() );
CPoint ptSrc( 0, 0 );
CSize szWindow( img.GetWidth(), img.GetHeight() );
HDC dcSrc = ::GetDC( NULL );
HDC dcMem = ::CreateCompatibleDC( dcSrc );
HBITMAP m_bp = ::CreateCompatibleBitmap( dcSrc, img.GetWidth(), img.GetHeight() );
::SelectObject( dcMem, m_bp ); Graphics grap( dcMem );
grap.DrawImage( &img, 0, 0, img.GetWidth(), img.GetHeight() );
Pen pen( Color( 255, 255, 0, 0 ) );
grap.DrawEllipse( &pen, 0, 0, 50, 50 ); UpdateLayeredWindow( hWnd, dcSrc, &ptWindow, &szWindow, dcMem, &ptSrc, 0, &blend, ULW_ALPHA ); grap.ReleaseHDC( dcMem );
::ReleaseDC( 0, dcSrc );
dcSrc = NULL;
::DeleteObject( m_bp );
::DeleteDC( dcMem );
dcMem = NULL;
顶上去
楼上的库能支持什么格式的图片,alpha通道支持吗,图片半透明和界面的半透明能支持吗?
顶上去好像是支持bmp格式的。alpha通道不知道支持不支持,即使不支持,想做半透明窗口,只要在程序中对窗口调用SetLayeredWindowAttributes就可以。
这个库不行,这个窗口层API的用法只有两种,有锯齿功能(圆的话)
好像圆角的图片做父窗口都有锯齿的,微软的MediaPlayer播放器都有。没办法消除的。等Vista出来后,窗口周围与后面窗口的背景做alpha混合可能能去掉。现在还没发现有能去掉的软件呢。