VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
使用多线程绘图(三)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

   在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);
                                                   //由bmp读入图像
            static UINT ThreadProcRead(LPVOID parm);
                                                  //多线程函数读入图像
            .
            .
            .
    protected:
            BOOL AttachDib(HGDIOBJ hObject);
                                                 //Attach Object
            BOOL DeleteDib();      //delete object
            void Initialize();             //设置图像头等操作
            .
            .
            .
   }




相关文章

相关软件