以前お世話になったものです。
今eMbedded Visual C++4.0を使っています。
それで以前インターネットエクスプローラーのように
ブラウザのような 普通にネットの画面を表示できる物を作る質問をしました。
それで今回MFCが良いという話でしたので
新規作成 →
void CHtmlView::OnInitialUpdate() クラスの作成 →
Navigate2(_T( http://wwwほにゃらら),NULL,NULL);
と作成した所、 error C2065: 'Navigate2' : undeclared identifier
とエラーがでてしまいました。これはNavigate2が無いと言う事でしょうか?
どうしたらよいのでしょうか。
他のやり方が良いのでしょうか。
この書き方では肝心の所が読み取れないのですが、CHtmlViewもしくはCHtmlViewから派生
させたクラスのメソッドとして呼んでいないのではないでしょうか。
下手に省略せずにまとまったコードを載せた方がいいと思いますよ。
特に出ているエラーの内容からすると実際のコードを見ないと
何ともいえないような感じのないようですし。
CHTmlViewの全てと言うとこういう事ですか??
// htmlView.cpp : implementation of the CHtmlView class
//
#include stdafx.h
#include html.h
#include htmlDoc.h
#include htmlView.h
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CHtmlView
IMPLEMENT_DYNCREATE(CHtmlView, CView)
BEGIN_MESSAGE_MAP(CHtmlView, CView)
//{{AFX_MSG_MAP(CHtmlView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHtmlView construction/destruction
CHtmlView::CHtmlView()
{
// TODO: add construction code here
}
CHtmlView::~CHtmlView()
{
}
BOOL CHtmlView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CHtmlView drawing
void CHtmlView::OnDraw(CDC* pDC)
{
CHtmlDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CHtmlView diagnostics
#ifdef _DEBUG
void CHtmlView::AssertValid() const
{
CView::AssertValid();
}
void CHtmlView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CHtmlDoc* CHtmlView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHtmlDoc)));
return (CHtmlDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CHtmlView message handlers
void CHtmlView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
// Navigate2(_T( http://www-kobayashi.ctrl.titech.ac.jp/~mtanaka/vc/HelloWorld/
),NULL,NULL);
}
…もしかして、自作クラスとして、CHtmlViewクラスを定義している?
普通はMFCだったら、CHtmlViewクラスの *派生クラス* を作成し、
その中で CHtmlView::Navigate2() を呼び出します。
もしくは、別のクラス内で、CHtmlView をメンバに持って操作する。
あのう、お恥ずかしい話なんですが
派生クラスがコピーってのはわかったんですが
どれをどのようにコピーするのかがよくわかりません。
ご教授お願いできないでしょうか
クラス名の後に、: とコピー元のクラス名を付けてクラスを宣言します。
という事なのですが、
CHtmlViewクラスの *派生クラス* を作成というのは
例えば
class maimai :CHtmlView()
で
その中で
Navigate2(_T( http://www-kobayashi.ctrl.titech.ac.jp/~mtanaka/vc/HelloWorld/
),NULL,NULL); と記述するのでしょか??
あっ!!
その前に どうもCHtmlViewクラスがないようなのですが
新規作成のさいにCHtmlViewを作るような操作があるのでしょうか。
WindowsCEの場合、Windowsのサブセットと言う位置づけなので全てのコンポーネントが
そろっているわけではないし、APIとかMFCとかも全てサブセットと言う位置づけだったは
ずです。
なのでWindowsCEでの開発はかなり制約が大きいですし、そもそも組み込み機器の場合は
リソースに制約があるのでPCのようにメモリを湯水のように使うロジックではきちんと
動作する事が期待できません。
この辺は、最初に設計する時点から考慮に入れておかないと厳しい事になる場合が多いです。
また、組み込み機器と言う性質上、APIの全てがMSから提供されているわけではないので
ものによっては実装依存と言う事もあります。
最悪の場合は、ダミー実装(中身は空)なんてのもありえますし。
この辺は自分がターゲットにしている機器で何が出来て何が出来ないのかきちんと把握す
る必要があります。