問題タブ [cdialog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - CDialog クラスの使用時に発生しない CDialogEx クラスの使用に関する問題
1.- こんにちは。今週ずっと多くのサイトやフォーラムを検索した後、私が抱えていた問題のポイントを見つけました。問題は、Visual C++ で新しい MFC プロジェクトを作成するときに、アプリケーションの種類を「ダイアログ ベース」に設定し、それぞれのダイアログ クラスを既定の CDialogEx から派生させると、変更せずにプログラムをすぐにコンパイルして実行するという問題が発生することです。コードのいずれか (あなたのマシンでこれを試すことができるかどうかはわかりません)。
2.-有線の動作は、ダイアログウィンドウがアクティブな状態で、タスクバーの空き領域をクリックすると(最大化されていない別のウィンドウでも)、ダイアログのウィンドウの境界線(タイトルバーを含む)ベースのアプリケーションは「フォーカスされた」(灰色ではない) ままで、タスク バーまたはアプリケーション ウィンドウを完全にカバーしていない別のウィンドウをクリックすると、アプリケーション ウィンドウはフォーカスを失うはずです。
3.-多くのコードの後でこれに気付きました.CFileDialogクラスを使用してこの動作を発見したためです.CFileDialogインスタンスを作成(DoModal)すると、ファイルダイアログが開いたときにアプリケーションウィンドウがフォーカスを失います(「灰色になる」ため) (そうあるべきです)しかし、ファイルダイアログが終了すると、ウィンドウの境界線は灰色のままになり(これは正しくありません)、ウィンドウを最小化して復元するか、別のウィンドウに切り替えてウィンドウに戻るまでそのままです.
4.- CDialogEx クラスからの継承に問題があることを発見しました。これは、(段落 1 で説明したように) 新しいプロジェクトを最初から作成したためであり、プログラムの動作を誤ったものを変更したのが私であるかどうかを確認するためでした。パラグラフ 2 で説明したように、新しいプロジェクトが動作することがわかりました。
5.-良いニュースは、新しいプロジェクトを作成しようとしたことですが、今回は CDialogEx ではなく CDialog から継承しています。そして驚いたことに、この新しいプログラムは正しく動作します。つまり、段落 2 で説明した有線の動作は、この新しいプロジェクトには存在しません。段落 3 で説明したように、別の問題はファイル ダイアログ (CFileDialog クラス) に関するものでした。幸いなことに、私のプロジェクトのコードを CDialogEx ではなく CDialog から継承するように変更することで、この問題も解決しました。つまり、問題は CDialogEx クラスでした。
6.-私はこの質問を書き、私が発見した情報を提供することにしました. フォーラムで提供されたすべてのアドバイスを試しましたが、何もうまくいきませんでした。
7.-私が言ったように、1 つの解決策は継承を CDialogEx から CDialog に変更することです。しかし、私の質問は、私のプログラムが CDialogEx クラスの下で正しく動作するようにするために何をすべきか知っているかどうかです。なぜなら、私は古いインターフェースではなく新しいインターフェースを使用することを好むからです。また、あなたのビジュアル スタジオで私と同じ問題を実験しているかどうかも知りたいです。
私の情報とあなたの回答が他の人に役立つことを願っています。回答ありがとうございます。
mfc - CDialog::Create が ActiveX コントロールを含むダイアログで失敗する
ActiveX コントロールを含むモードレス ダイアログを作成するモジュールがあります。このモジュールは MFC EXE アプリケーションの一部であり、ダイアログの作成は正常に機能しました。最近、モジュールを ATL/COM サーバーに移動し、ダイアログ リソースを EXE から COM サーバーにコピーしました。モードレス ダイアログを使用して作成しようとするとCDialog::Create()
、エラーが発生します。
デバッグして、 which returnsとreturnsCDialog::Create
で失敗することに気付きました。ダイアログ リソースのプロパティで "No Fail Create" フラグを True に変更したところ、エラーの詳細が表示されました。この問題は、マクロ内のダイアログで発生します。これは、次のようにコントロールのリソース ID を使用して を呼び出します。::CreateDialogIndirect()
NULL
GetLastError
0
DoDataExchange()
DDX_Control
CDataExchange::PrepareCtrl()
m_pDlgWnd->GetOleControlSite()
渡されたリソース ID に対する関数の呼び出しは失敗します。ちなみに、リソース ID はコントロールの ID です。
これがEXE内で機能し、COMサーバーで失敗する理由について何か提案はありますか?
mfc - モーダルダイアログを誤って表示するMFCDLLを含むVB6ホスト
MFCDLLを介して拡張機能を提供したVB6アプリケーションがあります。ただし、DLLのCDialogベースのクラスには特定の問題があります。Me.hWnd
VB6アプリのメインフォームから渡して、CDialogコンストラクターに渡し、そのDoModal()
親が何であるかを認識します。CDialogベースのクラスは上のVB6アプリの上にとどまりますが、モーダルダイアログで期待される方法でVB6アプリをブロックDoModal()
しません。つまり、DLLダイアログがEXEのウィンドウの前に残っている間も、DLLを呼び出したボタンをクリックして、ダイアログをもう一度(そして何度も)表示することができます。
VB6コードから示すことはあまりありません。私が言ったように、それはただ通過しMe.hWnd
ます。MFCコードは非常に単純です。
途中で値をトレースし、Spy++でウィンドウハンドルを確認しました。すべてが順調のようです。私が見逃している、または間違っているアイデアはありますか?
追加情報
そのhwnd値は、MessageBoxの他の場所で使用され、期待どおりに機能します。
visual-c++ - VC ++のCDialogでフィールドの焦点をぼかす方法はありますか?
VC ++のCDialogプロジェクトを使用してダイアログを作成すると、このダイアログ(CDialog)のどのフィールドにも焦点がぼけません。私がやりたいのは、このフィールドの外側をマウスでクリックしたときに、どのようにフィールドの焦点をぼかすことができるかということです。
アドバイスやコメントをありがとう。
c++ - CWnd::GetParent で例外が発生する
CWnd クラスの関数 GetParent() を呼び出そうとしています。例外がスローされるたびに。作業中のスレッドから関数を呼び出しています。
これが例外の原因となる行です: CWnd* parent = this->GetParent();
「GetParent()->PostMessage(........);」も試しましたが、それでも例外がスローされます。
私は CDialog でこのメソッドを使用しています。
CWnd メンバー m_hWnd が 0x00000000 または 0x00000001 になる場合があることに気付きました。別のコンピューターでは、この例外は発生しません。プロジェクト設定または私のコードに問題がありますか?
mfc - MFC フローティング CDialog コントロールのクリッピングの問題
フレームビューを使用して一連のコントロール (ボタン、編集ボックスなど) をユーザーに提供する SDI MDF アプリケーションを作成しています。このビューは、タブコントロールやその他の手段を介して表示または非表示にできる追加のコントロールを表示するために使用される CDialogs のセットも所有しています。最近まで、ダイアログは作成時に画面上の適切な場所に静的に配置されていましたが、ユーザーが移動できるがビューの子であるダイアログを追加したかったのです。ユーザーが実行している問題を回避できるキャプションと sysmenu を含むダイアログを作成したとき、ウィンドウがビューによって所有されている別のコントロール (ボタンとしましょう) の上に配置されたとき、ペイント メソッドが呼び出されたときです。ボタンをクリックすると、ダイアログの上に描画されます。ダイアログはまだ一番上にあり、ダイアログコントロールは引き続き操作できますが、ダイアログが再描画されるまで、ボタンはそれらの上に描画されます。ダイアログの clipchild と clipsiblings の設定を変更しようとしましたが、ダイアログを相互に適切にクリップすることはできましたが、子ダイアログで親ビュー コントロールを適切にクリップすることができないようです。このクリッピングの問題を解決する設定について、何かアイデアはありますか?
c++ - MFC ダイアログで定義されたコントロールまたはコントロール コンテナーのリストはありますか
mfc ダイアログのリストまたはコントロール コンテナーについて質問しています。この質問のようなダイアログの子ウィンドウをリストすることを意味するのではありませんMFC子ダイアログ、MDIFramesなどをループします。必要なのは、DDX_Controlメソッドが適用されるダイアログクラスの変数として定義されたコントロールのリストです。
ダイアログで定義されたすべての制御変数のリストが必要です
visual-c++ - 子ウィンドウのコントロールにアクセスできません ( CDialog::Create で作成)
私は理解するのに苦労してきました。皆さんが助けてくれるかもしれません。
CDialogを使用するプロジェクトがあり、メインウィンドウから情報を取得する子ウィンドウを作成しようとしています(メイン/子ウィンドウには独自のクラスがあります)、コンテンツを編集し、編集した情報をに送り返しますメインウィンドウ。
を使用しようとしたときCDialog::Create()
、子ウィンドウのコントロールを使用できませんでした。(例: ボタンが反応しない)
子ウィンドウを作成するDoModal()
と裏目に出ました..ボタンは反応し、子ウィンドウのクラス関数にアクセスできましたが、メインウィンドウクラスから情報を取得しようとすると、アプリクラッシュが発生しました。CWnd を手動で渡そうとしましたが、それでもクラッシュしました.. (メイン ウィンドウ ハンドルを取得できませんでした)
メインアプリの変数と子ウィンドウのイベントハンドラーにアクセスしながら子ウィンドウを作成する方法についてのアイデアはありますか?
編集:わかりました、私は最終的に何が問題であるかを知りました:私は使用していました
代わりに、次のようなウィンドウを作成する必要があります。
ボタンからデータ転送まで、すべてが機能しているようです。将来、私のような愚かな人の助けになれば幸いです。
mfc - ダイアログの一部を「デタッチ」する方法はありますか?
Codejock XTPを使用する古い CDialog ベースのアプリケーションに取り組んでいます。このダイアログでは、ダイアログの右端に別のTaskPanelがあります。(まだ画像を投稿できません、評判が十分ではありません)
ユーザーがダイアログからタスクパネルをデタッチ/アタッチできる方法を提供したいと考えています。そのため、パネルが切り離されている場合、ユーザーはメイン ダイアログと切り離された [タスク] ダイアログを個別に移動できます (おそらく複数のモニター上で)。アタッチされている場合、パネルはメイン ダイアログのみの一部になります。
パネルには、試して分離したいコントロールがたくさんあります。ほとんどのコントロールは、タスク パネルの一部である場合とそうでない場合がある複数のコントロールを変更します (したがって、新しいダイアログを作成すると、2 つのダイアログのいずれかの一部になる可能性があります)。
パネルを分離および分離解除するには、どのようなアプローチに従う必要がありますか? その分割されたパネルの新しいダイアログを作成する必要があることは避けられないと思います。コントロールの値と状態が変更された可能性があることを考慮する必要があり、同期を維持する必要があります。また、コントロールの現在のハンドラーは、同じダイアログ上にあると仮定して、他のコントロールを参照している可能性があります。多くのコントロールがあるため、これを変更するには多くの作業が必要になります。
リソース/サンプル、または役立つ可能性のあるものを誰かが提案できますか?