[英]displaying a text in a window with C++ Win32 GUI
起初对我的英语很抱歉:)
我有一点问题。
我有一个用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)消息处理。 我假设您在代码中的某处有一个消息处理循环(例如TranslateMessage
, DispatchMessage
之类)?
我认为您的问题是,您在弹出窗口创建和长时间加载例程之间不处理消息(在这种情况下,可能是REPAINT
消息)。 这就是为什么您的弹出窗口不绘制并且应用程序冻结的原因。 尝试在CreateWindow
和FileParser::init
之间插入消息处理调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.