WinXP VC++6.0ダイアログベースです。
実行した時にOKボタンがあるのですが、OKボタンをクリックした時と同じ動作をF
1キーでもなるように設定したいのですが、わかりません。
Acceleratorを追加して、OKボタンのIDの『IDOK』にキーとして『VK_F1』を割り当てた
のですが、実行時に
F1を押しても反応がありません。
はじめはF1を押す事でヘルプが表示なるように設定されていましたが、コメントアウ
トで反応しないようにしました。
よろしくお願いします。一応、検索もしました。
やりたいことにもよりますが、
CXXXAppクラスに処理する関数を書いて、
> ON_COMMAND(ID_HELP, CWinApp::OnHelp)
を
ON_COMMAND(ID_HELP, CWinApp::Hoge)
というように書き換えるか、
CXXXDlgクラスのWindowProcでWM_HELPをつかまえるとか。
参考) http://forums.belution.com/ja/vc/000/370/66s.shtml
同じ事をしてる方が過去にいらしたんですね。
>CXXXAppクラスに処理する関数を書いて、
が書ければ無事に終わりそうです。
>CXXXDlgクラスのWindowProcでWM_HELPをつかまえるとか。
の方もわかる時チャレンジしてみたいと思います。
ちょっと思ったんですけど、
参考) http://forums.belution.com/ja/vc/000/370/66s.shtml
の真鍋さんのようにコメントアウトしただけじゃ、ダメなんですかね??F1キーを他に
割り当てる場合です。
もう回答しましたよ。
CXXXAppクラスに処理する関数を書いて、
> ON_COMMAND(ID_HELP, CWinApp::OnHelp)
を
ON_COMMAND(ID_HELP, CWinApp::Hoge)
というように書き換えるか、
~~~~~~~~~~
すいません、うまく言いたい事が言えなくて。
やり方はわかったのですが『Hoge』というのが何者なのか不明でした。どう宣言したら
いいのかわからず、困っています。
手順です。(CXXXAppではなくCXXXDlgクラスのメッセージにします)
1. CXXXApp の ON_COMMAND(ID_HELP, CWinApp::OnHelp) をコメントアウトします。
2. CXXXDlg に F1キーを押したときに動かしたい処理をする関数を追加します。
(ClassViewでCXXXDlgクラスを選択肢、右クリック→メンバ関数の追加で
関数の型 void,関数の宣言 任意の関数名())
3. CXXXDlg の BEGIN_MESSAGE_MAP~END_MESSAGE_MAPの間の
//}}AFX_MSG_MAPの上に
ON_COMMAND(ID_HELP, 任意の関数名)
を挿入。
訂正
> //}}AFX_MSG_MAPの上に
じゃなくて、下に挿入で。
上に挿入する場合は、ヘッダのクラス宣言も //}}AFX_MSG の上に afx_msg をつけて
宣言すべき気がしましたので。
詳細にありがとうございます。
適当な名前として関数名を『Short』にしてコンパイルした所、
error C2065: 'Short' : 定義されていない識別子です。
error C2440: 'type cast' : 'int *' から 'void (__thiscall CCmdTarget::*)
(void)' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換が可能なコンテキストはありません。
とエラーが出ました。ちゃんと手順どおりにやりました。
> //}}AFX_MSG_MAPの上に
>じゃなくて、下に挿入で。
これももちろんしました。
> error C2065: 'Short' : 定義されていない識別子です。
コンパイラの仰せの通り、定義されていないのでしょう。
> (ClassViewでCXXXDlgクラスを選択肢、右クリック→メンバ関数の追加で
> 関数の型 void,関数の宣言 任意の関数名())
で追加しましたか?
XXXDlg.h に
void Short();
という記述行と、
XXXDlg.cpp に
void XXXDlg::Short()
{
}
という記述が、自動的に挿入されるはずなんですが。
> ON_COMMAND(ID_HELP, 任意の関数名)
だけかくと、そのエラーメッセージが出ます。
もう一度確認のため、
CXXXDlg に対して、2,3の作業をするのですよ。CXXXAppではありません。
追記)
CXXXDlgで、
> ON_COMMAND(ID_HELP, 任意の関数名)
を記述すれば、CXXXApp の ON_COMMAND(ID_HELP, CWinApp::OnHelp) をコメントアウト
する必要がないようです。
つまり、CXXXDlgに対して、2,3の作業をするだけ。
επιστημηさん、
>コンパイラの仰せの通り、定義されていないのでしょう。
定義はされているはずなんですが、されていないと指摘されます。
Blueさん、
>> (ClassViewでCXXXDlgクラスを選択肢、右クリック→メンバ関数の追加で
>> 関数の型 void,関数の宣言 任意の関数名())
>>で追加しましたか?
はい、それでしました。アクセス制御を『public』に選択しましたが、それが原因でし
ょうか?
>XXXDlg.h に
>void Short();
>という記述行と、
>XXXDlg.cpp に
>void XXXDlg::Short()
>{
>}
>という記述が、自動的に挿入されるはずなんですが。
はい、挿入されています。
void XXXDlg::Short()
{
}
の {} の中身は空(何も記述していません)です。
>CXXXDlg に対して、2,3の作業をするのですよ。CXXXAppではありません。
ちゃんと、CXXXDlg に対して作業をしています。
何回も丁寧にありがとうございます。
もう一度やっても同じエラーでした。
すいません、
>CXXXDlg の BEGIN_MESSAGE_MAP~END_MESSAGE_MAPの間の
> //}}AFX_MSG_MAPの上に
に書く所を別の所に書いていました。すいません。
エラーは無くなったのですが、問題のF1キーでの反応がありません。
> 問題のF1キーでの反応がありません。
void XXXDlg::Short()
{
}
に飛び込んでくれないのですか?