View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
RB Smissaert RB Smissaert is offline
external usenet poster
 
Posts: 2,452
Default WM_SETREDRAW doesn't work unless...what?

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

RBS


wrote in message
...
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.

***