メニュー
Infomation
■お知らせ
[スパム対策]コメントにURLを含めると自動的に削除されます。
■このサイトについて
一応残していますが、全時代の遺物。全ての情報は古く役に立ちません 連絡先:メールアドレス
■日記更新情報
RSSRSS|RSS(本文のみ)|lirs
実験&リサーチ
巡回先
製作環境
 

 



2004|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|11|12|
2011|01|
2014|05|08|
2017|07|
2018|03|
2020|08|10|
2021|11|

2006年11月07日(Tuesday) [長年日記]

_ [コンピュータ] ダイアログでキー入力を受け取る方法

Win32環境での話。

よくツールとしてダイアログベースのアプリケーションを作るのだが、ツールの操作性を高めるためにキーボードで操作したくなる事が多々ある。

特に頻度の多い作業だとそれこそ1キーでアクションを実行したくなるが、困った事にダイアログプロージャにはWM_KEYDOWN等のメッセージが飛んでこない。

さて、ここでいつも僕は困っているわけだが、どうしたら良いのか?

実は本気で正しい方法が判らない。

結局いつも以下のソースのようにウインドウがアクティブになったときにキーボードフックをかけて、非アクティブになったら外すというやり方をしている。

はっきり言ってメンドクサイ。

うーん。素直にモーダレスダイアログにしてメッセージループの中から取り出した方が良いのだろうか。

それはそれで面倒そうなんだけれども。

良い方法、正しい方法をご存知の方はご教授ください・・・。

_ テストプログラムソース

これはこれで不安なんですが、試しに書いてみるとこんな感じ?

     1 : #include <windows.h>
     2 : #include "resource.h"
     3 : 
     4 : HINSTANCE g_hInst;
     5 : HHOOK g_hHook;
     6 : HWND g_hDlg;
     7 : 
     8 : LRESULT CALLBACK fnHookProc(int nCode, WPARAM wp, LPARAM lp)
     9 : {
    10 :     if (nCode < 0)
    11 :         return CallNextHookEx(g_hHook, nCode, wp, lp);
    12 : 	if(nCode == HC_ACTION){
    13 : 		SendMessage(g_hDlg,
    14 : 			(lp & 0x80000000) ? WM_KEYUP : WM_KEYDOWN,
    15 : 			wp,lp);
    16 : 	}
    17 :     return TRUE;
    18 : }
    19 : 
    20 : BOOL fnDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp)
    21 : {
    22 :     switch (msg) {
    23 : 		case WM_ACTIVATE:
    24 : 			if(wp != WA_INACTIVE){
    25 : 				g_hDlg  = hDlgWnd;
    26 : 				g_hHook = SetWindowsHookEx(
    27 : 					WH_KEYBOARD,(HOOKPROC)fnHookProc,
    28 : 					g_hInst,0); 
    29 : 			}else{
    30 : 				UnhookWindowsHookEx(g_hHook);
    31 : 			}
    32 : 			break;
    33 :         case WM_COMMAND:
    34 :             switch (LOWORD(wp)) {
    35 :                 case IDOK:EndDialog(hDlgWnd, IDOK);break;
    36 :             }
    37 : 			break;
    38 : 		case WM_KEYDOWN:
    39 : 			{
    40 : 				char szTemp[100];
    41 : 				wsprintf(szTemp,"Keydown = %02X",wp);
    42 : 				MessageBox(hDlgWnd,szTemp,"WM_KEYDOWN",NULL);
    43 : 			}
    44 : 			break;
    45 : 
    46 :     }
    47 :     return FALSE;
    48 : }
    49 : 
    50 : int WINAPI WinMain(HINSTANCE hInst,
    51 : 	HINSTANCE hPrevInst,
    52 : 	LPSTR lpsCmdLine,
    53 : 	int nCmdShow)
    54 : {
    55 : 	g_hInst = hInst;
    56 : 	DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),
    57 : 		NULL,(DLGPROC)fnDlgProc);
    58 : 	return 0;
    59 : }
本日のコメント(全2件) [コメントを投稿]
§ Neorbessuts (2013年09月18日(Wednesday) 12:39)

