请教一个子窗口和父窗口刷新的问题

Sir_wang 2018-05-31 09:48:53
我的现状是这样的:


我的背景在按钮1下是透明的,按钮2下是不透明的,仪表盘需要不断地去刷新,也就是我需要不断地去全屏刷新,可是这样会导致按钮闪烁,我用了内存dc的,可是在createWindows怎么创建到内存DC下呢?
代码是这样的:
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
switch (message)
{
case MSG_CREATE:
hslider = CreateWindow (CTRL_TRACKBAR, "Speed:", WS_CHILD | WS_VISIBLE | SS_RIGHT | TBS_TIP | TBS_NOTIFY, IDC_CTRL_TRACKBAR, 50, 410, 700, 58, hWnd, 0);
break;
case MSG_TIMER:
InvalidateRect (hWnd, &msg_rc, FALSE);
break;
case MSG_PAINT:
hdc = BeginPaint (hWnd);
mem_dc = CreateCompatibleDC(hdc);
.......//Paint other parts
BitBlt (mem_dc, 0, 0, 800, 480, hdc, 0, 0, 0);
DeleteCompatibleDC (mem_dc);
EndPaint (hWnd, hdc);
//show subwindow
ShowWindow(scorl_wnd, SW_SHOWNORMAL);
}
}

这样绘制会导致闪烁,请教各位大神了!
...全文
1680 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sir_wang 2018-06-02
  • 打赏
  • 举报
回复
引用 1 楼 91program 的回复:
ShowWindow(scorl_wnd, SW_SHOWNORMAL); 是什么东东?不能直接放在双缓冲中进行处理吗?
引用 1 楼 91program 的回复:
ShowWindow(scorl_wnd, SW_SHOWNORMAL); 是什么东东?不能直接放在双缓冲中进行处理吗?
这个实际上并不是wince,是MINIGUI的东西,用它来绘图的
wxf54318 2018-06-01
  • 打赏
  • 举报
回复
可以尝试之刷新仪表盘区域
QQ515311445 2018-06-01
  • 打赏
  • 举报
回复
引用 楼主 k_wang_ 的回复:
我的现状是这样的: 我的背景在按钮1下是透明的,按钮2下是不透明的,仪表盘需要不断地去刷新,也就是我需要不断地去全屏刷新,可是这样会导致按钮闪烁,我用了内存dc的,可是在createWindows怎么创建到内存DC下呢? 代码是这样的: static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) { HDC hdc; switch (message) { case MSG_CREATE: hslider = CreateWindow (CTRL_TRACKBAR, "Speed:", WS_CHILD | WS_VISIBLE | SS_RIGHT | TBS_TIP | TBS_NOTIFY, IDC_CTRL_TRACKBAR, 50, 410, 700, 58, hWnd, 0); break; case MSG_TIMER: InvalidateRect (hWnd, &msg_rc, FALSE); break; case MSG_PAINT: hdc = BeginPaint (hWnd); mem_dc = CreateCompatibleDC(hdc); .......//Paint other parts BitBlt (mem_dc, 0, 0, 800, 480, hdc, 0, 0, 0); DeleteCompatibleDC (mem_dc); EndPaint (hWnd, hdc); //show subwindow ShowWindow(scorl_wnd, SW_SHOWNORMAL); } } 这样绘制会导致闪烁,请教各位大神了!
这样零散的写UI很不方便,我好多年之前就写过一套UI框架,除了一个windows窗口,没有用一个控件,都是自己实现的按钮,列表,下拉框,单选,多选等,现在已经好多年不搞wince了
QQ515311445 2018-06-01
  • 打赏
  • 举报
回复
双缓冲,再只刷新更新的区域,这样系统负荷小,而且不闪烁
91program 2018-05-31
  • 打赏
  • 举报
回复
ShowWindow(scorl_wnd, SW_SHOWNORMAL); 是什么东东?不能直接放在双缓冲中进行处理吗?
91program 2018-05-31
  • 打赏
  • 举报
回复
一般来说,双缓冲正确实现,是可以解决刷新闪屏的问题。 建议 LZ: 1)先去掉 ShowWindow(scorl_wnd, SW_SHOWNORMAL); 2)看一些使用双缓冲后,刷新一屏的时间是多久? 3) 如果硬件/系统支持,可以考虑使用 overlay。

19,519

社区成员

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

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