「コディアックヒグマが見れるページに遷移」
好きなページに遷移する
今回はメニューのアクションを選択した時に、
指定したページにブラウザが遷移するなんてことをやってみます
ツールバーらしい動きですね
とりあえず今回のコードを実行すると、メニューの1個目の要素を選択すると
クマのwikiページに移動するように実装します
「写真、シロクマじゃねーんだな」
Navigateを使う
ブラウザの遷移をするのは、IWebBrowser2のNavigateを使います
Navigate2というのもあるけど、これはActiveX用とかってどこかに書いてあった気がする
Navigateの引数は、こんな感じです
・BSTR url
URL文字列
ここで指定したページに遷移する
・VARIANT *Flags
なんかいろいろフラグがある
navOpenInNewWindow : Windowを開く
navNoReadFromCache : キャッシュ使わない
navNoHistory : 履歴に残さない
navAllowAutosearch : 遷移失敗時に勝手にdefaultのdomainを付加する(.comとか.co.jpとか)
navOpenInNewTab : 新しいタブで開く(もちろんIE7以降)
・VARIANT *TargetFrameName
Javascriptで開く時に指定するのと似たようなの
_blank、_parent、_self、_top、windowname
それぞれの意味は・・・・察してください
・VARIANT *PostData
名前の通り、POST用データ
詳しい説明は次節で
・VARIANT *Headers
ヘッダも設定できる
IEのデフォルトヘッダに追加する形?
ようわからんですが、とりあえず、わらわら使ってみましょう、今から
普通の遷移
IWebBrowserはCOMさんです
COMさんは、VBからでもJavascriptからでも呼べるので、
型は基本、Variantチックなものになっています
で、URLにはconst charとかではなく、BSTRとかいう代物を使わなければいけなくなってます
このBSTR、使ったら必ず解放とか言う割と面倒なものなので、
ATLが用意しているもう少し安全な、CComBSTRを使います
初めてご使用される方は、注意点とか書いてあったので、こちらをご覧ください
http://msdn.microsoft.com/ja-jp/library/bdyd6xz6(VS.80).aspx
リンク切れ起こしませんようにと祈ってから遷移してください
「MSDNの説明、わかりづらいー」
この説明はかなりマシな方ではないかと
引数にURLだけ指定した場合のソース
とりあえず、最低限の指定だけしたコードはこんな感じです
CComBSTR url ( L"http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%9E" );
CComVariant vEmpty;
m_spBrowser->Navigate ( url, &vEmpty, &vEmpty, &vEmpty, &vEmpty );
メニューにつけた時のソースがこんな風
・ToolbarWindow.cpp
「おお、たった3ぎょう。べんりな よのなかに なったもの よのう」
・・・誰の真似?
Flagsを指定してみる
じゃ、メニューを選択したら、新しいWindowでクマページに跳ぶ様にしましょう
CComBSTR url ( L"http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%9E" );
CComVariant vEmpty;
CComVariant vFlags;
vFlags.vt = VT_I4;
vFlags.lVal = navOpenInNewWindow;
m_spBrowser->Navigate ( url, &vFlags, &vEmpty, &vEmpty, &vEmpty );
こんな感じです
見たとおり、フラグのところにVT_I4とnavOpenInNewWindowを指定してます
なんでこんな書き方をするのか、詳しいことは知りません
lVal に代入する値を変えると、いろんな効果が発動します
例えばnavNoHistoryを指定すると・・・何か変な動きするなぁ
今表示しているページを履歴に入れない??
また、2つのパラメータを同時指定もできます
navNoReadFromCache | navAllowAutosearchみたいに
設定できる値は、この辺参照
http://msdn.microsoft.com/en-us/library/aa768360(VS.85).aspx
あ、あと、vFlagsの値、コンストラクタでも指定できるらしい
CComVariant vFlags ( navOpenInNewWindow, VT_I4 );
こんな感じで書いた方が楽っぽい
TargetFrameNameを指定してみる
こんな感じです
CComBSTR url ( L"http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%9E" );
CComVariant vEmpty;
CComVariant vTarget ( L"_blank" );
m_spBrowser->Navigate ( url, &vEmpty, &vTarget, &vEmpty, &vEmpty );
値はコンストラクタで指定してみた
//CComVariant vTarget;
//vTarget.vt = VT_BSTR;
//vTarget.bstrVal = L"_blank";
と書いても良い・・・・と思われる
どっちが良いかは・・・・不明
「コンストラクタ見れば分かるだろ」
はい、後でちゃんと見ます・・・
コメントスペース