user32: redrawwindow

BlitzPlus Forums/BlitzPlus Programming/user32: redrawwindow

Mr Brine(Posted 2004) [#1]
I was having a gander at some user32.dll stuff and I found this redrawwindow command. When Ive tried to get it working it crashes blitz out. Anybody know the correct way to get it working?

Thanks

Mr Brinne


soja(Posted 2004) [#2]
Well, it works fine for me, though doesn't seem terribly useful. How are you calling it?


JoshK(Posted 2004) [#3]
I am interested in this. Any examples?


Mr Brine(Posted 2004) [#4]
the blitz code I'm calling is so:

w = CreateWindow("", 100,100,200,200,0)
redrawwindow(queryobject(w, 1), 0, 0, 0)

I also tried:

w = CreateWindow("", 100,100,200,200,0)
redrawwindow(queryobject(w, 1), 0, 0, 1)

It has to be said I couldn't find the values for the flags RDW_.... not even in the massive list of win32 consts posted by defiance:

http://www.blitzbasic.com/codearcs/codearcs.php?code=589#comments

The user32.decls line is declared like so:

RedrawWindow%(hwnd%, lprcupdate*, hrgnupdate%, furedraw%)

my suspicions are it is either

a) dodgy flag setup
b) somat to do with lprcupdate* bit of the redrawwindow line in user32.decls

Mr Brine


soja(Posted 2004) [#5]
Yes, you're right.

Issue #1:
Change the lprcupdate* in the declaration to lprcupdate%. You want to do this since you're passing NULL (0). The way it is now, Blitz is trying to dereference 0 (get the value at address 0), and you're getting a memory access violation. It will work fine after that, you'll see.

Issue #2:
Yes the list of Windows constants isn't so complete as many think. You can see at the bottom of the doc page that the RDW* constants are actually defined in windows.h (or possibly winuser.h). Those are included with VC++ or the Windows Platform SDK (free, if you can find it on MS' site -- I can't). Just open up the .h file and search for the names. I would do it for you except my personal system is running a disk diagnosis right now so I can't look at it. You might also have luck looking on google.


JoshK(Posted 2004) [#6]
Please post this when you have a working demo!


soja(Posted 2004) [#7]
Incidentally, here are the RedrawWindow flags:


#define RDW_INVALIDATE 0x0001
#define RDW_INTERNALPAINT 0x0002
#define RDW_ERASE 0x0004

#define RDW_VALIDATE 0x0008
#define RDW_NOINTERNALPAINT 0x0010
#define RDW_NOERASE 0x0020

#define RDW_NOCHILDREN 0x0040
#define RDW_ALLCHILDREN 0x0080

#define RDW_UPDATENOW 0x0100
#define RDW_ERASENOW 0x0200

#define RDW_FRAME 0x0400
#define RDW_NOFRAME 0x0800


Of course, replace "#define" with "Const", and "0x" with "=$".