A while back, I changed my Win32::GUI 0.558 sources and achieved flicker-free
resize. Here's what I did:
CHANGE LINE 4059 FROM: wcx.style = CS_HREDRAW | CS_VREDRAW; // TODO (default
class style...)
TO: wcx.style = 0;
That's it. Now, I'm not exactly sure what other ramifications that has, but
the resize is flicker-free now.
For everyone's benefit, I've gone through my code and found a few other
enhancements I made. The provided line numbers are all against an unmodified
0.558 source (aka the oldest file available on sourceforge CVS).
--- GETSAVEFILENAME: Added support for a -flags option, see Windows API
documentation for usage
ADD AFTER LINE 7257:
// Support for -flags option
if(strcmp(option, "-flags") == 0) {
next_i = i + 1;
ofn.Flags = SvIV(ST(next_i));
}
--- RICHEDIT CONTROL: Added some additional functions
ADD AFTER LINE 9195:
###########################################################################
# (@)METHOD:TextLength()
# Returns the text length of the RichEdit control
LRESULT
TextLength(handle)
HWND handle
PREINIT:
GETTEXTLENGTHEX tl;
CODE:
ZeroMemory(&tl, sizeof(GETTEXTLENGTHEX));
tl.flags = GTL_DEFAULT;
tl.codepage = CP_ACP;
RETVAL = SendMessage(
handle, EM_GETTEXTLENGTHEX, (WPARAM) (GETTEXTLENGTHEX FAR *) &tl, 0
);
OUTPUT:
RETVAL
###########################################################################
# (@)METHOD:SetTextMode(MODE, UNDO)
# Sets the RichEdit control's text mode
LRESULT
SetTextMode(handle,mode,undo)
HWND handle
int mode
int undo
PREINIT:
WPARAM wParam;
CODE:
// SendMessage(handle, WM_SETTEXT, 0, (char *) "");
wParam = 0;
if(mode == 0) { wParam += TM_PLAINTEXT; }
if(mode == 1) { wParam += TM_RICHTEXT; }
if(undo == 0) { wParam += TM_SINGLELEVELUNDO; }
if(undo == 1) { wParam += TM_MULTILEVELUNDO; }
RETVAL = SendMessage(
handle, EM_SETTEXTMODE, (WPARAM) wParam, 0
);
OUTPUT:
RETVAL
###########################################################################
# (@)METHOD:SetMaxLength(LENGTH)
# Sets the RichEdit control's maximum length (up to 2GB)
LRESULT
SetMaxLength(handle,length)
HWND handle
long length
CODE:
RETVAL = SendMessage(
handle, EM_EXLIMITTEXT, 0, (LPARAM) length
);
OUTPUT:
RETVAL
###########################################################################
# (@)METHOD:GetTextRange(START, LENGTH)
# Returns LENGTH bytes of text from the RichEdit control, starting at START
void
GetTextRange(handle,start,length)
HWND handle
LONG start
LONG length
PREINIT:
TEXTRANGE tr;
CHARRANGE cr;
char * text;
LRESULT count;
PPCODE:
ZeroMemory(&tr, sizeof(TEXTRANGE));
ZeroMemory(&cr, sizeof(CHARRANGE));
if(length < 0) length = 0;
if(start < 0) start = 0;
text = (char *) safemalloc(length+1);
cr.cpMin = start;
cr.cpMax = start+length;
tr.chrg = cr;
tr.lpstrText = text;
count = SendMessage(handle, EM_GETTEXTRANGE, 0, (LPARAM) (TEXTRANGE FAR *)
&tr);
EXTEND(SP, 1);
XST_mPV(0, text);
safefree(text);
XSRETURN(1);
Hope these help everyone.
Trevor Garside
[EMAIL PROTECTED]
(800) 648-8617 x1540
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of
Jeremy White
Sent: Friday, November 21, 2003 4:04 AM
To: [EMAIL PROTECTED]; [email protected]
Subject: Re: [perl-win32-gui-users] Win32::GUI::XMLBuilder
>From: Blair Sutton/Odey <[EMAIL PROTECTED]>
>My only problem is I don't really want to maintain a separate website to
>keep the code, really it would be nice to add it as an extras feature to
>Win32::GUI. I am willing to submit the code with some examples (still need
>to write documentation - although it's fairly straightforward). Any
>thoughts from anyone?
I guess the best thing to do is to submit the code and see what interest it
generates. Having many utilities can on be a good thing.
>As for the flicker free resizing I have read that one way around it is to
>modify the style of the top Window to include WS_CLIPCHILDREN before
>resizing then reset it back afterwards. See
>http://www.codeguru.com/mfc/comments/42342.shtml.
I've tried this on the perl resize and in the xs resize, but no luck. For
this to work WS_CLIPCHILDREN needs to be applyed on the mouse click for the
resize - and I couldn't find a way to trap this event. Ideas any one?
Cheers,
jez.
_________________________________________________________________
Use MSN Messenger to send music and pics to your friends
http://www.msn.co.uk/messenger
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
Perl-Win32-GUI-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users