请问关于无模式对话框问题(问题比较奇怪,标题中不好描述)

tjuzhangrui 2005-11-28 01:11:27
我在项目中需要进行串口通信,在下载数据的过程中,希望能显示一个对话框,提示“数据下载中,请稍候”。于是就建立一个无模式的对话框,在对话框中写上这几个字,然后在开始串口通信的函数中:
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);
}
就可以正确的显示

难道后面这些串口的操作也会影响无模式对话框吗?

谢谢!
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2005-11-28
  • 打赏
  • 举报
回复
在 pDlg->ShowWindow();
后面再加入:
pDlg->UpdateWindow();
调用,要求系统立刻更新界面就可以了
kelinwang19 2005-11-28
  • 打赏
  • 举报
回复
建议做个消息处理函数来处理串口的操作,可以在showwindow之后发送一个消息,然后进入该处理函数进行处理
84830388 2005-11-28
  • 打赏
  • 举报
回复
应该创建子线程来显示。否则在同一个线程中只能顺序执行。
jerry 2005-11-28
  • 打赏
  • 举报
回复
进程在执行你的COM操作,被阻塞了没空去响应界面的绘制
寻开心 2005-11-28
  • 打赏
  • 举报
回复
消息发送和响应的问题
调用了ShowWindow但是并没有被执行
而是进入了下面的其他的处理

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