热情软件屋

 

如何在一个视窗(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;
     }

此问题由曾侃回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio