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

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

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

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

Q&A

解決済

1回答

421閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

MFC

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

0グッド

0クリップ

投稿2022/02/03 01:15

編集2022/02/05 13:25

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttact

2022/02/03 04:11

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

2022/02/03 04:29

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

退会済みユーザー

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

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

退会済みユーザー

2022/02/05 13:23

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

2022/02/07 01:22

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

2022/02/07 06:20

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

退会済みユーザー

2022/02/07 08:32

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

2022/02/08 01:00

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

退会済みユーザー

2022/02/09 10:53

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

回答1

0

ベストアンサー

未解決ですが、閉めます。
相談に乗ってくださった方々ありがとうございました!

投稿2022/02/09 10:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問