我建的工程是多文档的,有一菜单项,选择后将EXCEL中的数据一条一条的导入数据库中,在导入过程中需要在下面的状态条显示已导入的条数。如果此时不在电脑上做任何操作,可以看到状态条的变化。但是,如果此时如果做其他操作,如打开其他文件,这时,程序的窗体就再也不能打开了,虽然它还在运行,但我不能看到任何显示,对程序使用右键:最大化或还原,都没用。
有好心人告诉我该用线程,可是,我从未用过线程。查了一些线程的资料,还是很晕,不知该怎么才能看到状态条的变化,使程序使用右键:最大化或还原能有用。
谢谢各位,能给个详细些的说明吗?
有好心人告诉我该用线程,可是,我从未用过线程。查了一些线程的资料,还是很晕,不知该怎么才能看到状态条的变化,使程序使用右键:最大化或还原能有用。
谢谢各位,能给个详细些的说明吗?
解决方案 »
- 程序运行的好好地,莫名奇妙的出现了一个错误
- 求助高手,BitBlt/DC/系统颜色 之间关系
- 单文档视图分割问题
- 客户端无法联接上服务器端
- 向工程加入一个头文件和一个CPP文件后,在链接时出现WINDOWS.H already included. MFC apps must not #include <windows.h>的错误
- 请问:如何在共享DLL中调用非模式对话框?(在线)
- 请教,如何取得计算机上唯一的硬件信息,谢谢
- 一个vc的错误问题分析
- 在DCOM中怎样使用VARIANT传输一批二进制数据?
- 有办法让CapsLock键失效,从而为自己所用吗?
- vc如何得到word常量?
- 怎样判断DLG是SW_SHOW还是SW_HIDE?
写个简单的线程AfxBeginThread,UINT Thread1(LPVOID),将操作对象传进线程操作就可以了
http://www.vckbase.com/document/viewdoc/?id=506
CStatusBar* pStatus;
pStatus->SetPaneText(0,"已导入记录数",true);
只要执行到pStatus->SetPaneText(0,"已导入记录数",true);就会出错
LoopProgressBar()
{
//increase progress
PumpMessage();
}其中PumpMessage()让 Windows 系统 释放CPU给别的任务在32位时代,用多线程啦!最好学会多线程,不难,以后还要有的哦!
{
CUIThread * m_UIthread;
m_UIthread=NULL;
m_UIthread->MyThread(ExcelNameStr);
return 1;
}void CMyApp::ReadExcel()
{
CWinThread* m_pThread;
m_pThread=NULL;
m_pThread=AfxBeginThread(MYProc, this, THREAD_PRIORITY_NORMAL,0, CREATE_SUSPENDED, NULL);
if(m_pThread!=NULL)
m_pThread->ResumeThread();
}BOOL CMyApp::ImportFromExcel(CString ExcelName)
{
CStatusBar* pStatus;
err="正在进行数据导入,请稍侯..... ";
pStatus->SetPaneText(0,err,true);
}
二、UIThread.cpp
UINT CUIThread::MyThread(CString ExcelName)
{
CMyApp *m_pApp;
m_pApp=NULL;
m_pApp->ImportFromExcel(ExcelName);
return 1;
}我在执行到函数ImportFromExcel(CString ExcelName)中以下一句时就会出错
pStatus->SetPaneText(0,err,true);
我并没有使用进度条,只是希望通过时时更新状态条来显示进度
怎么办呀?谢谢各位,我是从零学起的,千万别笑话我
CStatusBar* pStatus=wndStatusBar;
wndStatusBar自己获取
'wndStatusBar' : undeclared identifier
{
CMyApp *m_pApp;
m_pApp=NULL;
m_pApp->ImportFromExcel(ExcelName);
return 1;
}
m_pApp被赋值为NULL,怎么可以调用他的ImportFormExcel方法呢?
不需要到下一句,你这一句就有问题。这个函数也有同样的问题。
UINT MYProc(LPVOID pParam)
{
CUIThread * m_UIthread;
m_UIthread=NULL;
m_UIthread->MyThread(ExcelNameStr);
return 1;
}你应该这样写。
UINT MyProc(LPVOID p)
{
CMyApp * m_UIthread = (CMyApp*)p;
m_UIthread->MyThread(ExcelNameStr);
return 1;
}
BOOL CMyApp::ImportFromExcel(CString ExcelName)
{
CStatusBar* pStatus;
err="正在进行数据导入,请稍侯..... ";
pStatus->SetPaneText(0,err,true);
}
这个函数出错是因为你的pStatus没有赋值。
你的进度条在什么地方,应该怎样访问,你自己应该清楚。
例如在Dialog上可以这样写
CStatusBar *pStatus = (CStatusBar*)GetDlgItem(...);