まえがき
この資料は、スクリーンセーバーを書くことを読者に奨励するものではありませんが、主にwxWidgetsライブラリの機能の一部を確認することを目的としています。 wxWidgetsに慣れていないが、もっと知りたい人は、CodeProject.comの記事を読むことができます( thisおよびthis )
脳は私たちが必要とするものです
そのため、wxWidgetsの作成方法と、このライブラリを使用したアプリケーションの作成方法については、すでに繰り返し作成しているので、すぐにサンプルから始めましょう。 まず、1つのフォームを持つ最小限のアプリケーションが必要です。 これは、スクリーンセーバーを作成するためのスケルトンになります。
今日も自転車を発明しませんが、マトリックスのようなシンボルを実行する最も単純なスクリーンセーバーを例として取り上げます。
画面に表示される主なオブジェクトには、シンボルがあります。 各キャラクターは、次のパラメーターによって特徴付けられます。
- 座標
- 表示値
- 走行速度
- 色
シンボルに関する情報を保存するには、次のクラスを作成します。
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
class MatrixSymbol { wxPoint m_Position; wxChar m_Symbol; int m_Speed; wxColour m_Colour; public : MatrixSymbol() : m_Position(wxDefaultPosition), m_Symbol(wxT( '0' )), m_Speed(1), m_Colour(*wxGREEN) {} MatrixSymbol( const wxPoint & position, wxChar symbol, int speed, const wxColour & colour) : m_Position(position), m_Symbol(symbol), m_Speed(speed), m_Colour(colour) {} const wxPoint & GetPosition() { return m_Position;} void SetPosition( const wxPoint & value ) {m_Position = value ;} wxChar GetSymbol() { return m_Symbol;} void SetSymbol(wxChar value ) {m_Symbol = value ;} int GetSpeed() { return m_Speed;} void SetSpeed( int value ) {m_Speed = value ;} const wxColour & GetColour() { return m_Colour;} void SetColour( const wxColour & value ) {m_Colour = value ;} }; * This source code was highlighted with Source Code Highlighter .
画面にはそのような文字がたくさんあるはずです。したがって、このすべてを保存するには配列が必要です。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- #include <wx / dynarray.h>
- ...
- WX_DECLARE_OBJARRAY(MatrixSymbol、MatrixSymbolArray);
- ...
- #include <wx / arrimpl.cpp>
- WX_DEFINE_OBJARRAY(MatrixSymbolArray);
グラフィカルインターフェイスをスカルプトする
さて、準備フェーズが終了しました。これで、グラフィカルインターフェイスの実装を開始できます。
wxWindow
から継承した新しいコンポーネントを作成し、
MatrixSymbol
オブジェクトの配列をクラスのメンバー変数として追加し、この配列を値で初期化するメソッドを追加します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- クラス MatrixCanvas: public wxWindow
- {
- ...
- void InitMatrix();
- ...
- MatrixSymbolArray m_Symbols;
- ...
- };
- void MatrixCanvas :: InitMatrix()
- {
- int幅(0)、高さ(0);
- int sw(0)、sh(0);
- GetTextExtent(wxT( "0" )、&sw、&sh);
- GetClientSize(&幅、&高さ);
- m_Symbols.Clear();
- for ( int x = 0; x <幅; x + = sw + 2)
- {
- m_Symbols.Add(MatrixSymbol(
- wxPoint(x、0)、
- rand()%2? wxT( '0' ):wxT( '1' )、
- 3 +ランド()%5、
- wxColour(0、rand()%200 + 56、0)));
- }
- }
InitMatrix()
メソッドは何をしますか? コンポーネントのクライアント領域のサイズに応じて、特定の数の
MatrixSymbol
オブジェクトが
MatrixSymbol
され、値「0」または「1」とさまざまな色でランダムな座標が表示されます(緑のランダムなグラデーションが選択されます)。
次に、画面にキャラクターを表示する必要があります。 これを行うには、イベントハンドラー
wxEVT_PAINT
および
wxEVT_ERASE_BACKGROUND
作成します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- BEGIN_EVENT_TABLE(MatrixCanvas、wxWindow)
- EVT_PAINT(MatrixCanvas :: OnPaint)
- EVT_ERASE_BACKGROUND(MatrixCanvas :: OnEraseBackground)
- END_EVENT_TABLE()
- void MatrixCanvas :: OnPaint(wxPaintEvent& event )
- {
- wxBufferedPaintDC dc( これ );
- dc.SetBackground(wxBrush(GetBackgroundColour()));
- dc.Clear();
- wxFontフォント= GetFont();
- #if定義済み(__ WXWINCE__)
- int fontSize = 14;
- #else
- int fontSize = 48;
- #endif
- font.SetPointSize(fontSize);
- dc.SetFont(フォント);
- dc.SetTextForeground(wxColour(00、20、00));
- dc.DrawLabel(wxT( "http://wxwidgets.info" )、
- wxRect(0、0、dc.GetSize()。GetWidth()、dc.GetSize()。GetHeight())、
- wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
- dc.SetFont(GetFont());
- for (size_t i = 0; i <m_Symbols.Count(); i ++)
- {
- dc.SetTextForeground(m_Symbols [i] .GetColour());
- dc.DrawText(wxString ::形式(wxT( "%c" )、m_Symbols [i] .GetSymbol())、
- m_Symbols [i] .GetPosition());
- }
- }
- void MatrixCanvas :: OnEraseBackground(wxEraseEvent& event )
- {
- }
イベントハンドラ
wxEVT_ERASE_BACKGROUND
空です(
event.Skip()
を呼び出さないで)。 これにより、ちらつきのないコンポーネントを再描画できます。
wxEVT_PAINT
イベント
wxEVT_PAINT
で、デバイスコンテキストを作成し、背景色をコンポーネントの背景色と同じに設定してからクリーンアップします(これは色で塗りつぶすのと同じです)。 その後、碑文がコンポーネントの中心に描かれ、ループ内で配列のすべての文字が描かれます。
次に、
wxEVT_SIZE
イベントハンドラを追加して、コンポーネントのサイズが変更されたときに文字が幅全体に表示されるようにする必要があります。 ハンドラーで、
InitMatrix()
メソッドを呼び出すだけで、配列に文字が入力されます。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- BEGIN_EVENT_TABLE(MatrixCanvas、wxWindow)
- ...
- EVT_SIZE(MatrixCanvas :: OnSize)
- END_EVENT_TABLE()
- ...
- void MatrixCanvas :: OnSize(wxSizeEvent& event )
- {
- InitMatrix();
- 更新();
- }
そのため、キャラクターの表示を達成しましたが、キャラクターを画面上で移動させる必要があります。 文字を画面上で移動できるようにするコードは、タイマーイベントハンドラーで実行するのが最適です。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- クラス MatrixCanvas: public wxWindow
- {
- ...
- wxTimer * m_MovementTimer;
- };
- MatrixCanvas :: MatrixCanvas(wxWindow *親、wxWindowID id、 const wxPoint&pos、 const wxSize&サイズ、 ロングスタイル)
- {
- Init();
- 作成(親、ID、位置、サイズ、スタイル);
- }
- bool MatrixCanvas :: Create(wxWindow * parent、wxWindowID id、 const wxPoint&pos、 const wxSize&size、 long style)
- {
- wxWindow :: Create(親、ID、位置、サイズ、スタイル);
- CreateControls();
- trueを 返し ます 。
- }
- MatrixCanvas ::〜MatrixCanvas()
- {
- wxDELETE(m_MovementTimer);
- }
- void MatrixCanvas :: Init()
- {
- m_PreviewMode = false ;
- }
- void MatrixCanvas :: CreateControls()
- {
- this-> SetForegroundColour(wxColour(0、255、0));
- this-> SetBackgroundColour(wxColour(0、0、0));
- int timerID = wxNewId();
- m_MovementTimer = new wxTimer( this 、timerID);
- 接続(timerID、wxEVT_TIMER、
- wxTimerEventHandler(MatrixCanvas :: OnMovementTimer));
- InitMatrix();
- 更新();
- m_MovementTimer->開始(30);
- }
- void MatrixCanvas :: OnMovementTimer(wxTimerEvent& event )
- {
- for (size_t i = 0; i <m_Symbols.Count(); i ++)
- {
- int y = m_Symbols [i] .GetPosition()。y + m_Symbols [i] .GetSpeed();
- if (y> GetClientSize()。GetHeight())
- {
- y = -20;
- m_Symbols [i] .SetSpeed(3 + rand()%5);
- m_Symbols [i] .SetColour(wxColour(0、rand()%200 + 56、0));
- m_Symbols [i] .SetSymbol(rand()%2?wxT( '0' ):wxT( '1' ));
- }
- m_Symbols [i] .SetPosition(wxPoint(
- m_Symbols [i] .GetPosition()。x、y));
- }
- 更新();
- }
ご覧のとおり、タイマーは
CreateControls()
メソッドで
CreateControls()
され、
Connect()
メソッドを使用してイベントハンドラーが割り当てられます。 デストラクタでは、タイマーが削除されます。
素晴らしい。 スクリーンセーバーは、通常モードとプレビューモードで機能します。 通常モードでは、ユーザーのアクション、つまりキーストローク、およびマウスクリックに対する応答を提供する必要があります。 これを行うには、
bool m_PreviewMode
クラス
bool m_PreviewMode
メンバー変数を作成し、その値に応じて、キーストロークとマウスクリックのイベントハンドラーで、アプリケーションのメインフォームを閉じます。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- void MatrixCanvas :: OnMouse(wxMouseEvent& event )
- {
- if ( event .LeftDown()|| event .MiddleDown()|| event .RightDown())
- {
- if (!m_PreviewMode)
- {
- wxFrame * frame = wxDynamicCast(wxTheApp-> GetTopWindow()、wxFrame);
- if (frame)frame-> Close();
- }
- }
- }
- void MatrixCanvas :: OnChar(wxKeyEvent& event )
- {
- if (!m_PreviewMode)
- {
- wxFrame * frame = wxDynamicCast(wxTheApp-> GetTopWindow()、wxFrame);
- if (frame)frame-> Close();
- }
- }
実際、この作業でコンポーネントの作業は完了しました。 次に、メインフォームに配置する必要があります。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- void MatrixEffectMainFrame :: CreateControls()
- {
- MatrixEffectMainFrame * itemFrame1 = this ;
- wxBoxSizer * itemBoxSizer2 = 新しい wxBoxSizer(wxVERTICAL);
- itemFrame1-> SetSizer(itemBoxSizer2);
- m_Canvas = new MatrixCanvas(itemFrame1、ID_CANVAS、wxDefaultPosition、wxSize(100、100)、wxNO_BORDER);
- itemBoxSizer2-> Add(m_Canvas、1、wxGROW、0);
- }
一般的にスーパー。 ここで、グラフィカルインターフェイスの作業を終了します。
コマンドラインオプションの処理
そのため、作業の中で最も興味深い部分、つまりコマンドラインパラメーターの処理が残っています。
Windowsスクリーンセーバーは、3つの異なるコマンドライン引数で実行できます。
- 「/ S」または「/ S」-スクリーンセーバーを直接起動する
- 「/ C:」-スクリーンセーバー設定ウィンドウを開きます。ここには、親ウィンドウのハンドルの数値表現があります。
「/ P:」-プレビューモードでスクリーンセーバーを開始します。ここで、親ウィンドウのハンドルの数値表現です。
コマンドライン引数を処理するために、wxWidgetsにwxCmdLineParser
が存在します。 それを使用します。
- bool wxMatrixEffectApp :: OnInit()
- {
- #if defined(__ WXMSW__)&&!defined(__ WXWINCE__)
- wxCmdLineParserパーサー(argc、argv);
- parser.AddSwitch(wxT( "S" )、wxEmptyString、
- wxEmptyString、wxCMD_LINE_PARAM_OPTIONAL);
- parser.AddSwitch(wxT( "s" )、wxEmptyString、
- wxEmptyString、wxCMD_LINE_PARAM_OPTIONAL);
- parser.AddOption(wxT( "c" )、wxEmptyString、
- wxEmptyString、wxCMD_LINE_VAL_NUMBER、wxCMD_LINE_PARAM_OPTIONAL);
- parser.AddOption(wxT( "p" )、wxEmptyString、
- wxEmptyString、wxCMD_LINE_VAL_NUMBER、wxCMD_LINE_PARAM_OPTIONAL);
- if (parser.Parse( false )== 0)
- {
- long parentHWND(0);
- if (parser.Found(wxT( "S" ))|| parser.Found(wxT( "S" )))
- {
- MatrixEffectMainFrame * mainWindow =
- 新しい MatrixEffectMainFrame(NULL);
- mainWindow-> ShowFullScreen( true );
- trueを 返し ます 。
- }
- else if (parser.Found(wxT( "c" )))
- {
- wxMessageBox(
- _( 「このスクリーンセーバーの設定はありません。詳細については、wxwidgets.infoにアクセスしてください」 );
- falseを 返し ます 。
- }
- else if (parser.Found(wxT( "p" )、&parentHWND))
- {
- wxWindow * parent = new wxWindow;
- parent-> SetHWND((HWND)parentHWND);
- RECT r;
- GetWindowRect((HWND)parent-> GetHWND()、&r);
- MatrixCanvas * mainWindow = new MatrixCanvas(
- 親、ID_MATRIXEFFECTMAINFRAME、
- wxPoint(0,0)、wxSize(r.right-r.left、r.bottom-r.top)、
- wxNO_BORDER);
- mainWindow-> SetPreviewMode( true );
- SetTopWindow(mainWindow);
- mainWindow-> Show( true );
- trueを 返し ます 。
- }
- }
- falseを 返し ます 。
- #else
- MatrixEffectMainFrame * mainWindow =
- 新しい MatrixEffectMainFrame(NULL);
- SetTopWindow(mainWindow);
- #if定義済み(__ WXWINCE__)
- mainWindow-> Show( true );
- #else
- mainWindow-> ShowFullScreen( true );
- #endif
- trueを 返し ます 。
- #endif
- }
コードからわかるように、アプリケーションクラスのOnInit()
メソッドで、wxCmdLineParser
オブジェクトを作成し、すべての可能なパラメーターの説明を追加します。
- AddSwitch()メソッドは、追加のパラメーターなしで、コマンドラインに/ <argument>または-<argument>の形式の引数を含めることができることを示します。
- AddOption()メソッドは、コマンドラインに/ <argument> = <value>または-=または/ <argument>:<value>という形式の引数を含めることができることを示します。 値(文字列、数値、日付)を含むコマンドラインパラメーター。
wxCmdLineParser
オブジェクトをセットアップした後、Parse()
メソッドが呼び出され、コマンドラインが指定された設定と一致するかどうwxCmdLineParser
がチェックされます。
次に、パラメーターの可用性を確認します。
- 「/ s」または「/ S」パラメータを使用してプログラムを起動すると、アプリケーションのメインウィンドウが表示されます。
- 「/ c」パラメータを使用してプログラムを起動すると、スクリーンセーバーに設定が不要であることを示すメッセージボックスが表示されます。
- 「/ p」パラメーターでプログラムを開始すると、親ウィンドウのハンドルが抽出され、そこからwxWindowオブジェクトが作成され、メインアプリケーションウィンドウの代わりに、親ウィンドウにあるMatrixCanvasコンポーネントが作成されます。
もう一度、ウィンドウハンドルからwxWindow
を作成するコードを見てください。
wxWindow * parent = new wxWindow;
parent->SetHWND((HWND)parentHWND);
これは実際には非常に便利なトリックであり、wxWidgetsアプリケーションと他のライブラリを使用して作成されたアプリケーションとのやり取りに使用できます。
まあ、それがすべてです。 その結果、次のような結果が得られます。
記事のPDFバージョン
サンプルソースコード、Win32およびWindows Mobileのプロジェクト、Win32の実行可能ファイル 。