はい、
nomina.browser 0.0.038 alpha3
さっきのbugをつぶしました。
こんな、感じ。
- nomina.browser.bug.20070414.2146.1
- [所見] サイズ変更などでしばらく処理が戻ってこないbugのようである
- [検査] nmnWebBrowserControl::WndProcにおけるMessageの追跡など
- [診断1] WM_SIZE時におけるなんらかの不具合
- [処置1] コード1のl.11-13をコメントアウトした
- [結果1] 症状に変化なし
- [診断2] WM_PAINT時におけるなんらかの不具合
- [処置2] コード1のl.14-16をコメントアウトした
- [結果2] 症状が改善した
- [処置3] コード1をコード2に修正。WM_PAINTでDefWindowProcを呼ぶようにした
- [結果3] 症状が改善した
- [確定診断] WM_PAINT時にDefWindowProcを呼ばずに0Lを返していたことによるbug
試験前ということもあり、体裁だけでもそれっぽくw
しかし、まだまだ基本がなってないのですなぁ…
こんなやつがブラウザを創っているとはorz
コード1(修正前)
LRESULT nmnWebBrowserControl::WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_CREATE: return OnCreate(wparam, lparam); break; case WM_DESTROY: return OnCreate(wparam, lparam); break; case WM_SIZE: return OnSize(wparam, lparam); break; case WM_PAINT: return OnPaint(wparam, lparam); //ここ break; default: return ::DefWindowProc(hwnd, msg, wparam, lparam); } return 0L; }
コード2(修正後)
LRESULT nmnWebBrowserControl::WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { case WM_CREATE: return OnCreate(wparam, lparam); break; case WM_DESTROY: return OnCreate(wparam, lparam); break; case WM_SIZE: return OnSize(wparam, lparam); break; case WM_PAINT: OnPaint(wparam, lparam); return ::DefWindowProc(hwnd, msg, wparam, lparam); //こうした break; default: return ::DefWindowProc(hwnd, msg, wparam, lparam); } return 0L; }