Announcement

Collapse
No announcement yet.

Dialog Redraw vs Control Redraw - flicker reduction

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gary Beene
    replied
    Actually, I was using %WS_OVERLAPPEDWINDOW, whose value includes %WS_THICKFRAME. So Help actually gave me a clue to a fix if I had just understood it!

    Leave a comment:


  • Gary Beene
    replied
    Elias,

    Thanks for the tip. I tried it and it is much better, with both the Dialog and Control redraws. I read the Help entry on it, but since I wasn't using %WS_THICKFRAME - which Help gave as a possible complicating factor, I didn't give it a try.

    Eros,

    I also saw that warning in the PB Help file, but when I did it anyway nothing bad seemed to happen. When I saw the warning I assumed the problem would have been an unending series of redraw, but didn't see it. Why would it only be 2, as your comment noted? I guess I could test it easily enough with a static counter, unless there are timing issues which make the answer different every time. Especiially with multiple redraws, I can see why flickering would be a risk.

    If I'm using the mouse to resize the dialog, and want the image updated realtime, what message other than %WM_SIZE is available that I should use to REDRAW? If I wait for a mouseup, then I don't get a realtime update to the dialog content.

    Dave,
    Thanks for the link. I did a quick read and it has good information. I'll go back and absorb the details.

    Leave a comment:


  • Dave Biggs
    replied
    Flicker and the use of WS_CLIPCHILDREN described here - http://www.catch22.net/content/flicker-free-drawing

    Leave a comment:


  • Chris Holbrook
    replied
    Originally posted by Eros Olmi View Post
    Mainly to avoid flickering.

    When you resize a control, a redraw message is already sent to you control. The same when you resize a dialog. So if you fire another redraw you are just redrawing all twice.
    Thanks Eros!

    Leave a comment:


  • Eros Olmi
    replied
    Mainly to avoid flickering.

    When you resize a control, a redraw message is already sent to you control. The same when you resize a dialog. So if you fire another redraw you are just redrawing all twice.

    I'm not an expert of MS documentation. I just say it on top of my personal experience so I can be wrong.

    Leave a comment:


  • Chris Holbrook
    replied
    Originally posted by Eros Olmi View Post
    Also, I would suggest to avoid to redraw your controls (or dialog) in response to a %WM_SIZE event.
    Why should this be avoided Eros?

    Leave a comment:


  • Eros Olmi
    replied
    I think Elias already gave you the right indication: use %WS_CLIPCHILDREN style in your DIALOG NEW ... statement. It is a simple solution to many flickering problems.

    Also, I would suggest to avoid to redraw your controls (or dialog) in response to a %WM_SIZE event. Thare is almost always another way to do it.

    Ciao
    Eros

    Leave a comment:


  • Elias Montoya
    replied
    Hello Gary. Try using WS_CLIPCHILDREN in the creation of your dialog, flicker will be gone.

    Leave a comment:


  • Dialog Redraw vs Control Redraw - flicker reduction

    I'm just beginning to look at controlling flicker when resizing a dialog.

    I wrote a simple app with two image controls and put a picture in each.

    Then I used %WM_SIZE to trigger resizing the controls. The resizing works fine but the use of Dialog Redraw gives MUCH more noticeable flicker than using a redraw for each of the two controls I placed on the dialog.

    Code:
              Dialog Redraw hDlg
    vs
              Control ReDraw hDlg, 110
              Control ReDraw hDlg, 120
    This is the opposite of what Help says - which is that Control Redraw schedules a redraw whereas Dialog Redraw gives immediate results.

    Is there a general rule about using redraw commands, or more likely a body of experience on the topic to get flicker free resizing of controls on a dialog.

    I did a brief forum search on flicker, but most posts didn't seem to address the question, although I must admit I didn't search long and hard.

    Here's the whole example, if it's needed. I used one of my PBR files to get an image for the imagex controls.

    Code:
       #Compile Exe
       #Include "Win32API.inc"
       #Resource "pb-test.pbr"
       Global hDlg As Dword, hLst As Dword, hTemp As Dword
       Global style&, extstyle&
       Function PBMain() As Long
        Dialog New Pixels, 0, "Graphic Control Test",300,300,450,380, _
                                  %WS_OverlappedWindow, 0 To hDlg
    
        style& = %WS_Visible Or %SS_Notify
        Control Add ImageX, hDlg, 110,"cowgirl", 0,0,200,300, style&
        Control Add ImageX, hDlg, 120,"cowgirl", 210,0,200,300, style&
        Dialog Show Modal hDlg Call DlgProc
       End Function
    
       CallBack Function DlgProc() As Long
          If Cb.Msg = %WM_Size Then
              Dim w As Long, h As Long   'width/height of dialog
              Dialog Get Client hDlg To w,h
    
              Control Set Size hDlg, 110, w/2-4, h
    
              Control Set Size hDlg, 120, w/2-4, h
              Control Set Loc hDlg, 120, w/2+4, 0
    
    '          Dialog ReDraw hDlg
              Control ReDraw hDlg, 110
              Control ReDraw hDlg, 120
          End If
        End Function
    Last edited by Gary Beene; 16 Feb 2009, 12:26 AM.
Working...
X