こんにちは。先日文字の出力について質問したものです。
今回は表題の通り、OnBeforeNavigate2についてです。
ナビゲーション開始前にイベントを生成するとMSDNに記載しています。
しかし、具体的にどのようにプログラミングすればいいのかわかりません。
具体的にはWebページの表示時間を計測したいのです。
表示できたときは
・WebBrowseView.cpp
void CWebBrowseView::OnNavigateComplete2(LPCTSTR lpszUrl)
{
((CMainFrame*)GetParentFrame())->SetAddress(lpszUrl);
}
・MainFrm.cpp
void CMainFrame::SetAddress(LPCTSTR lpszURL)
{
m_wndDlgBar.GetDlgItem(IDC_EADDRESS)->SetWindowText(lpszURL);
stop_time = clock();
CString tmp2;
tmp2.Format( %.0f, stop_time);
m_wndDlgBar.GetDlgItem(IDC_STATICTIME2)->SetWindowText((LPCTSTR)tmp2);
}
のように記載し、思うように表示することが出来ました。
(一緒にダイアログボックスに表示しているURLを返しています)
ページのリンク先をクリックしたときも同じような記述で出来るのかな?
と考えたのですが、そのポイントをどのようにしたらよいのでしょうか?
ダイアログボックスに表示させるのには上記のままでいいと思いますが
そのポイントはOnBeforeNavigate2関数を使うのはわかるのですが。
すいませんが、ご教授ください。
http://www.mtakahashi.com/cgi.cgi?07513
にも大筋は回答してありますが、
(同じ方ですよね)
OnBeforeNavigate2()内で clock()で取って、メンバ変数にでも
値を保存しておき
OnNavigateComplete2()で clock()で取って、
その差を求めれば計測できるでしょう。
差の求め方は MSDN の clockに例がありますからそちらを参考に
してください。
Wandererさん>
ご回答ありがとうございます。しかも両方に^^
思ったように出来るようになりました。
ありがとうございました。今後ともよろしくお願いします。
うっかりしていましたが、
clock()はこのプログラムに使ったCPU時間なので通信時間を
計測するには不適ではないかと思います。
GetTickCount()
の方が良さそうですね。
Wandererさん>
ありがとうございます。
今までUNIX系でプログラミングしていたのでtimeやclockぐらいしか知りませんでした。
WIN32APIにGetTickCountなんてあるなんて。
ちょっと検索してみるとtimeGetTimeなんてあったりするのですが。
NT系では精度は変わらないということですが、どうなのでしょうか?
実際に実行しようとしても動かなくて(T.T)
MainFrm.obj : error LNK2001: 外部シンボル __imp__timeGetTime@0 は未解決です
Debug/WebBrowse.exe : fatal error LNK1120: 外部参照 1 が未解決です。
なんてエラー出るし。
未開の地に足を入れるのは難しいです(T.T)
MSDNの説明を見ると、
Header: Declared in mmsystem.h.
Import Library: Use winmm.lib.
とあると思います。winmm.lib をリンクしてやればいいのではな
いでしょうか。
Wandererさん>
毎回毎回、すばやいご返答ありがとうございます。
リンクのやり方がわからないのですが、本を見てやってみます。
すいませんが、もうひとつ教えてください。
このプログラムではキャッシュを読みに行ってしまい、最初の表示のときと
2度目の表示のときと結果が違ってくるんですよ。
とりあえず、今はキャッシュファイルを削除して再読込しているんです。
WIN32APIを用いて作っているのが問題なのでしょうか?
APIを用いないプログラミングをしないといけないのでしょか?
>WIN32APIを用いて作っているのが問題なのでしょうか?
>APIを用いないプログラミングをしないといけないのでしょか
Windows上で動作させる限り、プログラムの行き着く先はAPIです
からこれは全く問題ありません。
CHtmlViewはInternetExplorerのコンポーネントを使っているだけ
ですから、インターネットオプションでキャッシュを読まない設
定が可能ならそれで大丈夫かも(調べていませんが)
ページを読みに行く前に、読もうとしているページのキャッシュ
ファイルをプログラム上で消すと言う方法も考えられますが・・・
できるかどうかはちょっとわかりません。
ブラウザとして利用ではなく時間を計測するためのものなら
CHtmlView::Refresh2で、再読み込みをさせるとかっ(爆)