How to: Show wait cursor in managed and native code

Posted by TechTwaddle on Geeks with Blogs See other posts from Geeks with Blogs or by TechTwaddle
Published on Thu, 15 Apr 2010 14:04:21 GMT Indexed on 2010/04/15 14:13 UTC
Read the original article Hit count: 367

Filed under:

Someone on the MSDN forum asked about how to show a wait cursor, like when your application is loading or performing some (background) task. It’s pretty simple to show the wait cursor in both managed and native code, and in this post we will see just how.

Managed Code (C#)

Set Cursor.Current to Cursors.WaitCursor, and call Cursor.Show(). And to come back to normal cursor, set Cursor.Current to Cursors.Default and call Show() again. Below is a button handler for a sample app that I made, (watch the video below)

private void button1_Click(object sender, EventArgs e)
{
    lblProgress.Text = "Downloading ether...";
    lblProgress.Update();

    Cursor.Current = Cursors.WaitCursor;
    Cursor.Show();

    //do some processing
    for (int i = 0; i < 50; i++)
    {
        progressBar1.Value = 2 * (i + 1);
        Thread.Sleep(100);
    }

    Cursor.Current = Cursors.Default;
    Cursor.Show();

    lblProgress.Text = "Download complete.";
    lblProgress.Update();
}

 

Native Code

In native code, call SetCursor(LoadCursor(NULL, IDC_WAIT)); to show the wait cursor; and SetCursor(LoadCursor(NULL, IDC_ARROW)); to come back to normal. The same button handler for native version of the app is below,

case IDC_BUTTON_DOWNLOAD:
    {
        HWND temp;

        temp = GetDlgItem(hDlg, IDC_STATIC_PROGRESS);
        SetWindowText(temp, L"Downloading ether...");
        UpdateWindow(temp);

        SetCursor(LoadCursor(NULL, IDC_WAIT));

        temp = GetDlgItem(hDlg, IDC_PROGRESSBAR);
        for (int i=0; i<50; i++)
        {
            SendMessage(temp, PBM_SETPOS, (i+1)*2, 0);
            Sleep(100);
        }

        SetCursor(LoadCursor(NULL, IDC_ARROW));

        temp = GetDlgItem(hDlg, IDC_STATIC_PROGRESS);
        SetWindowText(temp, L"Download Complete.");
        UpdateWindow(temp);
    }
    break;


Here is a video of the sample app running. First the managed version is deployed and the native version next,

© Geeks with Blogs or respective owner