Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3021

CStatic control flicker only when running with Windows Classic theme

$
0
0
I'm dealing with a very weird visual bug. Let me explain.

I have a C++/MFC application that displays a count in a window:

Name:  1.png
Views: 126
Size:  5.3 KB

The count (text) is displayed via a `CStatic` control. The mechanism is very simple. I call it every 1000 ms and update the text as such:

Code:

    void CTestCountdownFlickerDlg::RedrawCounter(LPCTSTR pText)
    {
            CStatic* pTxtBox = (CStatic*)this->GetDlgItem(IDC_STATIC_COUNTER);
            ASSERT(pTxtBox);
   
            //Get previous text
            CString strPrevText;
            pTxtBox->GetWindowText(strPrevText);
   
            //Update only if different
            if(strPrevText.Compare(pText) != 0)
            {
                    //Set next text
                    pTxtBox->SetWindowText(pText);
            }
    }

What happens is that the `CStatic` control updates without any issues on the OS with visual themes enabled, but if I run it on the OS with the Windows Classic theme (for instance, the screenshot above is from Windows 7) the `CStatic` control produces a visible flicker every time it updates the text.

Well, I understand that I'm nitpicking here, still I would really like to get rid of this flicker.

Here's what I tried:

1. In my actual project I tried subclassing the `CStatic` control and removed the processing of `WM_ERASEBACKGROUND` by simply returning 1. That didn't help.

2. In the same subclass for `CStatic` control I tried to override `WM_PAINT`, but that didn't work at all. So I'm not sure if I'm going too far with it at this point.

I'm attaching the C++/MFC source code for my test project I made the screenshot above for.
Attached Images
 
Attached Files

Viewing all articles
Browse latest Browse all 3021

Trending Articles