質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

解決済

コントロールを任意のデバイスコンテキストに表示

4567sky
4567sky

総合スコア82

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

1回答

0リアクション

0クリップ

297閲覧

投稿2022/02/03 01:15

編集2022/02/05 13:25

CEdit などのコントロールを任意のデバイスコンテキストに配置することはできるのでしょうか?
Visual studio C++です。

キーワードが悪いのかなかなか見つかりません。

何をしたいのかというと、画像をマウスで拡大縮小できるようにしたのですが、そこにテキストボックスを表示させたくて、しかも、入力できて、画面同様に拡大縮小もさせたかったのです。
イメージとしてはExcelのテキストボックスのような、動かせる入力テキストボックスを作成する感じです。
それで、すでに拡大縮小できている画像の上に描画すればできるのではないかと思いまして。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

ttact

2022/02/03 04:11

「描画」という単語は、プログラミング用語的には「絵を描く」ことを示します。マウスやキーボードの入力に関することや、それによって処理できる機能、プログラム上のデータオブジェクトとのデータ交換などは、「描画」には含まれません。 質問者様がやりたいことは、コントロールを「描画」することではなく、ウィンドウ上のある特定の場所にコントロールを動的に「配置」することなのではないでしょうか。 やりたいことが「配置」ではないのであれば、もう少し質問の文章でやりたいことを補足すると、回答が付きやすいのではないかと思います。
fana

2022/02/03 04:29

> 任意のデバイスコンテキストに という記述になってることから,やりたいことはまさに「描画(だけ)」なのだろうと思うけど, もう少し話の補足があった方が良さそうだというのは同意.
4567sky

2022/02/03 11:48

アドバイスありがとうございます。 やりたいことは描画じゃなくて配置でした。 もう少し整理して追記させていただきます
ttact

2022/02/03 22:30

「デバイスコンテキスト」は、確かに描画のためのものであって、コントロールそのものの配置に直接影響したりはしません。ただし、コントロールの描画には影響します。 https://docs.microsoft.com/ja-jp/cpp/mfc/device-contexts?view=msvc-170 「デバイスコンテキストは、ディスプレイやプリンターなどのデバイスの描画属性に関する情報を含む Windows データ構造体です。」 Windowsの内部においては、コントロールは"ウィンドウオブジェクト"の一種です。対象のコントロールを子ウィンドウとして生成することで、親ウィンドウ上に配置できます。Microsoft docsのCreateWindowExW()の引数説明におけるhWndParentを参照してください。 https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowexw とてもご面倒に感じるでしょうが、Windowsプログラミングをイチから学習したほうが、結局は最短距離であると思います。猫プラのWindows SDK編をお勧めしておきます。 http://www.kumei.ne.jp/c_lang/index_sdk.html
fana

2022/02/04 01:26

「配置」の話だった! これは感服. --- 「任意の」とか書かれると,読み手は 「自分のプログラムで作ってるウィンドウの上にエディットボックスを追加したい」みたいな単純な話なのか否か…? とかなるので,「任意」が指す範囲を明確に述べると良いかも.
4567sky

2022/02/05 13:23

ありがとうございます。 おっしゃる通り、いまいち理解が足りていいない感じがします。 SDK編読んでみます! 何をしたかったというと、まずアプリ内の画像をマウスで拡大縮小できるようにしたのですが、そこにテキストボックスを表示させたくて、しかも、入力できて、画面同様に拡大縮小もさせたかったのです。 イメージとしてはExcelのテキストボックスのような、動かせる入力テキストボックスを作成する感じです。 それで、すでに拡大縮小できている画像の上に描画すればできるのではないかと愚考した次第です。 もうCEditはCEditで拡大縮小するしかないかなと思っております・・・
fana

2022/02/07 01:22

GUIも拡大縮小する… 一度等倍で描画した結果をキャプチャしてそれを拡大縮小して表示…みたいな方向性は無いのでしょうか?
ttact

2022/02/07 06:20

画像を拡大縮小したとき、テキストボックス自体も大きさやフォントが拡大縮小することを期待していますか? それとも、画像のある座標に連動してテキストボックスが移動することだけを期待していますか? > CEditはCEditで拡大縮小するしかないかなと思っております をからはエディットボックス自体の大きさも変化させたいように読めますが、念のため確認します。
4567sky

2022/02/07 08:32

はい、そうです、エディットボックス自体のサイズも拡大縮小で変化させたいのです。 Excelのテキストボックスのように。
ttact

2022/02/08 01:00

CWnd::SetWindowPos()を使うと、ウィンドウの位置と大きさを一度に変更できます。コントロールのZオーダーもSetWindowPos()で調整できますので、必要に応じて調整すればよいでしょう。 エディットボックスを拡大縮小したときにフォントの大きさも変更したい場合は、CWnd::SetFont()を使います。 画像の拡縮は、自前でマウスイベントのハンドラ内で実装していますか?そうであればそのマウスイベントハンドラ内に上記をうまいこと追加すればよいでしょう。そうではなくて外部コンポーネントを利用されている場合は、そちらのマニュアルを読むなりベンダーに問い合わせる必要があります。 MFCはしんどいですね。。。
4567sky

2022/02/09 10:53

ありがとうございます。 かなり難しいということが分かったので 助かりました。 とりあえず,自分でできる技術内でやってみます。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。