您的位置:首页 >> 编程开发 >> Visual C++ >> 进程和线程 >> 正文
进程和线程 RSS
 

使用多线程绘图(三)

http://www.rdxx.com 02年09月20日 11:38 互联网 我要投稿

关键词: 绘图 , 多线程 , 线程
 

   在CDib中我们每次读入图像的一行,然后发送WM_SETPOS消息给界面线
程,界面则刷新当前图像和进度条,在ON_WM_SETPOS中,wParam为bmp总行
数,lParam为目前处理的行数,为了简化程序我们只处理自底向上(即bmp图
像高度>0)的图像.
   void CDemoDlg::ON_WM_SETPOS(WPARAM wParam, LPARAM lParam)
   {
     CRect clientRc;
     GetClientRect(&clientRc);   //取得当前窗体大小

     CProgressCtrl *cw;
     cw=(class CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
     cw->SetRange (0,100);       //设置进度条

     float l;
     if (wParam!=0)
         l=(float) lParam/(float)wParam*100;
     else
         l=0;
    cw->SetPos ((int)l);       //更新进度条

    CRect rc;
    rc.SetRect (0,wParam-lParam,clientRc.Width(),wParam-lParam+1);
    InvalidateRect(&rc,false); //刷新当前行
   }
   至此我们的界面程序基本完成.

   2.CDib设置:
   下面我们进行CDib的构建,为了方便图像的显示处理我们继承CBitmap构建CDib,
为了解说方便,我们只处理24位色图,这里我们给出CDib基本结构,其他部分读者可以
自由扩充.

   class CDib : public CBitmap 
   {
    public:
             CDib();                            //构造函数
            virtual ~CDib();                //析构函数
            BYTE * m_lpBits;            //数据指针,指向cbitmap的数据区
            LPBITMAPINFOHEADER m_lpBmih;//图像头指针
            HANDLE hMutex;          //互斥变量
            HANDLE hStopEvent;    //线程读到此信号,立即退出现有的操作
            CWnd * m_Wnd;            //用于子线程发送消息界面指针
            CWinThread  *m_cAniThread;  //多线程中,子线程对象
            virtual void DoStop();      //用于界面线程中停止当前线程
            BOOL LoadBmp(LPCTSTR lpszPathName, CDC* pDC = NULL);

共2页  第1页 第2页


 
 
标签: 绘图 , 多线程 , 线程 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站