首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

WinCE上一个进度条有关问题

2013-03-19 
WinCE下一个进度条问题!最近有个问题,一个含进度条设置的类在XP系统下用VC测试没有问题,而在CE下有点问题:

WinCE下一个进度条问题!
  最近有个问题,一个含进度条设置的类在XP系统下用VC测试没有问题,而在CE下有点问题:该类叫CProgStatusBar继承于CStatusBarCtrl,基本内容与http://blog.sina.com.cn/s/blog_4ac2fbad01000cmd.html类似。只是继承类不同,还有其中一些代码有所变动,为明确,附上代码如下:


int CProgStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
lpCreateStruct->style |= WS_CLIPCHILDREN;  //该子窗口不被父窗口绘制,而是自己绘制

VERIFY(m_progress.Create(WS_CHILD, CRect(), this, 1));//创建CProgressCtrl进度条窗口
m_progress.SetRange(0,100);
VERIFY(CStatusBarCtrl::OnCreate(lpCreateStruct) == 0);

return 0;
}
void CProgStatusBar::OnSize(UINT nType, int cx, int cy) 
{
    CStatusBarCtrl::OnSize(nType, cx, cy);

    CRect rc;
    VERIFY(GetRect(0, &rc));//获取第0格的位置与大小
    rc.right=rc.left+200;//修改进度条的位置
    m_progress.MoveWindow(&rc);
}
void CProgStatusBar::OnProgress(UINT pct)
{
CProgressCtrl & pc = m_progress;
DWORD dwOldStyle = pc.GetStyle();
DWORD dwNewStyle = dwOldStyle;

if(pct>0)//如果pct>0,将显示进度条
dwNewStyle |= WS_VISIBLE;
else//否则隐藏进度条;
dwNewStyle &= ~WS_VISIBLE;
if (dwNewStyle != dwOldStyle) 
{
SetWindowText(NULL);
::SetWindowLong(pc.m_hWnd, GWL_STYLE, dwNewStyle); 
}
pc.SetPos(pct);// 设置进度条的当前位置
if (pct == 0)
   GetParent()->PostMessage(WM_SETMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
}

    我现在在另外一对话框中创建该类对象m_statusProgBar,然后分割状态栏,让第一个窗格显示进度栏,问题出来了:如果我在m_progress创建时加上WS_VISIBLE属性,初始显示时,状态栏第一个窗格不能显示内容,而且是光滑的,即没有其他窗格那种边框。但则进度条在以后变化中可正常显示。如果我没有加上WS_VISIBLE属性,则初始显示第一个窗格内容正常,但后面的进度条无法显示出来,尽管你能看到第一个窗格是在不断刷新。
   以上情况在XP系统下没有出现,均正常。我怀疑是不是窗口重叠的影响,但跟踪了很久没有找到原因,大家帮忙看看啊,谢谢!!!
[解决办法]
WINCE开发程序,一般都用 图片+热区 替代了,滚动条类直接用图片来自己写了。

很少用重载系统控件的方法来实现自绘了吧。
[解决办法]
一般WINCE的应用程序开发,都是单窗口单视图的,

可以自己写一些控件类,比如 Button,List,ProcessBar等,可以由一个控件基类继承而来,基类里可以定义一些共有方法(比如消息响应等)及属性(比如位置信息,图片id,状态等),由客户点击的区域,来判断点击的哪个控件,由于控件的区域可能重叠,可以加入一个层的概念,或者控件加入容器的时候,按顺利加入,判断的时候,由顶至底的依次判断。然后响应相应的控件消息,消息机制可以参照windows的消息循环定义。

关于图片的绘制,首先必须对bmp位图有个比较好的理解,然后对其他各种格式的图片有个大概的了解,可以自己拿一些图片,做个图片编译工具也好,直接加载也行,wince设备屏幕一般为16位,RGB565格式,可以将图片数据提取出来,转成565格式之后进行压缩存储,绘制的时候,解压,按照像素来绘制就可以了,压缩工具可以使用zlib。

热点排行