您的位置:程序门 -> vc/mfc -> 进程/线程/dll



程序读取进度条的编写


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


程序读取进度条的编写
发表于:2008-01-09 18:08:51 楼主
我用mfc编了个读取数据库的程序。有一个开始登陆界面。
目前我的登陆功能是:输入口令后一点“登陆”。界面消失,然后程序就跟退出了一样。而程序实际上是在读取一个几十m的数据库文件。要10多秒才可以打开主界面对话框。感觉不太好。
我想实现:在登陆界面编写一个类似于很多大型程序都有的“loading...”画面。要能实时给出读取进度更好。等读取完成后再关闭该登陆对话框,打开主界面框。可能涉及到多线程等知识。我还不会类似功能。

请诸位大虾帮忙。谢谢支持。我用的语言是vc   6.0

最好能提示小弟下:应该在哪个对话框类中的哪些函数中编写代码。谁能给个例子?
发表于:2008-01-09 18:32:441楼 得分:0
这种情况下最好在线程中执行数据库的读取操作就可以了,读取到一定数量向进度对话框post一个消息以更新进度显示就可以
如果进度显示放在登录对话框中,则可以在用户点击登录按钮时创建线程

static   dword   winapi   _threadproc(lpvoid   pparam)
{
    clogindlg   *pdlg   =   (clogindlg*)pparam;

    ::coinitialize(null);
    while   (   !   eof(records))
    {
          //如果读取记录条数超过一定数量事   pdlg-> postmessage(um_progress,   进度,   0);
    }
    ::couninitialize();

    pdlg-> postmessage(um_complete,   0,   0);
}

clogindlg::onbuttonlogin()
{
    if   (   bloginsuccess   )
    {  
        //   此处   disable   掉用户名/密码编辑框及相关按钮
        m_hthread   =   ::createthread(...,   _threadproc,   ...);
    }
}

clogindlg::onreadcomplete(wparam,   lparam)
{
    if   (   m_hthread   )
        ::closehandle(m_hthread);
    onok();
}
发表于:2008-01-10 11:29:502楼 得分:0
用cprogressctrl
发表于:2008-01-10 11:29:553楼 得分:0
用     cprogressctrl     ,我是亲手
发表于:2008-01-11 13:00:274楼 得分:0
不会线程也能实现,就peekmessage,mfc编程2那本书上有例子。
发表于:2008-01-11 13:08:555楼 得分:0
如果要学习的话还是学学线程,以后是必学的,不用线程的话界面上的迟顿是无法避免的


快速检索

最新资讯