异形窗口的快速启动
来源:互联网 发布:淘宝大学靠谱吗 编辑:程序博客网 时间:2024/06/10 03:49
异形窗口也就是不规则窗口,实现方法是先用CreateRectRgn()函数逐点扫描,再用CombineRgn()函数合成窗口区域。
对于小窗口,启动很快。稍大些的窗口,比如800*600,测试时启动竟然要五秒多,这太不实用了!
分析后,修改了代码,只扫描不规则区域,启动时间降到两秒。效果如下图:
代码如下:
bool Init(HINSTANCE hInst,HWND hwnd){ //hdc=GetDC(hwnd); skin_bmp=(HBITMAP)LoadImage(hInst, MAKEINTRESOURCE(IDB_BITMAP3), IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, NULL); mask_bmp=(HBITMAP)LoadImage(hInst, MAKEINTRESOURCE(IDB_BITMAP4), IMAGE_BITMAP, WINDOW_WIDTH, WINDOW_HEIGHT, NULL); /*skin_bmp= (HBITMAP)LoadImage(NULL,_T("girl2.bmp"), IMAGE_BITMAP, 249, 400, LR_LOADFROMFILE); mask_bmp= (HBITMAP)LoadImage(NULL,_T("girl1.bmp"), IMAGE_BITMAP, 249, 400, LR_LOADFROMFILE);*/ BITMAP bmp; HRGN LineRegion,FullRegion; bool First=false; GetObject(mask_bmp,sizeof(BITMAP),&bmp); HDC hdc=CreateCompatibleDC(NULL); SelectObject(hdc,mask_bmp); bmpW=WINDOW_WIDTH; bmpH=70; for(int y=0;y<bmpH;y++) { for(int x=0;x<bmpW;x++) { if(GetPixel(hdc,x,y)!=TransparentColor) { /*LineRegion=CreateRectRgn(x,y,x+1,y+1); if(First==false) { First=true; FullRegion=CreateRectRgn(x,y,x+1,y+1); }*/ LineRegion=CreateRectRgn(x,y,x+1,y+1); if(First==false) { First=true; //FullRegion=CreateRectRgn(x,y,x+2,y+2); FullRegion=CreateRectRgn(40,70,WINDOW_WIDTH-40,WINDOW_HEIGHT-40); } else CombineRgn(FullRegion,FullRegion,LineRegion,RGN_OR); DeleteObject(LineRegion); } } } bmpW=WINDOW_WIDTH; bmpH=600; for(int y=WINDOW_HEIGHT-40;y<bmpH;y++) { for(int x=0;x<bmpW;x++) { if(GetPixel(hdc,x,y)!=TransparentColor) { /*LineRegion=CreateRectRgn(x,y,x+1,y+1); if(First==false) { First=true; FullRegion=CreateRectRgn(x,y,x+1,y+1); }*/ LineRegion=CreateRectRgn(x,y,x+1,y+1); CombineRgn(FullRegion,FullRegion,LineRegion,RGN_OR); DeleteObject(LineRegion); } } } bmpW=40; bmpH=WINDOW_HEIGHT-40; for(int y=70;y<bmpH;y++) { for(int x=0;x<bmpW;x++) { if(GetPixel(hdc,x,y)!=TransparentColor) { /*LineRegion=CreateRectRgn(x,y,x+1,y+1); if(First==false) { First=true; FullRegion=CreateRectRgn(x,y,x+1,y+1); }*/ LineRegion=CreateRectRgn(x,y,x+1,y+1); CombineRgn(FullRegion,FullRegion,LineRegion,RGN_OR); DeleteObject(LineRegion); } } } bmpW=WINDOW_WIDTH; bmpH=WINDOW_HEIGHT-40; for(int y=70;y<bmpH;y++) { for(int x=WINDOW_WIDTH-40;x<bmpW;x++) { if(GetPixel(hdc,x,y)!=TransparentColor) { /*LineRegion=CreateRectRgn(x,y,x+1,y+1); if(First==false) { First=true; FullRegion=CreateRectRgn(x,y,x+1,y+1); }*/ LineRegion=CreateRectRgn(x,y,x+1,y+1); CombineRgn(FullRegion,FullRegion,LineRegion,RGN_OR); DeleteObject(LineRegion); } } } DeleteDC(hdc); SetWindowRgn(hwnd,FullRegion,true); return true;}
阅读全文
0 0
- 异形窗口的快速启动
- Windows Mobile上异形窗口的实现
- QT中异形窗口的绘制
- delphi 创建半透明的异形窗口
- 【win32】最简单的异形窗口实现
- GTK异形窗口;异形组件
- DUI异形窗口实现
- VC++实现窗口异形
- DUILIB异形窗口实现
- DUILIB异形窗口实现
- 异形窗口 - 显示hello
- qt实现异形窗口
- 部分透明,异形窗口
- DUILIB异形窗口实现
- Qt5.8 异形窗口
- Qt异形窗口
- 一个最简单的Delphi2010的PNG异形窗口方法
- 一个最简单的Delphi2010的PNG异形窗口方法
- 【学生】SQL Server 用户登录
- 网络简单描述
- Markdown编辑器editor.md的使用
- Windows环境下vs2015+opencv3.1+contrib库安装配置
- 搭建eclipse的安卓开发环境(eclipse+jdk+adt+sdk)
- 异形窗口的快速启动
- 为什么说h5非常适合(促进)移动端的开发?
- MYSQL的安装
- JS 如何在谷歌浏览器中的调试
- ASP.NET 访问项目网站以外的目录文件
- 深度学习神经网络权重初始化学习资料
- mysql大小写敏感配置
- maven3.5+hadoop2.7.3统计米骑测试日志KPI指标(一)
- Unity Shader数学笔记