wxWidgetsでスクリーンセーバーを書く

まえがき



この資料は、スクリーンセーバーを書くことを読者に奨励するものではありませんが、主に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 .



  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 .



  2. 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 .



  3. 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 .



  4. 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 .



  5. 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 .



  6. 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 .



  7. 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 .



  8. 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 .



  9. 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 .



  10. 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 .



  11. 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 .



  12. 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 .



  13. 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 .



  14. 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 .



  15. 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 .



  16. 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 .



  17. 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 .



  18. 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 .



  19. 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 .



  20. 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 .



  21. 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 .



  22. 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 .



  23. 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 .





画面にはそのような文字がたくさんあるはずです。したがって、このすべてを保存するには配列が必要です。





  1. #include <wx / dynarray.h>
  2. ...
  3. WX_DECLARE_OBJARRAY(MatrixSymbol、MatrixSymbolArray);
  4. ...
  5. #include <wx / arrimpl.cpp>
  6. WX_DEFINE_OBJARRAY(MatrixSymbolArray);
*このソースコードは、 ソースコードハイライターで強調表示されました。


グラフィカルインターフェイスをスカルプトする



さて、準備フェーズが終了しました。これで、グラフィカルインターフェイスの実装を開始できます。

wxWindow



から継承した新しいコンポーネントを作成し、 MatrixSymbol



オブジェクトの配列をクラスのメンバー変数として追加し、この配列を値で初期化するメソッドを追加します。





  1. クラス MatrixCanvas: public wxWindow
  2. {
  3. ...
  4. void InitMatrix();
  5. ...
  6. MatrixSymbolArray m_Symbols;
  7. ...
  8. };
  9. void MatrixCanvas :: InitMatrix()
  10. {
  11. int幅(0)、高さ(0);
  12. int sw(0)、sh(0);
  13. GetTextExtent(wxT( "0" )、&sw、&sh);
  14. GetClientSize(&幅、&高さ);
  15. m_Symbols.Clear();
  16. forint x = 0; x <幅; x + = sw + 2)
  17. {
  18. m_Symbols.Add(MatrixSymbol(
  19. wxPoint(x、0)、
  20. rand()%2? wxT( '0' ):wxT( '1' )、
  21. 3 +ランド()%5、
  22. wxColour(0、rand()%200 + 56、0)));
  23. }
  24. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


InitMatrix()



メソッドは何をしますか? コンポーネントのクライアント領域のサイズに応じて、特定の数のMatrixSymbol



オブジェクトがMatrixSymbol



され、値「0」または「1」とさまざまな色でランダムな座標が表示されます(緑のランダムなグラデーションが選択されます)。

次に、画面にキャラクターを表示する必要があります。 これを行うには、イベントハンドラーwxEVT_PAINT



およびwxEVT_ERASE_BACKGROUND



