- PR -

IEコンポーネントについてご教授ください

1
投稿者投稿内容
しょし
会議室デビュー日: 2005/11/13
投稿数: 9
投稿日時: 2005-11-13 03:24
しょしと申します。
いつもお世話になっております。

IEコンポーネントの件で、ご質問させていただきます。

CViewクラスにIEコンポーネントを貼り付けてWEBページを表示しているのですが、WEBページ上でTABキーを押してもフォーカスが移動しません。
以下のようなコードを打って、いろいろと試しましたが、どうもうまくいきません。

皆様のお知恵を頂戴したく、よろしくお願いいたします。

開発環境
Windows XP
VC++ Ver.6.0
MFC

// TABキーを押されたことをキャッチして、IEコンポーネントに伝える
// 機能しない
BOOL CTestPro3View:reTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_TAB)
{
// this->m_hWndIE ← IEコンポーネントのウインドウハンドル
::SendMessage(this->m_hWndIE, pMsg->message, pMsg->wParam, pMsg->lParam);
return TRUE;
}
}
return FALSE;
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-13 08:45
引用:

未記入さんの書き込み (2005-11-13 03:24) より:

SendMessage(this->m_hWndIE, pMsg->message, pMsg->wParam, pMsg->lParam);


PostMessage で直接ポストしちゃダメでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-13 09:27
こんにちは。

引用:

未記入さんの書き込み (2005-11-13 03:24) より:
しょしと申します。

CViewクラスにIEコンポーネントを貼り付けてWEBページを表示しているのですが、WEBページ上でTABキーを押してもフォーカスが移動しません。



IEコンポーネントってWebBrowserコントロールのことでしょうか?
「貼り付ける」の具体的実装がよく分からないのですが、
OCXでしょうか?それともIWebBrowser2のインスタンスを生成したのでしょうか?

CHtmlViewクラスではダメなんですか?これだとTABキーでフォーカス移動しますけれども。
しょし
会議室デビュー日: 2005/11/13
投稿数: 9
投稿日時: 2005-11-13 11:20
しょしと申します。
じゃんぬねっとさん、Tdnr_Symさん、早速のご回答、誠にありがとうございます。

じゃんぬねっとさん
> PostMessage で直接ポストしちゃダメでしょうか?

→PostMessageでポストすると、フリーズしてしまいます。
 原因がわからなくて・・・

Tdnr_Symさん
> IEコンポーネントってWebBrowserコントロールのことでしょうか?
> 「貼り付ける」の具体的実装がよく分からないのですが、
> OCXでしょうか?それともIWebBrowser2のインスタンスを生成したのでしょうか?

→説明不足で大変申し訳ございません。
 おっしゃるとおり、WebBrowserコントロールを使用しております。
 また、実装方法については、下記にソースを記載させていただきましたので、
 ご確認いただければ幸いです(申し訳ございません)。

// WM_CREATEメッセージ取得時に、IEコンポーネントを生成し、
// ホームページを表示する
int CTestPro3View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: この位置に固有の作成用コードを追加してください

CComQIPtr<IWebBrowser2> pWB2;

_Module.Init(ObjectMap, AfxGetApp()->m_hInstance);
AtlAxWinInit();
m_hwndIE = CreateWindow("AtlAxWin", "Shell.Explorer.2", WS_CHILD|WS_VISIBLE, 0, 50, 1024, 700,
this->m_hWnd, (HMENU)0, GetModuleHandle(NULL), NULL);

CComPtr<IUnknown> punkIE;

// m_hwndIEはメンバ変数
if (AtlAxGetControl(m_hwndIE, &punkIE) == S_OK)
{
pWB2 = punkIE;
if(pWB2)
{
// ホームページを開く
pWB2->GoHome();
return 0;
}
}
return 0;
}

> CHtmlViewクラスではダメなんですか?これだとTABキーでフォーカス移動
> しますけれども。

→諸事情により、親はCViewじゃないとダメで、CHtmlViewは使うことはできません。。
 正直、どうすればよいか見当がつきません。

お知恵を頂戴したく、よろしくお願い申し上げます
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-13 14:01
こんにちは。

とりあえず、TABキーが使えるように改造してみました。
…でも、ほとんど動作確認していないので、別の問題が起きないかどうか心配です。

コード:

class CTestPro3View : public CView
{
CWnd m_wndIE; // <- 追加

…省略…
}

int CTestPro3View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndIE.CreateControl(CLSID_WebBrowser, NULL, WS_CHILD|WS_VISIBLE, CRect(0, 50, 1024, 700), this, 0x1234)) {
return -1;
}

IUnknown* pUnknown;
pUnknown = m_wndIE.GetControlUnknown();
if (pUnknown) {
IWebBrowser2* pIWebBrowser2=NULL;
pUnknown->QueryInterface(IID_IWebBrowser2, (void**)&pIWebBrowser2);
if (pIWebBrowser2) {
pIWebBrowser2->GoHome();

pIWebBrowser2->Release();
}
}

return 0;
}

BOOL CTestPro3View::PreTranslateMessage(MSG* pMsg)
{
if (CView::PreTranslateMessage(pMsg))
return TRUE;

return PreTranslateInput(pMsg);
}



どうでしょうか?


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2005-11-13 14:02 ]
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-13 14:20
こんにちは。

ついでに…
引用:

→PostMessageでポストすると、フリーズしてしまいます。
 原因がわからなくて・・・


無限ループに陥っているだけです。
しょし
会議室デビュー日: 2005/11/13
投稿数: 9
投稿日時: 2005-11-13 15:29
しょしと申します。

Tdnr_Symさん

大変ご親切にご回答をくださり、誠にありがとうございました。

ご教授いただいたソースを早速使わせていだいたところ、
問題なく正常に起動しているように感じます。

本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)