dllからウィンドウに文字を表示するには?

解決


  2004-09-12 23:00:09  No: 54463

現在Win32Appでマウスフックを勉強していて、
クリックしたスクリーン座標を
ウィンドウに表示させようとしているのですが、
どうもうまく表示できません。

dllの内容:
EXPORT LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
{
    MOUSEHOOKSTRUCT *pmh;

    pmh = (MOUSEHOOKSTRUCT *)lp;
    HDC hdc;
    PAINTSTRUCT paint;
    int x1,y1;
    char *str = "x1=%d y1=%d";
    char strx[128];

    if (nCode < 0)
        return CallNextHookEx(hHook, nCode, wp, lp);
    if (wp == WM_NCLBUTTONDOWN) {
        if (pmh->wHitTestCode == HTMENU || pmh->wHitTestCode == HTCLIENT)
            return CallNextHookEx(hHook, nCode, wp, lp);
        x1 = pmh->pt.x;
        y1 = pmh->pt.y;
        wsprintf((LPSTR)strx, (LPCSTR)str, x1, y1);
        hdc = BeginPaint(hWnd, &paint);
        TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str));
        EndPaint(hWnd, &paint);
        return TRUE;
    }
    return CallNextHookEx(hHook, nCode, wp, lp);
}

BeginPaintのhWndは何かの関数を使って
取得しないといけないのでしょうか・・・
また、ネットで調べて組み合わせたので、
色々おかしい点があるかもしれませんが、
そういった所も指摘してもらえるとありがたいです。
どうかよろしくお願いします。


KING・王  2004-09-13 04:13:38  No: 54464

あまり詳しくなく、回答ではありませんが、何点か。

>BeginPaintのhWndは何かの関数を使って
>取得しないといけないのでしょうか・・・

まず、MSDNで BeginPaint( )の仕様を調べましょう。
関数(API)を使用する場合、その仕様を調べ、引数の型、意味を確認するのは、
最低限の基本事項だと思います。
MSDNライブラリ2001年10月リリースのプラットフォームSDKのBeginPaint
()より、
「hWnd   再描画するウィンドウのハンドルを識別します。」
ということで、描画する(させたい)ウィンドウのハンドルを指定してあげる必要があります。
#というか、上記サンプルでは hWndってAPIの引数にしか出てこないけど。。。

で、描画させたいウィンドウのことについて、何も記載されていないため、
これ以上のことはわかりません。

あと、いきなり「DLLの内容」と書かれても、それを呼び出すEXE側の情報がないので、
どのような形のアプリケーションなのかも分かりかねます。


  2004-09-13 08:02:27  No: 54465

お返事ありがとうございます。
一応BeginPaintには調べてまして、
hWndの箇所に再描画ウィンドウのハンドルを指定する
というのはわかったのですが、
dllからだとそのまま指定しても取得できないのでしょうか?
EXEの方ではhWndというハンドルを持ったウィンドウを表示させ、
そのウィンドウのメニューからフックの開始、終了をさせているだけです。
色々説明不足な所があるかと思うのですが、
どうかまたよろしくお願いします。


isshi  2004-09-13 17:42:32  No: 54466

フックについては知りませんが。
BeginPaint はウィンドウプロシージャで WM_PAINT に応答するときだけに
使えるものだと思いますが、フックでは使っても良いのでしょうか?
GetDC を使うべきだと思いますが。
(的外れでしたらすみません。)

ウィンドウハンドルについは、MOUSEHOOKSTRUCT のメンバにあるようです。


  2004-09-14 00:49:11  No: 54467

お返事ありがとうございます。
GetDCを使用したら無事表示する事ができました!
ちなみにTextOutの指定も間違ってましたね。。。

お二人とも本当にありがとうございました。


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

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






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