3852|8

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

tcpmp界面的问题 [复制链接]

在TCPMP的static LRESULT CALLBACK Proc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)函数下面画的位图始终被别的窗口给盖住,哪位知道是什么原因吗?谢谢!
    case WM_PAINT:
      hdc=BeginPaint(p->Win.Wnd,&Paint);
      p->Module = ((CREATESTRUCT*)lParam)->hInstance;
      GetClientRect(p->Wnd,&rect); hdc=GetDC(p->Wnd);
      hdcmem=CreateCompatibleDC(hdc);
      hbitmap=LoadBitmap(p->Module ,MAKEINTRESOURCE(IDB_BACKGROUND));
      hbitmapOld=(HBITMAP)SelectObject(hdcmem,hbitmap);
      GetObject(MAKEINTRESOURCE(IDB_BACKGROUND),sizeof(HBITMAP),hbitmap);
      BitBlt (hdc,0,0,rect.right,rect.bottom,hdcmem,0,0,SRCCOPY);
      DeleteObject(hbitmap);
      DeleteDC(hdcmem);
      ReleaseDC(p->Wnd,hdc);
      DeleteDC(hdc);
      EndPaint(p->Wnd,&Paint);
      break;

最新回复

我的原意是先把一副位图作为背景放在主窗口上,然后在主窗口上面再放一个子窗口作为播放的区域来进行视频文件的播放,我在static LRESULT CALLBACK Proc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)里面添加了一个消息处理case   WM_PAINT:                hdc=BeginPaint(p-> Win.Wnd,&Paint);                p-> Module   =   ((CREATESTRUCT*)lParam)-> hInstance;                GetClientRect(p-> Wnd,&rect);   hdc=GetDC(p-> Wnd);                hdcmem=CreateCompatibleDC(hdc);                hbitmap=LoadBitmap(p-> Module   ,MAKEINTRESOURCE(IDB_BACKGROUND));                hbitmapOld=(HBITMAP)SelectObject(hdcmem,hbitmap);                GetObject(MAKEINTRESOURCE(IDB_BACKGROUND),sizeof(HBITMAP),hbitmap);                BitBlt   (hdc,0,0,rect.right,rect.bottom,hdcmem,0,0,SRCCOPY);                DeleteObject(hbitmap);                DeleteDC(hdcmem);                ReleaseDC(p-> Wnd,hdc);                DeleteDC(hdc);                EndPaint(p-> Wnd,&Paint);                break;    然后在static bool_t Proc(intface* p, int Msg, uint32_t wParam, uint32_t lParam, int* Result)里面去画case WM_PAINT:                 BeginPaint(p->Win.Wnd,&Paint);                 if (p->Skin[p->SkinNo].Valid)                         SkinDraw(&p->Skin[p->SkinNo],Paint.hdc,&p->SkinArea);                 p->Player->Paint(p->Player,Paint.hdc,p->Offset.x,p->Offset.y);                 EndPaint(p->Win.Wnd,&Paint);                 break;导致播放的窗口被盖住,看不到此窗口,我想应该是sealightyin 说的那样应该设置窗口显示的优先级别,我试一下!  详情 回复 发表于 2007-12-12 16:27
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
当然被盖住了,PAINT只是初始化的时候调用一次,以后基本就不会调用了,除非程序中专门调用,你要去该INTERFACE那个关于界面的动态库,TCPMP是高手写的,对组件的调用出神入化,好好研究吧。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
那个代码不复杂,你要仔细看懂再改。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
来给你回答一个实际的,你的这段代码是在interface下的吧?
首先里面没有实际进行影片绘图的地方,不用找了。
噢,你说的是界面问题哈
如果你问为什么都被别的窗口覆盖了,有一个方法就是使用setwindowpos把它的Z-order调高,然后setfocus(hwnd),就好了。
有什么知识我们可以交流 sealightyin@126.com
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
方法不错,可惜是表面的,你会看到界面一闪一闪的,这就是反复刷屏的结果。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
其实tcpmp绘电影的视图最基本的是getdc(NULL),往这个上面画。当然要看你的机器配置他会优化看什么样的绘图方式适合你的平台,编译出来的就不一样咯,呵呵,你可以对common进行改动,达到自己的目的
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
TCPMP源代码:
http://www.wincehome.com/forum/viewthread.php?tid=149&extra=page%3D1
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
我是想修改TCPMP的界面,可放的背景老是被窗口给盖住,谢谢以上各位,我会考虑以上各位的建议再试一下!
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

9
 
我的原意是先把一副位图作为背景放在主窗口上,然后在主窗口上面再放一个子窗口作为播放的区域来进行视频文件的播放,我在static LRESULT CALLBACK Proc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)里面添加了一个消息处理case   WM_PAINT:   
            hdc=BeginPaint(p-> Win.Wnd,&Paint);   
            p-> Module   =   ((CREATESTRUCT*)lParam)-> hInstance;   
            GetClientRect(p-> Wnd,&rect);   hdc=GetDC(p-> Wnd);   
            hdcmem=CreateCompatibleDC(hdc);   
            hbitmap=LoadBitmap(p-> Module   ,MAKEINTRESOURCE(IDB_BACKGROUND));   
            hbitmapOld=(HBITMAP)SelectObject(hdcmem,hbitmap);   
            GetObject(MAKEINTRESOURCE(IDB_BACKGROUND),sizeof(HBITMAP),hbitmap);   
            BitBlt   (hdc,0,0,rect.right,rect.bottom,hdcmem,0,0,SRCCOPY);   
            DeleteObject(hbitmap);   
            DeleteDC(hdcmem);   
            ReleaseDC(p-> Wnd,hdc);   
            DeleteDC(hdc);   
            EndPaint(p-> Wnd,&Paint);   
            break;   
然后在static bool_t Proc(intface* p, int Msg, uint32_t wParam, uint32_t lParam, int* Result)里面去画case WM_PAINT:
                BeginPaint(p->Win.Wnd,&Paint);
                if (p->Skin[p->SkinNo].Valid)
                        SkinDraw(&p->Skin[p->SkinNo],Paint.hdc,&p->SkinArea);
                p->Player->Paint(p->Player,Paint.hdc,p->Offset.x,p->Offset.y);
                EndPaint(p->Win.Wnd,&Paint);
                break;导致播放的窗口被盖住,看不到此窗口,我想应该是sealightyin 说的那样应该设置窗口显示的优先级别,我试一下!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 15

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表