ce6.0 UI显示问题

daniel_yao 2009-07-03 05:19:05
现在碰到这样一个问题:我在一个dialog上画了几个按钮,按钮的背景色是张图片,但是刚打开这个程序的时候图片和问题都显示不出来,只有重新刷新一下才能显示出来。这个有哪几方面的原因?
在OnPaint中这部分代码是这样的:

CDC* BtOrderOKDC=BtOrderOK.GetDC();
MemDC.SelectObject(&m_BmpOrderBtn);
BtOrderOKDC->BitBlt(0,0,ORDER_BT_W,ORDER_BT_H,&MemDC,0,0,SRCCOPY);
BtOrderOKDC->SetTextColor(RGB(255,255,255));
BtOrderOKDC->SelectObject(&m_font3);
BtOrderOKDC->SetBkMode(TRANSPARENT);
BtOrderOKDC->ExtTextOut(45,12,ETO_CLIPPED, NULL, L"OK", 2, NULL);
BtOrderOKDC->DeleteDC();

CDC* BtOrderCancelDC=BtOrderCancel.GetDC();
MemDC.SelectObject(&m_BmpOrderBtn);
BtOrderCancelDC->BitBlt(0,0,ORDER_BT_W,ORDER_BT_H,&MemDC,0,0,SRCCOPY);
BtOrderCancelDC->SetTextColor(RGB(255,255,255));
BtOrderCancelDC->SelectObject(&m_font3);
BtOrderCancelDC->SetBkMode(TRANSPARENT);
BtOrderCancelDC->ExtTextOut(30,12,ETO_CLIPPED, NULL, L"Cancel", 6, NULL);
BtOrderCancelDC->DeleteDC();

CDC* BtOrderDefaultDC=BtOrderDefault.GetDC();
MemDC.SelectObject(&m_BmpOrderBtn);
BtOrderDefaultDC->BitBlt(0,0,ORDER_BT_W,ORDER_BT_H,&MemDC,0,0,SRCCOPY);
BtOrderDefaultDC->SetTextColor(RGB(255,255,255));
BtOrderDefaultDC->SelectObject(&m_font3);
BtOrderDefaultDC->SetBkMode(TRANSPARENT);
BtOrderDefaultDC->ExtTextOut(30,12,ETO_CLIPPED, NULL, L"Default", 7, NULL);
BtOrderDefaultDC->DeleteDC();

在OnctrlColor中返回的是CDialog::OnCtlColor(pDC, pWnd, nCtlColor)的值
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
daniel_yao 2009-07-08
  • 打赏
  • 举报
回复
我现在是这样修改的,继承CStatic类,在子类的OnPaint函数中 不调用CStatic::OnPaint()就没有问题,就一切显示正常
只要一调用CStatic::OnPaint()函数就会显示不出来。
应该是CStatic::OnPaint()帮我重绘了控件 才会显示不出来
不知道还有没有其他的修改办法。这样修改是否合理。
因为当我打开再关掉软键盘的时候,主窗口的北京有一部分刷新不了,出现软键盘的背景
daniel_yao 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nick_TS16949 的回复:]
显示不出来图片,我想可能有三种情况,供参考下;
1、加载图片不成功,句柄实际为空
图片肯定是加载了应该是没问题的
2、程序初始化时没有跑到绘图代码里,也就是Onpaint中
程序也已经调用了OnPaint函数了,这点也没问题
3、绘图代码有问题
绘图代码不会有问题,因为重新刷新下就能绘制出来

建议LZ仔细找找,也有可能是哪里粗心了。
daniel_yao 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shuiyan 的回复:]
直接Debug一下,看看OnPaint有没有执行,或者看看错误在哪里。
[/Quote]

OnPaint 已经执行了。
Debug后发现这样一个问题:
主窗口先执行OnPaint,在执行子窗口的OnPaint,当执行子控件的OnPaint时就要先执行主窗口的OnCtlColor,这样就会出问题
有些控件,没有调用OnCtlColor就能显示出来
但在主窗口调用OnPaint之后如果有控件要OnCtlColor返回就显示不出来了
shuiyan 2009-07-07
  • 打赏
  • 举报
回复
直接Debug一下,看看OnPaint有没有执行,或者看看错误在哪里。
daniel_yao 2009-07-06
  • 打赏
  • 举报
回复
自己顶一下 大家过来帮帮忙啊
xqhrs232 2009-07-06
  • 打赏
  • 举报
回复
觉得好复杂的东西啊
nick_TS16949 2009-07-06
  • 打赏
  • 举报
回复
显示不出来图片,我想可能有三种情况,供参考下;
1、加载图片不成功,句柄实际为空
2、程序初始化时没有跑到绘图代码里,也就是Onpaint中
3、绘图代码有问题

建议LZ仔细找找,也有可能是哪里粗心了。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