如何在一个视窗(VIEW)中的不同区域定时刷新
编号:QA001509
建立日期: 1999年8月14日 最后修改日期:1999年8月14日
所属类别:
feifan:
VC++6.0
pwin98
我正在编一个SDI程序。程序要求在一个视窗(VIEW)中的不同区域定时刷新。比如在视窗的上半部每隔5秒刷新一次,视窗的下半部每隔2秒刷新一次。请问该如何实现?
回答:
假设你自定义的由CView类为 CMyView.
SDI中,要求将对窗口客户区的操作写在 CMyView类的 OnDraw 函数中。实际的 refresh 过程是这样进行的:窗口接到 WM_PAINT 消息,调用 CMyView::OnPaint(), CMyView::OnPaint()内部所
做的唯一工作就是调用 CMyView::OnDraw(). 可参考 CView的 Source Code.
对于你的任务,可将刷新分为三种情况:
0, 刷新整个窗口。 (初始化时,当挡住窗口的别的窗口移开时,窗口被重新激活时)
1, 仅刷新上半部分窗口。
2, 仅刷新上半部分窗口。
建议按以下步骤进行
step 1. 可在 CMyView 中增加 Private member varible, int nRefreshState.
其值 0, 1, 2 分别对应以上 3 种情况。
初始值为 0
step 2. 设置 CMyView 的 Timer, 用 CMyView::SetTimer
step 3. 重载 CMyView::OnTimer.
先根据不同的时间设置 nRefreshState 为 1 或 2。
然后发 WM_PAINT 消息。
step 4. 重载 CMyView::OnDraw.
like this,
{
if (nRefreshState==0 or 1) {
refresh upper port;
}
if (nRefreshState==0 or 2) {
refresh lower port;
}
nRefreshState=0;
return;
}
此问题由曾侃回答。
| |
|
|
| |
|
|