1

したがって、wxPanel から継承したクラス MyPanel があります。

 class MyPanel : public wxPanel
 {
       public:
          MyPanel(wxWindow* parent) : wxPanel(parent){}
          void OnMouseMove(wxMouseEvent& event);
       private:
          DECLAER_EVENT_TABLE()
  };

そして、以下に定義された別のメイン wxframe:

 class mainFrame : public wxFrame
 {
       ...
       private:
          ...
          MyPanel* myPanel;
          ...
          wxStaticText* StaticText1;
          ...
 };

StaticText1 は最終的に myPanel の子として割り当てられます。だから私はメソッド OnMouseMove() でマウスカーソルの座標を更新したい

StaticText1 にアクセスして更新する方法を知りたいです。

4

3 に答える 3

1

次のように、friend 宣言を使用します。

class mainFrame : public wxFrame
{
  friend class MyPanel;
  ...
};
于 2012-07-29T19:36:47.427 に答える
0

プログラミングの観点からは、フレンドソリューションを使用できます。ただし、論理的には、wxStaticText * StaticText1がMyPanelによって親になり、主にMyPanelのメンバー関数の1つから参照/更新される場合。次に、wxStaticTextは、理想的にはmainFrameではなくMyPanelで宣言および定義する必要があります。

于 2012-07-30T16:10:33.980 に答える
0

MyPanel でメンバーを定義し、必要に応じて StaticText1 を割り当てることができます。OnMouseMove チェックで、StaticText1 が NULL かどうか。

 class MyPanel : public wxPanel
  {
        public:
           MyPanel(wxWindow* parent) : wxPanel(parent){}
           void OnMouseMove(wxMouseEvent& event) { if (StaticText1) { /* do something */ } ;
           void SetStaticText1(wxStaticText* txt) { StaticText1 = txt;}
        private:
           DECLAER_EVENT_TABLE()
           wxStaticText* StaticText1;

   };
于 2012-07-29T19:35:31.203 に答える