簡體   English   中英

帶線程的多個對話框中的進度條

[英]Progress bar in multiple dialogs with thread

我的應用程序必須跟蹤時間並在不同階段提醒用戶,以允許或不允許某些操作。 因為用戶將等待,所以我想顯示進度以顯示等待時間。 例如,我的設備在啟動后必須等待5分鍾才能使用。 問題是用戶可以導航到多個對話框,並且我想在其中兩個對話框中顯示進度條。 我使用了一個線程來“運行時鍾”,當需要更新進度條或完成時間活動時,它將把消息發布到GUI。

問題是我可以傳遞初始窗口的句柄,該窗口可以接收來自線程的通知,但是當用戶轉到另一個屏幕時會發生什么? 這個其他窗口甚至還不存在。 我還可以使用其他機制嗎? 我的目標是在兩個對話框中重用時間檢查代碼。

下面是一個非常簡化的代碼:

UINT MonitorTimeThread(LPVOID pVoid )
{
    HWND hWnd = ( HWND ) pVoid;

    HANDLE timer = ::CreateWaitableTimer(NULL, FALSE, NULL);

    SYSTEMTIME t;
    ::GetSystemTime(&t);

    LARGE_INTEGER alarm;
    ::SystemTimeToFileTime(&t, (FILETIME *)&alarm);
    ::SetWaitableTimer(timer, &alarm, 5000, NULL, NULL, FALSE);

    bool done = false;

    while (!done )
    {

        if (WaitForSingleObject( timer, INFINITE ) == WAIT_OBJECT_0 )
        {
            TRACE("time inteval has passed\r\n");

            // update the progress bar on GUI
            PostThreadMessage(hWnd, UM_PROGRESS_TICK, 0 );

            // if user has switch to another window, how to direct messages to that?
        }
    }

    return 0;
}

我不確定我是否是“ 如果您只有錘子,一切看起來都像釘子 ”綜合症的受害者,但是您可以使用與https://stackoverflow.com/a/17033971/145757類似的解決方案

class MyTwoWindows
{
    public: HWND window1;
    public: HWND window2;

    public: MyTwoWindows(HWND w1, HWND w2)
    {
        this->window1 = w1;
        this->window2 = w2;
    }
};

然后我不知道如何將數據傳輸到MonitorTimeThread函數,但是可以傳遞MyTwoWindows的實例來代替單個HWND

UINT MonitorTimeThread(LPVOID pVoid )
{
    MyTwoWindows* data = (MyTwoWindows*) pVoid;
    ...
    PostThreadMessage(data->window1, UM_PROGRESS_TICK, 0 );
    PostThreadMessage(data->window2, UM_PROGRESS_TICK, 0 );

此外,如果沒有同時創建兩個窗口,則仍可以實時修改對象:

void CreateSecondWindow()
{
    HWND hwnd = // a new window;
    myTwoWindows->window2 = hwnd;
}

並在監視功能中:

if (data->window2 != NULL)
{
    PostThreadMessage(data->window2, UM_PROGRESS_TICK, 0 );
}

抱歉,這無關緊要,但是已經晚了。 :)

PS:我在這里寫過關於這種綜合症的文章: http : //pragmateek.com/if-all-you-have-is-a-hammer/ (在C#中實現,但也對C ++程序員也有幫助)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM