|
From: Raphael S. <win...@ra...> - 2009-03-09 00:06:51
|
Hi @ all
I try to plot a static DC-Object (means: the graphic is calculated uniquely
at runtime, depending of several parameters, and does not change while
displaying the window) in a window.
The problem is that this object continuously needs to be redrawn, because it
vanishes during moving the window around, or if an other window is moving
over it.
I thought, a repaint-routine like that would solve the problem:
-------------------------------------
use strict;
use Win32::GUI();
our $WIN;
our %DC;
&build_gui;
Win32::GUI::Dialog();
sub build_gui # Building the GUI
{
$WIN = new Win32::GUI::Window(
-left => 200, -top => 200, -width => 300, -height => 300,
-name => "WIN",
-text => "Static-DC-Test",
#-noflicker => 1, # Useless/worse result
);
$WIN->Show();
$DC{'color'}{'white'} = [255,255,255];
$DC{'color'}{'red'} = [255,0,0];
$DC{'pen'} = new Win32::GUI::Pen( -color => $DC{'color'}{'red'}, -width =>
3, );
$DC{'brush'} = new Win32::GUI::Brush( -color => $DC{'color'}{'white'},
-width => 1, );
&repaint;
$DC{'timer'} = $WIN ->AddTimer("timer", 100);
}
sub ::timer_Timer # Repaint DC with interval of 'timer'
{ &repaint; }
sub WIN_Terminate { return -1; }
sub repaint # Create/rebuild DC-Object
{
$DC{'dc'}{'object'} = $WIN -> GetDC;
$DC{'dc'}{'object'} -> FillRect(10, 10, 280, 260,$DC{'brush'});
$DC{'dc'}{'object'} -> SelectObject($DC{'pen'});
$DC{'dc'}{'object'} -> BeginPath();
$DC{'dc'}{'object'} -> MoveTo(10, 10);
$DC{'dc'}{'object'} -> LineTo(280, 260);
$DC{'dc'}{'object'} -> EndPath();
$DC{'dc'}{'object'} -> StrokePath();
#$DC{'dc'}{'object'} -> Save(); # ??? Save() --> Restore() ???
}
-------------------------------------
But the result of the code above is a flickering, annoying graphic.
So the next thought, was to generate a bitmap from the DC. There is, if Im
not wrong, a method with DIBitmap. But, I would like to refrain from binding
in that module, only for converting a single graphic, because its bloating
up the program/PAR-binary.
Sadly, the DC-Documentation is frequent a sealed book for me.
Does anyone know an easy method (I also like to take a complex solution :-))
to convert a DC into a bitmap-object, without using DIBitmap? Or, even
better, a way to prevent that flickering during the repaint?
Thanks a lot.
Regards,
Raphael
|