トップページ > プログラム > 2015年03月07日 > axQ1bDXB

書き込み順位&時間帯一覧

3 位/208 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000010000003000101017



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
Win32API質問箱 Build11 [転載禁止]©2ch.net

書き込みレス一覧

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)のどっちになるのでしょうか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。