環境:Win2000、VC++.net、MFC使用のダイアログベース
過去ログなども検索したのですが、みつかりませんので御教授お願いします。
リストボックスにフォーカスがある時に「Ctrl+A」を押したら
すべて選択状態にするにはどうすればよいのでしょうか?
選択方式を「拡張」にしたことによって、Ctrlで複数選択、Shiftで範囲選択は
できるようになったのですが、この方法が不明です。
キーイベントをつかまえる必要があるのでしょうか?
Ctrl+A が押されたときに SetSel(-1) すればいいのでは(自信ナシ)。
キー状態直接を見るんじゃなくて、アクセラレータを定義した方がいーんじゃないか
な?
επιστημηさん、渋木宏明(ひどり)さん、NEG(ねぐ)さん
レスありがとうございます。
アクセラレータの定義をやってみることにしたのですが、
「定義できた!」と思って試してみるとあらら、ダイアログ起動時に
出てきて消えるスプラッシュウィンドウが
消えません。
***
BOOL C~Dlg::OnInitDialog()
m_hac=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE
(ID_ACCELERATOR1));
***
この一文をコメントアウトすればスプラッシュウィンドウは消えます。
こんなことってあるのでしょうか?
それ以前にm_hacには0が返ってきてしまっているようです(TT
すいません。上記の問題はPreTranslateMessage()で最後に
return CDialog::PreTranslateMessage(pMsg);
を追記することで解決しました。
ところで初歩的なことなんですが、CTRL+Aが押された時の
処理ってPreTranslateMessage()のif文の中に書く、、という認識で
合っているでしょうか?
***
BOOL C~Dlg::PreTranslateMessage(MSG* pMsg)
{
if (::TranslateAccelerator(m_hWnd, m_hac, pMsg) != 0)
{
//例えばこんな処理
int i=0;
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
***
MFC Class Wizardで関数を追加できます。
NEG(ねぐ)さん、レスありがとうございます。
>MFC Class Wizardで関数を追加できます。
情けないんですが、何て関数でしょうか?
OnGetDlgCode()でも、OnKeyDown()でも、OnMenuChar()でも
捕まえられないのですが(ToT;;
メニューから「表示」→「ClassWizard」で「MFC Class Wizard」ダイアログを表示しま
す。
「メッセージマップ」タブの「オブジェクトID」でアクセラレータで定義したIDを選択し
ます。
「メッセージ」を選択して「関数の追加」を行います。
続けて「コード編集」を押します。
あ、,NETだから手順が違うのか、、、(;_;)
.netにはイベントウィザードとか、イベントなんとかがあったはずです。(^_^;;;
それで作成、、、
ちなみにメッセージ的にはWM_COMMANDで来てるはずです。
NEG(ねぐ)さん、レスありがとうございます。
そうなんです、NETってClassWizardがなくなっているんです(;;
そしてダイアログのWMの中にはWM_COMMANDが無いようです。
どこか他で関数を作るところがあるのでしょうか??
「.NET ClassWizard」で検索:
http://www.google.com/search?q=.NET+ClassWizard&lr=lang_ja
http://www.microsoft.com/japan/msdn/library/ja/vccore/html/
vcgrfwhereisclasswizardinvisualcnet.asp
dairygoods さん、レスありがとうございます。
探してみたところやはりC~Dlg.cppにはWM_COMMANDは無いようです。
WM_SYSCOMMANDならあったのですが、これでもCtrl+Aをつかまえることが
できず・・・
クラス-プロパティ のメッセージ一覧、、でよいのですよね??