CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

【C#プログラミング】pictureBoxとBitmapで画面ズームと画面移動機能を実装したい

投稿日:2020年3月29日 更新日:

PDFアレコレでPDFを描画するために利用しているのがpictureBox。とっても便利なクラスで、PDFiumのでRenderした結果であるImageを渡すだけで済んでいる。こんな感じで。。

pictureBox1.Image = m_pdfDoc.Render(page, width, height, 100, 100, false);

m_pdfDoc.Renderの結果がpdfの指定ページの用紙全体なので、ページ全体の描画ができている。やりたいのはそれを拡大縮小すること。中ボタンのスクロールで拡大縮小、中ボタンドラッグで画面移動。1ページ分を1枚の図面と考えて、好きなところを拡大縮小したいという要求だ。中ボタンスクロールがページ移動とかぶるので、拡大縮小はCtrlを押した場合の動作とするべきだ。

あれこれググってただりついたのが以下サイト。
ピクチャボックスの画像をクリックして拡大、縮小表示できるようにする
これでよくわからないのは、Bitmapクラスを使っていること。pictureBox.ImageとBitmapは似たようなクラスであることはわかるんだけど、pictureBoxのPaintイベントでDrawImageしている点がよく理解できない。拡大縮小と画面移動をするのだから、拡大率と描画基準の座標を保持する必要がある。

以下の記事にヒントがあったが、VBで書かれていることと最終的にこうしたらうまくいったという形がはっきりしていないので、よくわからなかった。
PictureBoxに表示されている画像を拡大/縮小したい

午前中あれこれと試してみて答にたどり着けなかったのでいったんペンディング。PDFの好きな場所を、マウス中ボタン操作で拡大・縮小・移動させて、その場所に捺印したいのだ。こればっかりやっていると時間ばかりとられて成果が何も残せないので、今日のところは調査の途中経過を記して終わる。

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

Windowsアプリで引数を受け取る(改)

MFCを使ったWindowsアプリの実装に関する話。 CWinAppを継承したクラスでは、m_lpCmdLineで起動時のパラメータを取得できる。そのパラメータは1個の文字列だが、半角スペースで区切ら …

若いもんにC++を教えてやって、これまでやってきたことが少しでも伝わってくれればと願う夜

ファイルをセレクトするというC++で作ったActiveXのDLLのデバッグができないかと彼がおいらのところに来た時点で、そいつはなかなかチカラがあるなと感じた。

zipcopyが設計上まちがっていることを書いたがホントにそうかを調べてみた

以下にzipcopy Ver1.07開発中に気付いたことを転記する。 いろいろ直していて気付いたんだけど、そもそものところでこのソフトの設計思想があやまっていた。 ネットワーク上のサーバーにあるファイ …

no image

コンピュータの日付

痛い目にあった記録。 無料試用期間30日間、そんなソフトを開発している。 動作確認するために、コンピュータの日付を変更する。 日付を数日後に変更して「残り27日です」とちゃんと出るか。 もっと先の日付 …

no image

環境変数TEMPトラブルについて振り返る

プログラムから環境変数TEMPで指定されたフォルダにファイルが作れないことがわかった時点で、この問題は解決したも同じだった。TEMPの値を「%USERPROFILE%\AppData\Local\Te …