問題タブ [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 の子孫で OnInitDialog が呼び出されない
[クラスの追加] オプションを選択すると、Visual Studio によって自動生成される CDialog (CNotificationDialog) から派生したクラスがあります。
CNotificationDialog (CWebNotificationDialog) から派生した別のクラスもあります。
私のコードは次のようなものです:
ダイアログは表示されますが、CWebNotificationDialog::OnInitDialog メソッドは呼び出されません。CNotificationDialog::OnInitDialog メソッドのみが呼び出されます。
そして、あなたが尋ねる前に、はい、それは仮想であると宣言されています。DECLARE_DYNAMIC、BEGIN_MESSAGE_MAP、および自動生成される他のすべてのマクロを追加しようとしましたが、うまくいきませんでした。
私は何を間違っていますか?
CNotificationDialog::OnInitDialog は次のようになります。
次のように宣言されています。
c++ - CDialog クラスの親子実装
シナリオ: 子で親メソッドを使用したい。以下に示すように、2 つのダイアログ クラスを持つソリューションを作成することは可能ですか?
mfc - MFC: ウィンドウの閉じるボタンがクリックされました。ウィンドウ オブジェクトは破棄されません
CDialog
私は、それぞれが異なる派生クラスのかなりの数のウィンドウを持つアプリを持っています。
私のアプリは何年にもわたって正常に動作してdelete this
いましPostNcDestroy()
たが、今見てみると、正しい、または必要な証拠は見当たりません。CDialog
サブクラス化されたオブジェクトを取り除く正しい方法は何ですか?
c++ - MFC: 1 つのウィンドウの X ボタンが 2 番目のウィンドウも閉じている
私のアプリケーションにはいくつかのウィンドウがあり、それぞれが異なるCDialog
派生クラスです。
ウィンドウ フレームの右上隅にある「X」ボタンを押すと、ウィンドウが閉じられ、 が呼び出されますPostNcDestroy
。
PostNcDestroy
ただし、4 つのウィンドウの 1 つについては、さらに別のウィンドウの () も呼び出し、そのウィンドウも非表示にします。
何か案は?
mfc - Enter キーを押しても IDOK デフォルト プッシュ ボタン アクションがトリガーされない
CDialog 派生クラスがあります。そのインターフェース定義には、リソースファイルで次のように定義された、いくつかの画像ボックスといくつかのボタンがあります。
IDC_ALL ボタンがフォーカスされているため、Enter キーを押しても IDOK ボタンに関連付けられたアクションがトリガーされません。これは望ましくありません。
その初期化ルーチンでは、
IDOK ボタンに焦点を合わせるためにあらゆることを試みましたが、成功しませんでした。私が追加した行にコメントを付けたり、コメントを外したりするのにうんざりするところまで:
私が近づいたのは、ラインを使ったものでした
これは非常に奇妙なことを行いました。画像でわかるように、2 つのボタンにフォーカス四角形を描画しました。
しかし、Enter キーはまだデフォルトのプッシュ ボタンをトリガーしていません!
OnOKメソッドを追加しようとしました
まだ成功していません!
もう 1 つの実験: クラスのメッセージ マップにエントリを追加しました。
それでも失敗!
Enter キーで IDOK ボタンのアクションを実行するにはどうすればよいですか?
c++ - MFC VS2010 ウィザードで CDialogEx 派生クラスを追加できない
私の MFC プロジェクトでは、ダイアログを作成しようとしています。したがって、リソースビューでダイアログを挿入します。次に、ダイアログ内をダブルクリックして、ダイアログ クラスを取得します。クラス名を入力し、基本クラス: CDialogEx を選択すると、MFC クラス追加ウィザードが実行されます。[完了] ボタンをクリックすると、ウィザードが閉じ、他に何も起こりません。ファイル (cpp、h) は作成されません。
何が問題なのか教えていただけますか?
回避策として、CDialogEx からクラスを派生させるマニュアル ファイル .cpp および .h を作成すると、正しく表示され、操作できます (メッセージは正しく処理されます)。
mfc - MFC: CPropertyPage からの CDialog
複数の CPropertyPage をタブとして含む CPropertySheet があります。CPropertyPage の 1 つにボタンがあり、ボタンをクリックすると CDialog が起動します。CDialog クラスメソッド内で GetParent() メソッドを呼び出す CPropertyPage へのコントロールを取得しようとしていますが、どういうわけか正しい親ウィンドウを取得できず、CPropertypage のメンバーにアクセスしようとすると、アクセス違反例外がスローされます。
以下は私が使用したコードです:
Visual Studio 2008 でも同じことが機能していましたが、Visual Studio 2013 に移行すると例外がスローされます。
mfc - CDialog 子ウィンドウ
古き良きMFCダイアログベースのアプリケーションのinsdeを使用したかっただけで、さらに2つの可動ダイアログを子として使用したかっただけです。ソリューション ウィザードの後、デフォルト ダイアログ リソース (子スタイル) を作成し、メイン ダイアログの OnInitDialog に 2 つのダイアログを作成しました。
現在、それらは両方とも表示されますが、それらを移動してもクライアント領域の再描画は行われません。両方の Windows をオーバーラップさせ、システム バーの後ろにあるものを選択して移動を開始すると、クライアント領域にはまだ更新されていない領域があるため、2 番目に重なっているダイアログの内容を表示します。
OnPaint を上書きして、そこで四角形を無効にしようとしましたが、両方のダイアログが同じクラスであるため、両方のダイアログが OnPaint を取得し、両方ともクライアント領域全体を更新するため、多くのちらつきが発生します。
ON_WM_ACTIVATE() や ON_WM_SETFOCUS() を使ってクライアント領域を一度だけ無効化しようとしたのですが、これらのイベントがまったく呼び出されません。
では、移動可能な子ダイアログを作成して、ドラッグするとクライアント領域が適切に更新され、選択後に最前面に表示される正しい方法は何でしょうか?
助けてくれてありがとう
ステファン