起初对我的英语很抱歉:)
我有一点问题。
我有一个用C ++编写的程序,该程序可以解析JavaScript文件以便找到一些关键字。
我有一个主窗口和一个主菜单,当您单击菜单->打开文件夹时,您需要选择文件夹。在此之后,我恢复了此文件夹中的所有文件以将其打开,请阅读它以找到我的关键字。一切正常后,我在子窗口中显示结果。我想添加一个显示诸如“正在加载,请稍候”之类的文本的弹出窗口,但是我有一个小问题。
这是我的代码:
// creating a "popup" display a text while loading
MainWindow::m_hwndResLoading = CreateWindow( "edit",
"",
WS_VISIBLE|ES_MULTILINE|ES_READONLY|WS_OVERLAPPED,
0,
0,
400,
200,
hwnd,
NULL,
NULL,
NULL);
// creating my str, and asking my m_hwndLoading to display my text
string loading = "Chargement";
SetWindowText(MainWindow::m_hwndResLoading,TEXT(loading.c_str()));
MainWindow::projectPath = path;
// this function find every files in a specified directory which is source code file
getAllFile(path);
// creating my childwindow which will contain the result of the files parsing
MainWindow::m_hwndRes = CreateWindow( "edit",
"",
WS_VISIBLE|WS_CHILD|WS_BORDER|
WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|
ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_READONLY,
0,
0,
1000,
600,
hwnd,
NULL,
NULL,
NULL);
// create and instanciate my object
FileParser *fp;
fp = new FileParser();
string res = fp->init(files);
// close my loading "popup"
CloseWindow(MainWindow::m_hwndResLoading);
// display the result in my child window
SetWindowText(MainWindow::m_hwndRes,TEXT(res.c_str()));
当我运行该应用程序时,当我打开新文件夹时,显示“弹出窗口”,但没有加载文本。解析完成后,一切都很好,关闭了弹出窗口,并在子窗口中填充了结果。
我看到了,如果我对此行发表评论:
CloseWindow(MainWindow::m_hwndResLoading);
加载文本与结果显示在同一时刻。
有人有帮助我的想法吗?
非常感谢
我相信问题是缺少(win32)消息处理。我假设你AVE消息处理循环(如TranslateMessage
,DispatchMessage
等)在你的代码的地方?
我认为您的问题是REPAINT
在弹出窗口创建和长时间加载例程之间不处理消息(在这种情况下可能是消息)。这就是为什么您的弹出窗口不绘制并且应用程序冻结的原因。尝试在CreateWindow
和之间插入消息处理调用FileParser::init
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句