- Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
643 :デフォルトの名無しさん[sage]:2015/03/07(土) 08:08:10.53 ID:axQ1bDXB - >>642
>通信確立からのプロトコル って、どういう事ですか?もう少し解説お願いします。
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
676 :デフォルトの名無しさん[sage]:2015/03/07(土) 15:54:02.79 ID:axQ1bDXB - サブクラス化というのを勉強中で、他のウインドウの
ウィンドウプロシージャを取得したいのですが、調べたら (1) GetWindowLongPtr (2) GetClassLongPtr で取得出来そうですが、あるいは、 (3) SetWindowLongPtr でも変更前のウィンドウプロシージャのアドレスが戻り値で得られるようですが、 結局どれを使えばいいのでしょうか? 試したところ取得した値は(1)!=(2)==(3)でした。 なぜ(1)は値が違うのでしょうか?それにも関らず、どのアドレスを使ってもサブクラス化の実験 はうまく行きました。ますます分りません。初心者に簡単に解説お願いします。
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
677 :デフォルトの名無しさん[sage]:2015/03/07(土) 15:55:36.36 ID:axQ1bDXB - 訂正
誤 (1)!=(2)==(3)でした。 正 (1)==(2)!=(3)でした
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
678 :デフォルトの名無しさん[sage]:2015/03/07(土) 15:56:43.99 ID:axQ1bDXB - 訂正
(1)==(3)!=(2) でした。 たびたび間違ってすみません。
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
683 :デフォルトの名無しさん[sage]:2015/03/07(土) 19:17:49.24 ID:axQ1bDXB - >>679>>680>>681>>682
レスありがとうございます。SetWindowSubclassも試してみましたところ上手く行きました。 いろいろ試しているうちに分らなくなって来たのですが、サブクラス化してMyWndProc()に置き換えたとして、 関数の末尾で return CallWindowProc(DefWindowProc, hWnd, msg, wp, lp); //(1) SetWindowLongPtrの場合 return DefSubclassProc(hWnd, uMsg, wParam, lParam); //(2) SetWindowSubclassの場合 などどしますよね。 例えば(1)の場合に、DefWindowProcを呼び出していますが、この関数の代わりに、予め auto WndProcOrg = GetWindowLongPtr(hWnd, GWLP_WNDPROC); で取得しておいた関数を return CallWindowProc(WndProcOrg , hWnd, msg, wp, lp); //(3) としても同じ動きをします。 MyWndProc()の末尾で呼び出すべき関数はDefWindowProcかWndProcOrgのどちらが良いのでしょうか? SetWindowSubclassの方法でやる場合も同じ疑問があります。良く分りません。
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
689 :デフォルトの名無しさん[sage]:2015/03/07(土) 21:18:02.58 ID:axQ1bDXB - >>687
たびたびレスありがとうございます。 結論としては、SetWindowSubclassとDefSubclassProcの組み合わせ 使っておけばどんな場合でもこれでサブクラス化が出来るという 理解で良いですか?>>680さんの言うようにSetWindowLongPtrなど は一切忘れて良いという理解で。
|
- Win32API質問箱 Build11 [転載禁止]©2ch.net
700 :デフォルトの名無しさん[sage]:2015/03/07(土) 23:33:39.49 ID:axQ1bDXB - その後、またいろいろ試していて、
>>684 >サブクラス化が二重に起こる可能性があるならDefじゃない方 に関して疑問なのですが、これは SetWindowLongPtrの方式でサブクラス化すると、 MyWndProc->DefWindowProc のように呼び出すようになりますよね。 それをさらにMyWndProc2でサブクラス化すると、やり方によって、以下の二通りの場合が起こると いうことでしょうか? MyWndProc2->DefWindowProc (1) GetWindowLongPtrを使わない場合 MyWndProc2->MyWndProc->DefWindowProc (2) GetWindowLongPtrでやる場合 という理解で良いでしょうか?もしそうなら、同じ事を SetWindowSubclass & DefSubclassProcの方式でやると、この(1)(2)のどっちになるのでしょうか?
|