我有一个带tabcontrols,按钮和进度条的简单应用程序。 现在我想在进度条上方添加一个简单的标签/文字,其中包含" Waiting .."," Progress(0%)"等
标签不会更新。
更新标签的简单解决方案。 (类似于.NET)。
'Like this
Label1.Text = "Doing stuff .."
GetDlgItem( HWND_LABEL_STATUS, INDEX_LABEL_STATUS );
SetWindowText( HWND_LABEL_STATUS, "Doing stuff .." );
2
SendMessage( HWND_LABEL_STATUS, WM_SETTEXT, INDEX_LABEL_STATUS , reinterpret_cast< LPARAM >( LPCTSTR( "Doing stuff .." ) ) );
3
HWND label = GetDlgItem( HWND_LABEL_STATUS, INDEX_LABEL_STATUS );
label->SetWindowText( "Doing stuff .." );
4
SetWindowText( HWND_LABEL_STATUS, "Doing stuff .." );
// and/or
SetDlgItemText( HWND_LABEL_STATUS, INDEX_LABEL_STATUS, "Doing stuff .." );
RedrawWindow( HWND_LABEL_STATUS, nullptr, nullptr, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
答案 0 :(得分:0)
如果您的标签是对话框的子标签,并且标签上分配了对话框项ID,则可以使用:
SetDlgItemText(hwndMyDialog, ID_LABEL_STATUS, TEXT("Doing stuff .."));
或者这个:
HWND label = ...; //label = GetDlgItem(hwndMyDialog, ID_LABEL_STATUS);
SetWindowText(label, TEXT("Doing stuff .."));
//or
//SendMessage(label, WM_SETTEXT, 0, reinterpret_cast<LPARAM>(TEXT("Doing stuff ..")));
无论哪种方式,如果标签文本没有正确地在屏幕上更新,那么你可能正在做一些事情来阻止调用线程的消息循环处理新的绘制消息(例如在正在进行的循环中更新标签别的东西)。至少,您可以使用UpdateWindow()
来处理待处理的油漆:
UpdateWindow(hwndMyDialog);
UpdateWindow(label);