RM Smissaert kindly replied to my recent Q of how to disable screen
updating in a TreeView:

Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal HWND As Long, ByVal wMsg _
As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_SETREDRAW = &HB

***

SendMessage TreeView1.HWND, WM_SETREDRAW, IIf(EnableTheBugger, 1, 0),
0

(The 1 and 0 in my IIf are reversed from his example, which I presume
is correct, 'cause it seems to work for me.)

But this call fails, UNLESS (I found empirically) I, like, make the
call, then show a MsgBox (which interrupts processing and "seeds" the
screen first...?) Sort of like having to turn off the pilot before
turning off your stove.

What additional API call must I make if any to make WM_SETREDRAW work?

***

Better yet, how do you do this in a native VBA way?

What I'm doing is cleaning & pruning the tree--deleting & moving
hundreds or even thousands of nodes. Each operation of which has to
wait for my ancient video card, which I inherited from Johannes
Vermeer, to repaint (in slow-to-dry Old Master oils) my screen.

Thanks much.

***

Re: WM_SETREDRAW doesn't work unless...what? by RB

RB
Fri May 16 18:03:15 CDT 2008

Try a DoEvents in a few places.
Will need a bit of experimenting.

RBS


<baobob@my-deja.com> wrote in message
news:6a3e2e69-fcb1-488a-bf3b-dfcc4c6f5447@m45g2000hsb.googlegroups.com...
> RM Smissaert kindly replied to my recent Q of how to disable screen
> updating in a TreeView:
>
> Private Declare Function SendMessage Lib "user32" Alias _
> "SendMessageA" (ByVal HWND As Long, ByVal wMsg _
> As Long, ByVal wParam As Long, lParam As Any) As Long
>
> Private Const WM_SETREDRAW = &HB
>
> ***
>
> SendMessage TreeView1.HWND, WM_SETREDRAW, IIf(EnableTheBugger, 1, 0),
> 0
>
> (The 1 and 0 in my IIf are reversed from his example, which I presume
> is correct, 'cause it seems to work for me.)
>
> But this call fails, UNLESS (I found empirically) I, like, make the
> call, then show a MsgBox (which interrupts processing and "seeds" the
> screen first...?) Sort of like having to turn off the pilot before
> turning off your stove.
>
> What additional API call must I make if any to make WM_SETREDRAW work?
>
> ***
>
> Better yet, how do you do this in a native VBA way?
>
> What I'm doing is cleaning & pruning the tree--deleting & moving
> hundreds or even thousands of nodes. Each operation of which has to
> wait for my ancient video card, which I inherited from Johannes
> Vermeer, to repaint (in slow-to-dry Old Master oils) my screen.
>
> Thanks much.
>
> ***