&#12496;&#12483;&#12464;&#32;&#12469;&#12452;&#12488;&#99;&#114;&#111;&#99;&#115;&#32;&#119;&#97;&#108;&#117;&#91;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#12514;&#12487;&#12523;&#93;&#12502;&#12524;&#12473;&#12524;&#12483;&#12488;&#32;&#12521;&#12531;&#12461;&#12531;&#12464;&#60;&#97;&#32;&#104;&#114;&#101;&#102;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#102;&#111;&#114;&#115;&#104;&#111;&#112;&#112;&#105;&#110;&#103;&#67;&#97;&#110;&#97;&#100;&#105;&#97;&#110;&#106;&#112;&#46;&#98;&#105;&#122;&#34;&#32;&#116;&#105;&#116;&#108;&#101;&#61;&#34;&#12488;&#12540;&#12488;&#32;&#20154;&#27671;&#34;&#62;&#12488;&#12540;&#12488;&#32;&#20154;&#27671;&#60;&#47;&#97;&#62;&#12501;&#12449;&#12483;&#12471;&#12519;&#12531;&#32;&#36890;&#36009;&#32;&#12502;&#12521;&#12531;&#12489;&#12502;&#12524;&#12473;&#12524;&#12483;&#12488;&#32;&#20154;&#27671;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#102;&#111;&#114;&#115;&#104;&#111;&#112;&#112;&#105;&#110;&#103;&#98;&#97;&#115;&#105;&#115;&#106;&#112;&#46;&#98;&#105;&#122;&#47;&#91;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#19979;&#30528;&#93;&#60;&#97;&#32;&#104;&#114;&#101;&#102;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#102;&#111;&#114;&#115;&#104;&#111;&#112;&#112;&#105;&#110;&#103;&#98;&#101;&#97;&#109;&#106;&#112;&#46;&#98;&#105;&#122;&#34;&#32;&#116;&#105;&#116;&#108;&#101;&#61;&#34;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#27700;&#30528;&#34;&#62;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#27700;&#30528;&#60;&#47;&#97;&#62;&#107;&#97;&#116;&#101;&#32;&#115;&#112;&#97;&#100;&#101;&#32;&#110;&#121;&#108;&#111;&#110;&#32;&#116;&#97;&#116;&#101;&#12496;&#12483;&#12464;&#32;&#12524;&#12487;&#12451;&#12540;&#12473;&#32;&#20154;&#27671;&#12514;&#12531;&#12463;&#12524;&#12540;&#12523;&#32;&#106;&#97;&#112;&#97;&#110;&#60;&#97;&#32;&#104;&#114;&#101;&#102;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#102;&#111;&#114;&#115;&#104;&#111;&#112;&#112;&#105;&#110;&#103;&#98;&#97;&#114;&#114;&#101;&#108;&#106;&#112;&#46;&#98;&#105;&#122;&#34;&#32;&#116;&#105;&#116;&#108;&#101;&#61;&#34;&#12480;&#12454;&#12531;&#32;&#12514;&#12531;&#12463;&#12524;&#34;&#62;&#12480;&#12454;&#12531;&#32;&#12514;&#12531;&#12463;&#12524;&#60;&#47;&#97;&#62;&#91;&#12511;&#12521;&#12531;&#12480;&#12459;&#12540;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#93;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#98;&#114;&#101;&#101;&#100;&#115;&#104;&#111;&#112;&#99;&#111;&#109;&#109;&#101;&#114;&#99;&#105;&#97;&#108;&#106;&#112;&#46;&#98;&#105;&#122;&#47;&#91;&#12499;&#12463;&#12488;&#12522;&#12450;&#12513;&#12452;&#12463;&#93;&#99;&#114;&#111;&#99;&#115;&#32;&#24215;&#33303;&#60;&#97;&#32;&#104;&#114;&#101;&#102;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#102;&#111;&#114;&#115;&#104;&#111;&#112;&#112;&#105;&#110;&#103;&#99;&#97;&#103;&#101;&#106;&#112;&#46;&#98;&#105;&#122;&#34;&#32;&#116;&#105;&#116;&#108;&#101;&#61;&#34;&#91;&#32500;&#22810;&#21033;&#20122;&#30340;&#31192;&#23494;&#27700;&#30528;&#93;&#34;&#62;&#91;&#32500;&#22810;&#21033;&#20122;&#30340;&#31192;&#23494;&#27700;&#30528;&#93;&#60;&#47;&#97;&#62;&#91;&#12499;&#12463;&#12488;&#12522;&#12450;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12398;&#12514;&#12487;&#12523;&#93;&#36890;&#36009;&#32;&#12496;&#12483;&#12463;&#99;&#114;&#111;&#99;&#115;&#32;&#99;&#114;&#111;&#99;&#98;&#97;&#110;&#100;&#60;&#97;&#32;&#104;&#114;&#101;&#102;&#61;&#34;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#99;&#104;&#101;&#110;&#100;&#101;&#99;&#97;&#114;&#46;&#99;&#111;&#109;&#34;&#32;&#116;&#105;&#116;&#108;&#101;&#61;&#34;&#91;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#20844;&#24335;&#12469;&#12452;&#12488;&#93;&#34;&#62;&#91;&#12532;&#12451;&#12463;&#12488;&#12522;&#12450;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#20844;&#24335;&#12469;&#12452;&#12488;&#93;&#60;&#47;&#97;&#62;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#109;&#117;&#108;&#108;&#101;&#114;&#101;&#108;&#101;&#112;&#104;&#97;&#110;&#116;&#106;&#112;&#46;&#105;&#110;&#102;&#111;&#47;

§ スーパーコピーブランド時計N級品 (2018年09月10日(Monday) 13:39)

日本的な人気と信頼を得ています。<br>安心、安全にお届けします<br>価格、品質、自信のある商品を取り揃えておりますので、<br>当店の主要な経営のブランド:(ヴィトン ) シャネル(シャネル) Rolex(ロレックス)など.<br>当店は主に経営する商品:かばん.バッグ .財布 .キーケース. .腕時計など.<br>日本には無い商品,日本では高価な商品,弊社のない商品,取引先を代理して製造会社を連絡することができる. <br>弊社長年の豊富な経験と実績があり.輸入手続も一切は弊社におまかせできます.ご希望の商品を責任を持ってお届けします.<br>当店の商品は特恵を与える。<br>興味あれば、是非ご覧下さい<br>財布、腕時計、バッグ一品市場


最近のコメント

364,000 at 2008.06.14
Copyright (c) Suika KNOnline.NET