3751|13

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE系统下,大的位图按钮焦点切换时,位图会闪烁怎么回事?我用的是那种--选中/不选中/得到焦点各自对应一张位图的普通位图按钮类 [复制链接]

WINCE系统下,大的位图按钮焦点切换时,位图会闪烁怎么回事?我用的是那种,选中/不选中/得到焦点各自对应一张位图的普通位图按钮类

在DRAWITEM函数里面再对各自不同的状态,BITBLT位图到当前的CDC。我的程序在PC上没这个问题,也许是PC的速度快好多!
此帖出自WindowsCE论坛

最新回复

up  详情 回复 发表于 2008-11-6 09:33
点赞 关注
 

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
用缓存没有?

如果没有可以看一下历史帖子。有详细说明的。
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用双缓存试一下。
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个问题我以前也提过,但没得到很好的解决!
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
不能用位图按钮了吗?然后处理virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);在这个函数里面针对不同的 状态,BitBlt对应的位图到对应的DC里面去。为什么这样做会闪烁?
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
应该是在erase的时候会自动刷白底的原因。
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
为什么会刷白底呢?能不能给个双缓冲技术实现的位图按钮类,这个问题困扰我很久了,在网上/eeworld GOOGLE了很久都没找到好的解决办法。
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
void CBitmapBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
        // TODO: Add your code to draw the specified item
        UINT uStyle = DFCS_BUTTONPUSH;

  // This code only works with buttons.
  ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);


  // Get the button's text.

  CString strText=L"";

//  TCHAR strbuf[100];
  GetWindowText(strText);

//  GetDlgItemText(GetDlgCtrlID(),strbuf,100);

  // Draw the button text using the text color red.

        BITMAP bm;
       
        HDC hdc;

   
        HBITMAP hbmp;
        COLORREF crOldColor;
        crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, mTextColor);


//2008--7--30  XQH 只是一个判断逻辑!

        if (lpDrawItemStruct->itemState  & ODS_DISABLED)
        {
                hbmp=thbmpdis[hindex];

                //crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, crTextBk);
        }
        else if (lpDrawItemStruct->itemState  & ODS_SELECTED)
        {
                if(lpDrawItemStruct->itemAction & ODA_SELECT)
                {
       
                        hbmp=thbmpsel[hindex];
                }

        }
        else if (lpDrawItemStruct->itemState  & ODS_FOCUS)
        {
                hbmp=thbmpfoucs[hindex];
        }
        else
        {

//2008--7--30  xqh_xg

        //        ::PostMessage(GetParent()->m_hWnd,WM_KILLFOCUS,(WPARAM)lpDrawItemStruct->hwndItem,0);

                hbmp=thbmpup[hindex];
        }

//===========================================
        if((lpDrawItemStruct->itemAction & ODA_FOCUS) && (lpDrawItemStruct->itemState  & ODS_FOCUS))
        {
                hbmp=thbmpfoucs[hindex];
        }

        if (hbmp==NULL) //2008--10--21  xqh  没有背景图就用UP状态下的位图
        {
                hbmp=thbmpup[hindex];
        }

//===================================================================================
             GetObject(hbmp,sizeof(BITMAP),&bm);


       hdc=CreateCompatibleDC(lpDrawItemStruct->hDC);   //2008--7--30  xqh_xg

     
      SelectObject(hdc,hbmp);


        BitBlt(lpDrawItemStruct->hDC,0,0,bm.bmWidth,bm.bmHeight,hdc,
                        0,0,SRCCOPY);

       
                DeleteObject(hdc);

               
//2008--7--30    XQH 界面闪烁,怎么调节解决???

                SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);  //2008---7--30  XQH  这条语句起什么作用?


                ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
                        &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);

                ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
               
}

//=====================================================================
上面是我的位图按钮类中对DRAWITEM的处理------根据按钮的状态,BITBLT不同的位图过去。

此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
up
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
    GetObject(hbmp,sizeof(BITMAP),&bm);


      hdc=CreateCompatibleDC(lpDrawItemStruct->hDC);  //2008--7--30  xqh_xg

   
      SelectObject(hdc,hbmp);


BitBlt(lpDrawItemStruct->hDC,0,0,bm.bmWidth,bm.bmHeight,hdc,
0,0,SRCCOPY);


是这段代码有问题,你不应该这个时候进行SelectObject(hdc,hbmp); 操作的,如果在BitBlt之前才进行SelectObject,时间需要很长,PC上面你查觉不到,但是wince里面用时间显示会很长,这就是问题的更本。我也是搞了一个多礼拜才明白了。这是致命的问题。
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
那应该在什么时候进行SelectObject(hdc,hbmp);
这个问题困扰我很久很久了,有人说通过模拟的方式进行位图按钮的操作,这样改我就要改很多东西了!!!
希望楼上给个好方法啊!!!
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

12
 
ding
此帖出自WindowsCE论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

13
 
up
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

14
 
up
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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