• 締切済み

名前を付けて保存パネル等でESC/ENTER無効にする方法

MFCにて自分でつくったダイアログに対してESC/ENTERを無効にする方法はわかりましたが、名前を付けて保存や印刷パネルなど元からあるパネルのESC/ENTERを無効にする方法はありますでしょうか?

みんなの回答

回答No.1

こんばんは。以下参考に。 >>名前を付けて保存や印刷パネル  コモンダイアログの事でしょうか? >>ESC/ENTER  [開く・キャンセル]等のボタンの事でしょうか?  上記の2項が[YES]であるなら答えは可能です。  以下に纏めさせて頂きます。  VC++6.0にて確認しています。  (1)ボタンのIDはどこで判るか?   VCの[Include]フォルダの中にコモンダイアログのダイアログリソースがあります。   それらをVCで開けて見れば、それぞれのダイアログ上に搭載されたボタンなどのIDを確認できます。      【<コモンダイアログ種類><MFCにおけるクラス名><リソールファイル名>】   【<カラー><CColorDialog><COLOR.DLG>】   【<フォント><CFontDialog><FONT.DLG>】   【<ファイルを開く><CFileDialog><FILEOPEN.DLG>】   【<検索と置換><CFindReplaceDialog><FINDTEXT.DLG>】   【<印刷><CPrintDialog><PRNSETUP.DLG>】※   【<ページ設定><CPrintDialog><PRNSETUP.DLG>】※   ※の部分はチョッと曖昧です。  (2)どうするか   (1)に示したMFCクラスを継承して、メッセージをマップします。   以下は[CFileDialog]を継承して[CFileDialogCustom]を作り[開く・キャンセル]のボタン二つを無効化します。 +----------------------------------------------------------------------------------------+ #define ARRAYCOUNT(a) (sizeof(a) / sizeof(a[0])) //マップするメッセージ BOOL CFileDialogCustom::OnInitDialog() { CFileDialog::OnInitDialog(); // TODO: この位置に初期化の補足処理を追加してください //無効化したいボタンIDの配列 const UINT arrID[] = {IDOK, IDCANCEL}; for(int i = 0; i < ARRAYCOUNT(arrID); ++i) { //ダイアログハンドルを取る HWND hDlg = ::GetParent(this->GetSafeHwnd()); //ボタンハンドルを取る HWND hButton = ::GetDlgItem(hDlg, arrID[i]); //無効化する ::EnableWindow(hButton, FALSE); } return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります // 例外: OCX プロパティ ページの戻り値は FALSE となります } +----------------------------------------------------------------------------------------+ ・ファイルダイアログの場合は親ウィンドウを取らないといけないようです。ヘルプにそうしろと記載されていたからです。  他種類のダイアログは不明です(それぞれ要確認) ・ダイアログ上のボタンなどのコントロールは[CWnd]クラスとして作成されていないので、原始的なHWND型とAPIで扱う必要があります。

maki55555
質問者

お礼

ありがとうございます。 試してみます。