作成します。





  1. BEGIN_EVENT_TABLE(MatrixCanvas、wxWindow)
  2. EVT_PAINT(MatrixCanvas :: OnPaint)
  3. EVT_ERASE_BACKGROUND(MatrixCanvas :: OnEraseBackground)
  4. END_EVENT_TABLE()
  5. void MatrixCanvas :: OnPaint(wxPaintEvent& event
  6. {
  7. wxBufferedPaintDC dc( これ );
  8. dc.SetBackground(wxBrush(GetBackgroundColour()));
  9. dc.Clear();
  10. wxFontフォント= GetFont();
  11. #if定義済み(__ WXWINCE__)
  12. int fontSize = 14;
  13. #else
  14. int fontSize = 48;
  15. #endif
  16. font.SetPointSize(fontSize);
  17. dc.SetFont(フォント);
  18. dc.SetTextForeground(wxColour(00、20、00));
  19. dc.DrawLabel(wxT( "http://wxwidgets.info" )、
  20. wxRect(0、0、dc.GetSize()。GetWidth()、dc.GetSize()。GetHeight())、
  21. wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
  22. dc.SetFont(GetFont());
  23. for (size_t i = 0; i <m_Symbols.Count(); i ++)
  24. {
  25. dc.SetTextForeground(m_Symbols [i] .GetColour());
  26. dc.DrawText(wxString ::形式(wxT( "%c" )、m_Symbols [i] .GetSymbol())、
  27. m_Symbols [i] .GetPosition());
  28. }
  29. }
  30. void MatrixCanvas :: OnEraseBackground(wxEraseEvent& event
  31. {
  32. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


イベントハンドラwxEVT_ERASE_BACKGROUND



空です( event.Skip()



を呼び出さないで)。 これにより、ちらつきのないコンポーネントを再描画できます。

wxEVT_PAINT



イベントwxEVT_PAINT



で、デバイスコンテキストを作成し、背景色をコンポーネントの背景色と同じに設定してからクリーンアップします(これは色で塗りつぶすのと同じです)。 その後、碑文がコンポーネントの中心に描かれ、ループ内で配列のすべての文字が描かれます。

次に、 wxEVT_SIZE



イベントハンドラを追加して、コンポーネントのサイズが変更されたときに文字が幅全体に表示されるようにする必要があります。 ハンドラーで、 InitMatrix()



メソッドを呼び出すだけで、配列に文字が入力されます。





  1. BEGIN_EVENT_TABLE(MatrixCanvas、wxWindow)
  2. ...
  3. EVT_SIZE(MatrixCanvas :: OnSize)
  4. END_EVENT_TABLE()
  5. ...
  6. void MatrixCanvas :: OnSize(wxSizeEvent& event
  7. {
  8. InitMatrix();
  9. 更新();
  10. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


そのため、キャラクターの表示を達成しましたが、キャラクターを画面上で移動させる必要があります。 文字を画面上で移動できるようにするコードは、タイマーイベントハンドラーで実行するのが最適です。





  1. クラス MatrixCanvas: public wxWindow
  2. {
  3. ...
  4. wxTimer * m_MovementTimer;
  5. };
  6. MatrixCanvas :: MatrixCanvas(wxWindow *親、wxWindowID id、 const wxPoint&pos、 const wxSize&サイズ、 ロングスタイル)
  7. {
  8. Init();
  9. 作成(親、ID、位置、サイズ、スタイル);
  10. }
  11. bool MatrixCanvas :: Create(wxWindow * parent、wxWindowID id、 const wxPoint&pos、 const wxSize&size、 long style)
  12. {
  13. wxWindow :: Create(親、ID、位置、サイズ、スタイル);
  14. CreateControls();
  15. trueを 返し ます
  16. }
  17. MatrixCanvas ::〜MatrixCanvas()
  18. {
  19. wxDELETE(m_MovementTimer);
  20. }
  21. void MatrixCanvas :: Init()
  22. {
  23. m_PreviewMode = false ;
  24. }
  25. void MatrixCanvas :: CreateControls()
  26. {
  27. this-> SetForegroundColour(wxColour(0、255、0));
  28. this-> SetBackgroundColour(wxColour(0、0、0));
  29. int timerID = wxNewId();
  30. m_MovementTimer = new wxTimer( this 、timerID);
  31. 接続(timerID、wxEVT_TIMER、
  32. wxTimerEventHandler(MatrixCanvas :: OnMovementTimer));
  33. InitMatrix();
  34. 更新();
  35. m_MovementTimer->開始(30);
  36. }
  37. void MatrixCanvas :: OnMovementTimer(wxTimerEvent& event
  38. {
  39. for (size_t i = 0; i <m_Symbols.Count(); i ++)
  40. {
  41. int y = m_Symbols [i] .GetPosition()。y + m_Symbols [i] .GetSpeed();
  42. if (y> GetClientSize()。GetHeight())
  43. {
  44. y = -20;
  45. m_Symbols [i] .SetSpeed(3 + rand()%5);
  46. m_Symbols [i] .SetColour(wxColour(0、rand()%200 + 56、0));
  47. m_Symbols [i] .SetSymbol(rand()%2?wxT( '0' ):wxT( '1' ));
  48. }
  49. m_Symbols [i] .SetPosition(wxPoint(
  50. m_Symbols [i] .GetPosition()。x、y));
  51. }
  52. 更新();
  53. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


ご覧のとおり、タイマーはCreateControls()



メソッドでCreateControls()



され、 Connect()



メソッドを使用してイベントハンドラーが割り当てられます。 デストラクタでは、タイマーが削除されます。

素晴らしい。 スクリーンセーバーは、通常モードとプレビューモードで機能します。 通常モードでは、ユーザーのアクション、つまりキーストローク、およびマウスクリックに対する応答を提供する必要があります。 これを行うには、 bool m_PreviewMode



クラスbool m_PreviewMode



メンバー変数を作成し、その値に応じて、キーストロークとマウスクリックのイベントハンドラーで、アプリケーションのメインフォームを閉じます。





  1. void MatrixCanvas :: OnMouse(wxMouseEvent& event
  2. {
  3. ifevent .LeftDown()|| event .MiddleDown()|| event .RightDown())
  4. {
  5. if (!m_PreviewMode)
  6. {
  7. wxFrame * frame = wxDynamicCast(wxTheApp-> GetTopWindow()、wxFrame);
  8. if (frame)frame-> Close();
  9. }
  10. }
  11. }
  12. void MatrixCanvas :: OnChar(wxKeyEvent& event
  13. {
  14. if (!m_PreviewMode)
  15. {
  16. wxFrame * frame = wxDynamicCast(wxTheApp-> GetTopWindow()、wxFrame);
  17. if (frame)frame-> Close();
  18. }
  19. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


実際、この作業でコンポーネントの作業は完了しました。 次に、メインフォームに配置する必要があります。





  1. void MatrixEffectMainFrame :: CreateControls()
  2. {
  3. MatrixEffectMainFrame * itemFrame1 = this ;
  4. wxBoxSizer * itemBoxSizer2 = 新しい wxBoxSizer(wxVERTICAL);
  5. itemFrame1-> SetSizer(itemBoxSizer2);
  6. m_Canvas = new MatrixCanvas(itemFrame1、ID_CANVAS、wxDefaultPosition、wxSize(100、100)、wxNO_BORDER);
  7. itemBoxSizer2-> Add(m_Canvas、1、wxGROW、0);
  8. }
*このソースコードは、 ソースコードハイライターで強調表示されました。


一般的にスーパー。 ここで、グラフィカルインターフェイスの作業を終了します。





コマンドラインオプションの処理



そのため、作業の中で最も興味深い部分、つまりコマンドラインパラメーターの処理が残っています。

Windowsスクリーンセーバーは、3つの異なるコマンドライン引数で実行できます。




All Articles