A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
SDKでは、チェックボックスやボタン等の処理を行うときは、
サブクラス化しそこで処理を実施しないと動作しまん。
HWND botan_hwnd ;
HWND mouse_hwnd;
WNDPROC Org_WNDPROC;
POINT pt;
int pt_int;
BOOL CALLBACK DialogFunc(HWND hdwnd,...){
//ダイアログの処理
switch(message){
case WM_INITDIALOG:
botan_hwnd =GetDlgItem(hdwnd,IDCANCEL);
//指定した ID のHWNDを確定
Org_WNDPROC =
(WNDPROC)GetWindowLong(botan_hwnd, GWL_WNDPROC);
//GetWindowLongで元々のプロシージャのアドレス
//(FARPROC)を取得する、
SetWindowLong(botan_hwnd,GWL_WNDPROC,(LONG)MySubProc1);
//サブクラス化の実行
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDCANCEL:
EndDialog(hdwnd, 0);
SetWindowLong(botan_hwnd , GWL_WNDPROC, (LONG)Org_WNDPROC);
//必要がなくなったらサブクラス化の解除(復元)、
return 1;
}
break;
//一部省略
//サブクラス化 、一般的なメッセージ処理と代々同じ
LRESULT CALLBACK MySubProc1(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
switch (msg) {
WM_LBUTTONDOWN:
pt.x = LOWORD(lp);
pt.y = HIWORD(lp);
mouse_hwnd = ChildWindowFromPoint( hWnd, pt );
if( mouse_hwnd == botan_hwnd )
{
//指定のボタンを押してるときの処理をここに記述
}
break;
}
return
(CallWindowProc(Org_WNDPROC, hWnd, msg, wp, lp));
//処理しないメッセージを元のプロシージャ側で処理
};
一部ソースを省略し読みにくくなりましたが、以上でボタンの細かい処理ができます。
参考URL:http://www16.plala.or.jp/web-yukimaturi/index.html
No.3
- 回答日時:
#1です。
SDK直でダイアログを処理したことがないのでピントのずれた回答になっていたらごめんなさい。
ただ、基本的な考え方として、ダイアログのWndProcでLButtonDown/UPを拾うと、ダイアログ内でマウスを押された場合すべて拾ってしまうとおもいますので、ボタンに対するWndProcを定義してそこで処理すればよいのではないかとおもいます。
(GetDlgItem,SetWindowLong, CallWindowProc)
ボタンにWndProcを定義するのがメンドウなら、メッセージに含まれる座標からボタンの領域に含まれるかどうかを判定するのでもよいかとおもいます。GetDlgItemでボタンのHWNDを取得、そのHWNDに対しGetWindowRectでボタンのスクリーン座標を取得して、ScreenToClientで親ダイアログに対するクライアント座標に変換しメッセージのlparamに含まれる座標でボタン上かどうかPtInRectで判定、という形でしょうか。
その場合、横取りしたメッセージをボタンウィンドウにも投げてやることを忘れないようにしないとボタンが押された状態にならないとおもわれます。
どのボタンが押されたかを区別する、というのはGetDlgItemで取得したボタンのHWNDにたいして上記処理をやるわけですから区別可能ですよね。
ありがとうございます。
実は仕事で組み込みプログラム(C)をやっていまして、それからみるとSDKのほうが取っ付きが良かったので、SDKにしました。
MFCでもプログラムに挑戦してみようと思います。
No.2
- 回答日時:
確認したいことがあるのですが、
MFCを使っていますか?
SDKを使っていますか?
CButtonというクラスはご存知ですか?
MFCのクラスのボタンクラスの派生クラスは作れますか?
>>WM_LBUTTONDOWN, WM_LBUTTONUPを拾うところまでできました。
とありますが、具体的に答えていただけますか?
また、下の方No1の方法でできたが、
>>ダイアログ中のどのボタンが押されているかを特定する方法は無いですか?
どうやって個別に識別することができるのかを知りたいのですか?
この回答への補足
SDKを使っています。
メインダイアログプロシジャのなかで、WM_LBUTTONDOWN, WM_LBUTTONUPを判定し、それぞれを拾ったことがわかるようにしています。(文字列が表示されるなど)
クラスについては勉強中でまだ使ったことはありません。
>どうやって個別に識別することができるのかを知りたいのですか?
その通りです。WM_COMMANDで拾ったときは、引き続いてプッシュボタンのIDを判定して識別できましたが、WM_LBUTTONDOWN, WM_LBUTTONUPでは同じようにできないので、他に個別に識別する方法が知りたいです。
No.1
- 回答日時:
ボタンの派生クラスを作成すればWM_LBUTTONDOWN, WM_LBUTTONUPを拾うことができます。
VC6ですとクラスウイザードでボタンのコントロールのメンバ変数を追加して、その定義を自分で作成した派生クラスに置き換えてしまいます。
この回答への補足
WM_LBUTTONDOWN, WM_LBUTTONUPを拾うところまでできました。ただ、ダイアログ中のボタンではなく、マウスのボタンを押したときに拾うようです。ダイアログ中のどのボタンが押されているかを特定する方法は無いですか?(WM_COMMANDはダイアログ中のボタンを押して離したことを拾うので使えませんでした)
補足日時:2005/07/28 08:43お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Facebook Facebook 上でいいねボタンを押されることが鬱陶しく、そもそもボタンを押せないようにする設定は 1 2022/05/19 10:46
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- Windows 10 Windowsをキーボードのボタン操作でシャットダウンさせたい 4 2022/11/08 19:23
- Mac OS Macで Microsoft Remote Desktop を使うとキーボードの配列が変わってしまう 1 2022/08/08 17:27
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Android(アンドロイド) AQUOS sense6sの物理ボタン(アシスタントキー)に再生・一時停止を割り当てる方法 2 2022/08/09 00:37
- gooのスマホ スマホの通話切断について 2 2022/12/09 01:34
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
VBA IE ダウンロード ダイアロ...
-
フォームの再読み込み
-
Excel VBA Application.caller...
-
if(wp & MK_ LBUTTON)
-
オプションボタンによっての表...
-
ボタンの枠線の様なものを消したい
-
VBA CommandButtonの文字ずれ
-
VBAのボタンの位置が変わって困...
-
ダウンロードダイアログをVB...
-
VBA でのボタンの移動について
-
VBAでオプションボタンによって...
-
コマンドボタンやイメージにマ...
-
3つのオプションボタンの場所...
-
VBS でユーザーからいくつかの...
-
エクセルVBAでユーザーフォーム...
-
C♯初心者で、四則演算の電卓を...
-
EXCEL2003 オプションボタン複...
-
Delphiにて、呼び元の情報を(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
Excel VBA Application.caller...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
プロシージャからイベントをコ...
-
他のアプリケーションとの連携
-
閉じると「+」になり開くと「-...
-
C#で動的に作ったtextboxを消す。
-
VBA でのボタンの移動について
-
ボタンをマウスで押し続けたと...
-
ボタン
-
CommandButtonのCaptionを変化...
-
TextBoxでEnterキーを押すと、...
-
VB.net でトグルボタンを実現し...
おすすめ情報