e->Cancel = trueでキャンセルしたはずのIEが表示される
- 題名: e->Cancel = trueでキャンセルしたはずのIEが表示される
- 著者: yuu
- 日時: 2010/01/14 17:39:41
- ID: 26249
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: e->Cancel = trueでキャンセルしたはずのIEが表示される
- 著者: Hongliang
- 日時: 2010/01/14 19:28:49
- ID: 26250
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: e->Cancel = trueでキャンセルしたはずのIEが表示される
- 著者: yuu
- 日時: 2010/01/15 17:49:12
- ID: 26257
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
はじめまして。
Visual Studio 2005 で C++ のマネージアプリケーションで、ブラウザを作っているのですが、
WebBrowserコントロールを使用すると、新しいウィンドウはIEで開かれてしまいます。
そこで、以下のようにしてそのリンク先を表示することに成功しました。(ソースコードは問題ありですが・・・)
private: System::Void webBrowser1_NewWindow(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) {
e->Cancel = true;
try {
this->webBrowser1->Url = (gcnew System::Uri(this->webBrowser1->StatusText, System::UriKind::Absolute));
}
catch (Exception^) {
}
}
しかし、自分のアプリケーションの新しいウィンドウで、表示したいと思い、
Loadの処理を以下のようにしました。
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
this->webBrowser1->StatusTextChanged += gcnew System::EventHandler(this, &Form1::webBrowser1_StatusTextChanged);
try {
String^ cmd = Environment::CommandLine;
int N = cmd->LastIndexOf("\"");
N++;
N++;
cmd = cmd->Remove(0,N);
this->webBrowser1->Url = (gcnew System::Uri(cmd, System::UriKind::Absolute));
}
catch(Exception^) {
this->webBrowser1->GoHome();
}
}
これで、「"C:\Internet.exe" http://www.yahoo.co.jp/」などとしたときにURLへジャンプするようになりました。
そこで、NewWindowの処理を以下のように書き換えてみました。
private: System::Void webBrowser1_NewWindow(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) {
e->Cancel = true;
Process^ proc = gcnew Process();
proc->StartInfo->FileName = Application::ExecutablePath;
proc->StartInfo->Verb = this->webBrowser1->StatusText;
proc->Start();
}
すると、e->Cancel = trueでキャンセルしたはずのIEが表示され、proc->Start()以降の処理が無視されるようになってしまいました。
長文になってしまい、申し訳ありませんが、C++に詳しい方の回答よろしくお願いします。