マウスクリックを代用するプログラムは?


ビギナーです  2004-10-14 01:03:58  No: 54730

ダイアログボックス上ではなくウィンドウズ上で
ボタンを配置して
マウスクリックにより、ボタンがメッセージを受け取るには

CASE WM_COMMAND:
if(LOWORD(wParam) == ID_BUTTON)
{
ボタン処理
}
return 0;

ですがこのマウスクリック処理をしないで
マウスがボタン領域内に入った時に
マウスクリックするようなプログラムを教えてください

CASE WM_MOUSEMOVE:
mPos.x = LOWORD(lParam);
mPos.y = HIWORD(lParam);
if (PtInRect(&ボタン領域,mPos) == TRUE)
{
ボタンクリック
}
return 0;

上記のボタンクリックの仕方を知りたいです
よろしくお願いします


qp  2004-10-14 01:34:16  No: 54731

mouse_eventでgoogleあたりを検索すればいいかな。
できるかどうかは試してませんが(^^;


RAPT  2004-10-14 11:37:36  No: 54732

ボタンクリックの処理だけでよければ、SendMessage()でいけるかと。


YuO  2004-10-14 17:48:29  No: 54733

> ですがこのマウスクリック処理をしないで
> マウスがボタン領域内に入った時に
> マウスクリックするようなプログラムを教えてください

本当にマウスクリックを再現しないといけないのですか?

例えば,
void mouseClickFunc (HWND hWnd)
{
// マウスクリック処理
}
という関数を切り出しておいて,
case WM_COMMAND:
    if (LOWORD(wParam) == ID_BUTTON) {
        mouseClickFunc(hWnd);
    }
    return 0;
case WM_MOUSEMOVE:
    mPos.x = LOWORD(lParam);
    mPos.y = HIWORD(lParam);
    if (PtInRect(&ボタン領域, mPos)) {
        mouseClickFunc(hWnd);
    }
    return 0;
というコードではだめですか?

> if (PtInRect(&ボタン領域,mPos) == TRUE)

PtInRectの戻り値はTRUEかFALSEかではなく,非0か0かです。
http://msdn.microsoft.com/library/en-us/gdi/rectangl_1644.asp

Cの伝統として,TRUEとの比較は行わないのが普通です。
今回の場合だと,mPosがボタン領域の内部を指す場合でも1でない値,
例えば2を返す可能性を否定できないからです。


ビギナーです  2004-10-15 22:35:26  No: 54734

qpさん、RAPTさん、YuOさんありがとうございます。
>YuOさん
はい、マウスクリックを再現したいのです
ボタン領域に入りましたら、ボタンをクリックするようにしたいのです
(押し込みボタングラヒィックを再現するてもありますが・・)

PtInRectの戻り値は0か否かですね;
すみませんでした;
1以外の値が帰ってきた場合は失敗してしまいますね;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加