0

ユーザーがマウスを押したまま移動したときに画像をパンできるアプリケーションを C++ で作成したいと思います。Panel を使用し、その上に pictureBox を配置しました。Panel のプロパティ AutoScroll が true に設定されています。マウスの移動時にスクロールバーの位置を変更しようとしています。いくつかの方法を試しましたが、うまくいきません。

簡単にするために、ここではコードに +/-100、+/-100 を使用します。私は試した

Point p = new Point(100, 100);
panel1->AutoScrollPosition = p;

次のエラーが表示されます。

'System::Drawing::Point *' から 'System::Drawing::Point' に変換できません"

私も次のことを試しました。

panel1->AutoScrollPosition.X = 100;
panel1->AutoScrollPosition.Y = 100;

ただし、スクロールバーは動かず、常に 0,0 を返します。-ve と +ve の両方の値を使用してみましたが、うまくいきません。

どうすればこの問題を解決できますか?

4

1 に答える 1

2

System :: Drawing :: Pointは構造体であり、クラスではありません。構造体は値型であり、新しい演算子は必要ありません。私はコンパイラーではありませんが、これがあなたが望む構文だと思います:

Point p(100, 100);
panel1->AutoScrollPosition = p;

(また、Pointは管理対象タイプであるため、gcnewはるかに適切です。new機能しますが、非常に非標準であり、そのタイプのパラメーターを受け入れるAPIはありません。)

あなたが試した他のこと:

panel1->AutoScrollPosition.X = 100;
panel1->AutoScrollPosition.Y = 100;

Pointは構造体であるため、これは機能しません。AutoScrollPosition構造体のコピーを返します。これを変更しました。これを試みると、C#はコンパイラに警告を出します。ポイントの1つのコンポーネントを変更する必要がある場合は、次のようにする必要があります(これは、C ++ / CLIとC#の両方に適用されます)。

Point p = panel1->AutoScrollPosition;
p.X = 100;
panel1->AutoScrollPosition = p;
于 2013-03-16T12:35:14.147 に答える