我的代码如下:
BOOL CTESTApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CTESTDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
dlg.SendMessage(WM_CLOSE,0,0);
return FALSE;
}
这段代码要怎么改,才能实现我的要求?
10 个解决方案
不太明白你这样做的目的,虽然你的想法可以实现,但对话框一打开就关闭,程序就退出来了。这样的程序有什么用?
dlg.DoModal(即模态显示对话框)后程序是在对话框控制,只有对话框关闭后才返回,返回后才执行下一句dlg.SendMessage,所以你的程序不满足你的要求。
理论上要实现你的想法可以创建非模块的对话框并显示,然后用发消息关闭对话框。麻烦一点的用多线程估计也可以实现。
在CTESTDlg类中用SetTimer和KillTimer,可以比较方便的实现
同意fengqinggao(风清高) 的,在CTESTDlg中实现!
多谢两位给了我新的思路
我只是把我的要求简化成大家容易拿出解决代码,我也容易理解的情况
我的应用是做一个复制文件的应用程序,主程序弹出一个提示对话框提示
用户等待,然后主程序开始复制文件,复制完成后,发消息给先前弹出的
对话框,让它关闭。
请问wenzhousun,怎么创建非模式对话框,请就着上面那段程序中添加,这样
我一试就可以了,也容易理解
主要是复制文件时间不一定,因为文件长度不固定
CTipDlg dlg;
dlg.Create(CTipDlg::IDD, NULL);
dlg.ShowWindow(SW_SHOW);
........//拷贝文件代码
dlg.ShowWindow(SW_HIDE);//或dlg.EndDialog(0);
(以上程序可能导致dlg界面得不到刷新。)
如果是那样,还是开线程,做一个进度条比较好,当然,楼上的方法是可行的
#define ID_COPYFILE 1001
#define ID_CLOSEWIN 1002
BOOL CAutoCloseWinDlg::OnInitDialog()
{
...
SetTimer( ID_COPYFILE, 10, NULL );
m_Progress1.SetRange( 0, 100 );
m_Progress1.SetPos( 1 );
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CAutoCloseWinDlg::OnTimer(UINT nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch( nIDEvent ) {
case ID_COPYFILE:
FileCopy( "cc", "dd" );
SetTimer( ID_CLOSEWIN, 10, NULL );
break;
case ID_CLOSEWIN:
DestroyWindow();
break;
}
CDialog::OnTimer(nIDEvent);
}
BOOL CAutoCloseWinDlg::FileCopy( const CString SourcePath, const CString DestPath )
{
if( SourcePath.IsEmpty() && DestPath.IsEmpty() )
return FALSE;
int Min = 0, Max = 0;
m_Progress1.SetStep( 10 );
m_Progress1.GetRange( Min, Max );
for( int ii = Min; ii < Max; ii++ ) {
m_Progress1.SetPos( ii + 10 );
Sleep( 100 );
}
return TRUE;
}
当然我这里没有写真的copy file 你自己改一下, 你最好以多程序方式调用它.
To fengqinggao(风清高)
有没有线程实现的简单代码,我有几个进度条的例子是用线程实现的,但是其他代码太多,有很多
类文件,不方便提取出来,你能不能就着上面这段代码给改一下
一个类就可以实现啊,如果还需要,请发信至fqg76@163.com,注明要进度条即可