Hi all,
I want to write an editor use Win32::GUI;
So I hope I can process the KeyDown event for Textfield control by myself.
After some tries,
I can't disable the default action of Textfield in sub onKeyDown().
following is my code, any help would be appreciated.
#! perl -w
use strict;
use Win32::GUI;
use Data::Dumper;
my $CurrentFile = "";
my $EditFont = new Win32::GUI::Font (
-name => "Fixedsys",
-size => 12,
);
# Create Main Window
our $Window = new Win32::GUI::Window (
-name => "Window",
-title => "Notepad",
-pos => [100, 100],
-size => [400, 400],
-onResize => \&Notepad_OnSize,
) or die "new Window";
my $count = 0;
# Create Textfield for Edit Text
$Window->AddTextfield(
-name => "Edit",
-pos => [0, 0],
-size => [100, 100],
-multiline => 1,
-hscroll => 1,
-vscroll => 1,
-autohscroll => 1,
-autovscroll => 1,
-keepselection => 1 ,
-font => $EditFont,
-onKeyDown => sub {
my $key = $_[2];
$Window->{StatusBar}->SetText( 0, sprintf( "value = [%d], char
= [%c], count = [%d]", $key, $key, $count++ ) );
-1;
},
);
$Window->AddStatusBar(
-name => 'StatusBar',
);
# Set Focus to Edit and show Window
$Window->Edit->SetFocus();
$Window->Show();
Win32::GUI::Dialog();
#######################################################################
# Window Event
# Resize Window
sub Notepad_OnSize {
my ($self) = @_;
my ($width, $height) = ($self->GetClientRect())[2..3];
$self->Edit->Resize($width, $height-20) if exists $self->{Edit};
$self->StatusBar->Resize($width, $height) if exists $self->{StatusBar};
}
__END__