我在项目中需要进行串口通信,在下载数据的过程中,希望能显示一个对话框,提示“数据下载中,请稍候”。于是就建立一个无模式的对话框,在对话框中写上这几个字,然后在开始串口通信的函数中:
void CView::OnStart()
{
         CWaitDlg* dlg=new CWaitDlg;
         dlg->Create();
         dlg->ShowWindow(SW_SHOWNORMAL);
         //下面的就是打开串口等操作
DCB dcb;

g_hComDev = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, 
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
if( g_hComDev == NULL ) return;

memset( &g_OverlappedRead, 0, sizeof( OVERLAPPED ) );
memset( &g_OverlappedWrite, 0, sizeof( OVERLAPPED ) );

COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts( g_hComDev, &CommTimeOuts );

g_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
g_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );

dcb.DCBlength = sizeof( DCB );
GetCommState( g_hComDev, &dcb );
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
if( !SetCommState( g_hComDev, &dcb ) ||
!SetupComm( g_hComDev, 10000, 10000 ) ||
g_OverlappedRead.hEvent == NULL ||
g_OverlappedWrite.hEvent == NULL ){
DWORD dwError = GetLastError();
if( g_OverlappedRead.hEvent != NULL ) CloseHandle (g_OverlappedRead.hEvent );
if( g_OverlappedWrite.hEvent != NULL ) CloseHandle( g_OverlappedWrite.hEvent );
CloseHandle( g_hComDev );
AfxMessageBox("串口设置失败!");
}
BOOL bWriteStat;
DWORD dwBytesWritten=g_lDatalen*2+6; 
bWriteStat=WriteFile(g_hComDev,
   g_pSerialData,
            g_lDatalen*2+6,
            &dwBytesWritten,
            &g_OverlappedWrite);
if(!bWriteStat){
if(GetLastError()==ERROR_IO_PENDING){
WaitForSingleObject( g_OverlappedWrite.hEvent, INFINITE );
g_pDlgWait->DestroyWindow();
//设置绘图线程的开始事件为由信号状态
g_eventStart.SetEvent();
}
}
}
现在的问题是无模式的对话框无法正确显示
但如果简单的
void CView::OnStart()
{
         CWaitDlg* dlg=new CWaitDlg;
         dlg->Create();
         dlg->ShowWindow(SW_SHOWNORMAL);
}
就可以正确的显示难道后面这些串口的操作也会影响无模式对话框吗?谢谢!