コールバック関数内でダイアログボックスのハンドルを得るには?


トッシ  2006-12-29 04:27:24  No: 64125

実験のためのプログラムを作成しております。

概要は以下のとおりです
ADボードとタイマーボードを使用しております。
それを用いて、例えばタイマを0.1秒おきに更新し、そのたびにADボードを用いて外部からデータを取り込みます。
その際に、タイマボードによるコールバック関数内でダイアログボックス上にリアルタイムで取得したデータを表示させたいと考えております。

つまり、プログラムとしては以下の感じになります。
ただし、あくまで概要を伝えるためAD変換等の関数は実際用いているのとは異なっております。

---------------------------------------------------------------------
void CALLBACK lpEventProc_calb(INT nChannel, DWORD dwEvent, DWORD dwUser){
    data = getAD;   (ADボードでデータを取得)

    _snprintf(txt_rh, 10000, "%.4f", data);
    SetDlgItemText(hWnd, IDC_DATA, txt);
}

BOOL CALLBACK DlgWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    CountStart;   (タイマをスタートします)
}

---------------------------------------------------------------------

しかし、これをこのまま実行すると
        error C2065: 'hWnd' : 定義されていない識別子です
と出てしまいます。
そこで、関数を調べてGetParent(hWnd)でコールバック関数内で親ダイアログボックスのハンドルを取得できると書いてあったので、
    snprintf(txt_rh, 10000, "%.4f", data);
    SetDlgItemText(GetParent(hWnd), IDC_DATA, txt);
としてみたのですが、
    error C2065: 'hWnd' : 定義されていない識別子です
と出てしまいます。

自分なりに原因を考えてみたのですが、
void CALLBACK lpEventProc_calb(INT nChannel, DWORD dwEvent, DWORD dwUser)
というWindowsのコールバック関数ではなく、タイマボード固有のコールバック関数を用いていることに原因があるのではないかと考えています。

というのも、Windowsのコールバック関数であれば
BOOL CALLBACK PageProc1(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp)
となっており、親ウィンドウのハンドルを引数の中にしているからです。

ここまではなんとか自分で考えたのですが、じゃあボード固有のコールバック関数を用いているときに、どのようにして親ウィンドウのハンドルを指定すればいいか?というところは解決できませんでした。
どなたかよい方法をご存知の方がいらっしゃったら、ご教授いただけると幸いです。

よろしくお願いします。


えてこう  2007-01-04 21:53:42  No: 64126

> これをこのまま実行すると
>         error C2065: 'hWnd' : 定義されていない識別子です

実行できていないと思います.
単に宣言していないだけではないでしょうか?


Blue  2007-01-04 21:57:28  No: 64127

2重投稿のようで
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200612/06120069.txt
で解決したようです。


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

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






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