関連するQ&A

  • 一部Enter無効化の方法を教えてください!

    PHPで作成している画面について、テキストコントロールにフォーカスがある場合に、 Enterキーを押下することで、submitが行われることを無効化させたいと思っています。 <SCRIPT LANGUAGE=javascript> <!-- document.onkeypress = enter; function enter(){ if( window.event.keyCode == 13 ){ return false; } } //--> </SCRIPT> のようなJavaScriptを記述すれば完全にEnterキーを無効にできるようですが、 この状態だと、submitにフォーカスがある状態でEnterキーを押下してもsubmitが実行されません。 この状態を解決する方法をご存知の方、アドバイスをお願いします!! ちなみにブラウザは最低でも、IE6,7とFireFoxには対応したいと思っています。 当方、HTML,PHP,JavaScriptは素人同然ですので、明確な内容で教えて頂けると助かります。 宜しくお願いします!!

  • escキーを押しても文章が消えないようにする方法

    ある掲示板で文章を入力していて、半角キーと間違えてescキーに指が当たってしまい、入力した文章が全部消えました。 今後同じことをしないために、何か良い方法はありませんか? (escキーの無効化など) よろしくお願い致します。

  • VBAでESCキーを無効にしたいのですが、うまくいきません。

    EXCEL VBA でESCキーを無効にするために、 Application.EnableCancelKey = xlDisabled を使用していますが、 特定のフォルダ内のEXCELファイルを開いて、ある処理をして保存するといったプログラムでは、ESCキーを無効にすることができませんでした。 原因を探るために以下のテストプログラムを作成しましたが、実行中にESCキーを押すと(長押しすると確実に) 「実行時エラー'1004' openメソッドは失敗しました。'Workbooks'オブジェクト」 のメッセージが表示されて止まってしまいます。 どこに原因があるのでしょうか? よろしくお願いします。 以下、テストプログラム ////////// Private Sub CbStart_Click() Dim Fname As String Dim Fpath As String Application.ScreenUpdating = False Application.EnableCancelKey = xlDisabled Fpath = "d:\work\" Fname = Dir(Fpath & "*.xlsx") Do While Fname <> "" Workbooks.Open Fpath & Fname CloseWorkbook Fname Fname = Dir() Loop Application.ScreenUpdating = True End Sub 以上 //////////////////

  • タッチパネルの無効化について

    現在、necのls550を使っているのですが、 ディスプレイのタッチパネルだけが割れてしまい、操作がしにくく、困っています。 タッチパネルを使うことは無いので、タッチパネルの機能を無効化したいのですが、出来ますでしょうか? 以前のwindows8.1では無効化していたのですがwindows10にしてから変更の仕方が分からず困っています。 方法がありましたら教えて下さい。 お願いします。 タッチパッドではなく、タッチパネルの方です。 ※OKWaveより補足:「NEC 121ware :パソコン本体」についての質問です

  • タッチパネルを無効にする方法を教えてください。

    タッチパネルを無効にする方法を教えてください。 機種名:LIFEBOOK AH90/Pです。 ※OKWaveより補足:「富士通FMV」についての質問です。

  • タッチパネル無効化

    NEC Lavie LL750RSGです。OSは8.1です。タッチパネルを無効にできるでしょうか。可能なら方法も教えていただけると助かります。

  • キーボード入力について

    VC++6.0MFCのダイアログベースでデスクトップアプリを作成しています。 現状ですが、まずEscとEnterをクリックすると、 アプリが終了してしまいます。 なぜかわからないのですが、 そもそもキーボード入力を無効にしたいのです。 SetWindowsHookExというAPIを使えばできそうなんですが、 いかんせん、初心者でしてどの部分でどのような記述を すればいいのかがわかりません。 どなたかご教授ください。 よろしくお願いいたします。

  • エクセルが「名前を付けて保存」になる

    エクセル2000ですが、編集を完了して「×」ボタンで終了しようとすると、「●を変更しますがよろしいでようか?」と出るので「はい」を押すと、次に「名前を付けて保存」のダイアログが出てきてしまいます。 一昨日までは「名前をつけて保存」は出ずに上書き保存できたのに、原因がわかりません。 どなたか「名前を付けて保存」ではなく上書きで保存するように戻す方法をご存知ないでしょうか。 なお、HDに保存してあるファイルで、かつ、読取専用では有りません。

  • エクセルの「元に戻す」を上書き保存後は無効にしたい

    エクセル2007を使用しています。 2007以前のVer.でのエクセルでは上書き保存などをすると、保存した時点で「元に戻す」が不可能になっていたと思います。 しかし、2007Ver.から、上書き保存した時点よりも遡って「元に戻す」が可能になっています。 これを「保存した時点で元に戻す」を無効にすることは可能でしょうか。 (つまり「元に戻す」のアイコンがグレーアウトの状態になる) 現在での対策として、上書き保存した後に一度BOOKを閉じ再度開いていますが、たまにパソコンが重くなるなどすると非常にストレスを感じています。 質問内容がうまく伝わっておりますでしょうか。また、カテゴリはあっていますでしょうか。 なにか「元に戻す」を無効化する方法はありますでしょうか。

  • 名前をつけて保存のダイアログボックスがおかしい

    Word2002とExcel2002で「名前をつけて保存」ダイアログボックスの左側にある「マイドキュメント」等のアイコンが履歴だけを残して消えてしまいました。 どうすれば元に戻るのか教えてください。 よろしくお願いします。OSはWinXP Proです。

専門家に質問してみよう