2010-01-21 5 views
3

나는 wxMenuBar, wxPanel, wxTextCtrl 및 wxStaticBitmap 만 포함하는 간단한 프레임을 제공하는 wxPerl 응용 프로그램을 만들었습니다. 개발 및 배포 플랫폼은 Windows XP 이상입니다.Windows 바로 가기에서 프로그램을 실행할 때 왜 wxPerl이 wxStaticBitmap을 그리지 않습니까?

이미지는 다음과 같이 양식에 추가 : 나 이미지를 표시 아무런 문제가 없었습니다

my $logoData = Wx::Bitmap->new(App::Resource::Images::getLogoPath(), wxBITMAP_TYPE_BMP); 
my $logo = Wx::StaticBitmap->new($self, -1, $logoData); 

. 필자는 Inno Setup으로 사용자 데스크탑에 아이콘을 추가하는 설치 프로그램을 만들었습니다. 해당 바로 가기를 사용하여 응용 프로그램을 시작하면 창에서 내 wxStaticBitmap을 그릴 수 없습니다. 애플리케이션이 포커스를 잃고 다른 윈도우가 그 위로 이동하는 경우에만, 그러면 wxStaticBitmap이 그려집니다.

시작 메뉴, 빠른 시작 또는 wxpar을 사용하여 컴파일 한 직후에 응용 프로그램을 시작하거나 perl 인터페터 만 있으면 wxStaticBitmap을 정상적으로 표시합니다.

내 wxFrame에서 Refresh()Update()을 호출하는 것만이 발견되었습니다. 이 wxFrame을 만든 후 Show(1)이라고 말하고 바로 그 다음에 Refresh()Update()을 호출합니다. 그러나 지금까지는 운이 없었습니다.

+0

바로 가기에 첨부 된 작업 디렉토리는 무엇입니까? getLogoPath()는 절대 또는 상대입니까? – fennec

+0

getLogoPath()는 실제로 임시 파일을 만들고 절대 값입니다. 나는 File :: Temp를 사용한다. 이미지로드는 문제가되지 않습니다. 일단 무언가가 프레임이 다시 그려지기 시작하면 모든 것이 잘되기 때문입니다. – Htbaa

+0

또한 Wx :: Frame 파생 클래스의 생성자에 비트 맵을 추가해야합니다. 패널, textcontrols 등처럼. – Htbaa

답변

1

wxStaticBitmap은 wxWindow에서 파생되므로 Update 및 UpdateWindowUI 메서드를 모두 포함합니다. 그것을 만든 직후 $ 로고에있는 사람들 중 한 명에게 전화하면 어떻게됩니까?

편집 : 방금 시도했지만 Update * 방법이 도움이되지 않습니다. 그러나 어떤 을 수행합니까? 강제로 다시 그리려면 개체를 만든 후 SetBitmap을 호출해야합니다.

my $bmp = Wx::Bitmap->new("./testcard.bmp", wxBITMAP_TYPE_BMP); 
my $logo = Wx::StaticBitmap->new($frame, wxID_ANY, $bmp); 
$logo->SetBitmap($bmp); 

$frameWx::Frame, 그리고 난 그냥 풀칠하고 이벤트 핸들러 콜백에서 위의 코드에서 버튼을 넣어 : 여기에 내가 무슨 짓을했는지.

+0

이 이벤트에 넣을 때 도움이 될 것 같습니다. 그러나 개체를 만든 직후에는 차이가 나는 것 같지 않습니다. 응용 프로그램이 시작될 때 초점이 사라지고 반환 된 것처럼 보입니다. 이 메서드를 호출하는 이벤트를 자동으로 내보낼 수 있습니까? 어쩌면 1 초에 한두 번 정도? – Htbaa

+0

나는 wxWidgets에서 꽤 새로운 것을 알고있다. 나는 당신 자신의 사건을 스스로 만들어 낼 수 있는지 알아 내려고 노력해 왔습니다. 그러나 그리기에 관해서는, 비트 맵 그리기를 다르게 처리 할 수있는 wxDC (및 :: DrawBitmap)를 살펴볼 수 있습니다. – Anonymous

+0

FWIW, 타이머는 다음과 같이 작동합니다 :'my $ timer = Wx :: Timer-> new ($ logo); EVT_TIMER ($ logo, $ timer, sub {$ logo-> SetBitmap ($ bmp);});'하지만 여러 가지 방법으로 그 나쁜 형식이 가능할 수 있습니다. – Anonymous