リストボックスで「すべて選択」 – プログラミング – Home

リストボックスで「すべて選択」
 
通知
すべてクリア

[解決済] リストボックスで「すべて選択」

固定ページ 1 / 2

せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

環境:Win2000、VC++.net、MFC使用のダイアログベース

過去ログなども検索したのですが、みつかりませんので御教授お願いします。

リストボックスにフォーカスがある時に「Ctrl+A」を押したら
すべて選択状態にするにはどうすればよいのでしょうか?
選択方式を「拡張」にしたことによって、Ctrlで複数選択、Shiftで範囲選択は
できるようになったのですが、この方法が不明です。
キーイベントをつかまえる必要があるのでしょうか?


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

Ctrl+A が押されたときに SetSel(-1) すればいいのでは(自信ナシ)。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

キー状態直接を見るんじゃなくて、アクセラレータを定義した方がいーんじゃないか
な?


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 アクセラレータはこんな感じ、、、
http://www24.cds.ne.jp/~neg/pro/piyo1/dialog/accelerator.html


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

επιστημηさん、渋木宏明(ひどり)さん、NEG(ねぐ)さん
レスありがとうございます。

アクセラレータの定義をやってみることにしたのですが、
「定義できた!」と思って試してみるとあらら、ダイアログ起動時に
出てきて消えるスプラッシュウィンドウが
消えません。

***

BOOL C~Dlg::OnInitDialog()

m_hac=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE
(ID_ACCELERATOR1));

***

この一文をコメントアウトすればスプラッシュウィンドウは消えます。
こんなことってあるのでしょうか?


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

それ以前にm_hacには0が返ってきてしまっているようです(TT


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

すいません。上記の問題は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);
}

***


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 MFC Class Wizardで関数を追加できます。


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

NEG(ねぐ)さん、レスありがとうございます。

>MFC Class Wizardで関数を追加できます。

情けないんですが、何て関数でしょうか?
OnGetDlgCode()でも、OnKeyDown()でも、OnMenuChar()でも
捕まえられないのですが(ToT;;


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 メニューから「表示」→「ClassWizard」で「MFC Class Wizard」ダイアログを表示しま
す。
 「メッセージマップ」タブの「オブジェクトID」でアクセラレータで定義したIDを選択し
ます。
 「メッセージ」を選択して「関数の追加」を行います。
 続けて「コード編集」を押します。


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 あ、,NETだから手順が違うのか、、、(;_;)


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 .netにはイベントウィザードとか、イベントなんとかがあったはずです。(^_^;;;
 それで作成、、、

 ちなみにメッセージ的にはWM_COMMANDで来てるはずです。


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

NEG(ねぐ)さん、レスありがとうございます。
そうなんです、NETってClassWizardがなくなっているんです(;;

そしてダイアログのWMの中にはWM_COMMANDが無いようです。
どこか他で関数を作るところがあるのでしょうか??


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

「.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


返信引用
せんたく
 せんたく
(@せんたく)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

dairygoods さん、レスありがとうございます。

探してみたところやはりC~Dlg.cppにはWM_COMMANDは無いようです。
WM_SYSCOMMANDならあったのですが、これでもCtrl+Aをつかまえることが
できず・・・

クラス-プロパティ のメッセージ一覧、、でよいのですよね??


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました