Win XP VC6(SP5) MFC
意識しては使ってませんけど SourceSafe
最近と言うより結構前からなのですが、プロジェクトが大きくなってきた性か
手処理にて関数を追加してから、クラスウィザードでメッセージマップに対応した
関数を追加したあと、最後に追加したビュークラスがワークスペース上から見えなく
なってしまいます
以前から話題が出ているように「*.NBC、*、CLW」等を削除してから
クラスウィザードの再生成を行っているのですが
毎回この手順踏むのもつらくなってきました
手処理で関数を追加する場合のガイドラインなど紹介しているホームページ
知っている人いませんか
よろしくお願いします。
(A)がヘッダー、(B)がソースにあったとすると
クラスウィザードは1と3を対象に処理すると思うので
手動で追加する場合は、2と4を使うのが良いように思います
(A)
protected:
//{{AFX_MSG(CMy34677444View)
1.
//}}AFX_MSG
2.
DECLARE_MESSAGE_MAP()
(B)
BEGIN_MESSAGE_MAP(CMy34677444View, CView)
//{{AFX_MSG_MAP(CMy34677444View)
3.
//}}AFX_MSG_MAP
4.
END_MESSAGE_MAP()
> 手処理で関数を追加する場合のガイドラインなど紹介しているホームページ
> 知っている人いませんか
ガイドラインじゃないんですが、同じような状況の方だと思います
http://www.interq.or.jp/jazz/iijima/mfc/iijima/04range1.html
同様の症状が頻発するため最近はClass Wizardそのものを使わないことも多いのですが、
私はFileViewで見えなくなったクラスのヘッダファイルをオープンし、保存し直す、とい
う方法で事なきを得ています。
kuさん、tibさん 早々のご返事ありがとうございます
kuさんの参考にソース見直しすぐしてみたいところですが、日中のアクセスは会社からなので
自宅に帰ってから見直してみます
会社ではVCとは全然関係ない言語での仕事をしてますから、ソース持込できないんです
tibさん の方法で回避できること知りませんでした、参考にさせて頂きます
ほかにもご意見ある方、降りましたら是非お聞かせください
>ガイドライン
ってやはり見たことないですかね、自分だけでなく
初心者(特に APPWIZARD MFCから入ったような人)は
是非知りたいようなことだと思うんですけどね!
最初の頃は関数追加するのも、たった3行追加するだけで
恐る恐るでしたからね!
kuさんが言われているようにクラスウィザードがいじる部分は手でいじらないようにする方が
無難です。
せっかく書いたコードを消されてしまったりすることがままありますので。
私が手でコードを追加する時には基本的に「//{{AFX_MSG」で囲まれた所を外して入れるように
しています。
いじった 実際のヘッダ
class CMRU10_HINView : public CFormView
{
--------------- ここから ① --------------------------------------
/*
protected:
CMRU10_HINView(); // 動的生成に使用されるプロテクト コンストラクタ。
DECLARE_DYNCREATE(CMRU10_HINView)
*/
public:
CMRU10_HINView(); // 動的生成に使用されるプロテクト コンストラクタ。
DECLARE_DYNCREATE(CMRU10_HINView)
-------------------- ここまで① いじった ------------------------------
// フォーム データ
public:
//{{AFX_DATA(CMRU10_HINView)
enum { IDD = IDD_MARU10_HIN };
// メモ: ClassWizard はこの位置にデータメンバを追加します。
//}}AFX_DATA
-------------- ここから ②------------------------------
// アトリビュート
public:
CMARU10Doc* GetDocument();
SSMCORE* MARUCORE;
// オペレーション
public:
void SetFromDoc();
BOOL SetToDoc(); // Called from SwitchView()
---------------- ここまで② いじった ------------------------
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CMRU10_HINView)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポー
ト
//}}AFX_VIRTUAL
// インプリメンテーション
protected:
virtual ~CMRU10_HINView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// 生成されたメッセージ マップ関数
//{{AFX_MSG(CMRU10_HINView)
afx_msg void OnHinSel();
afx_msg void OnHinTop();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
------------------ ここから ③ --------------------------------
#ifndef _DEBUG // MARU10View.cpp ファイルがデバッグ環境の時使用されます。
inline CMARU10Doc* CMRU10_HINView::GetDocument()
{ return (CMARU10Doc*)m_pDocument; }
#endif
------------------ ここまで ③ いじった -----------------------
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。
#endif // !defined
(AFX_MRU10_HINVIEW_H__978C4A09_548D_4F85_95AC_86F0C8B6E73F__INCLUDED_)
やはり ① が まずいんでしょうかね
VSWAP32 をサンプルに いじったんですけどね
最低限「//{{AFX_MSG」で囲まれた所を外していると思っているんですけどね
----------------------------------------------------------------------
// MRU10_HINView.cpp : インプリメンテーション ファイル
//
#include stdafx.h
#include MARU10.h
#include MARU10Doc.h
/////////////////////////////////////////
//// SSMIMM.DLL を利用するとき必須 ////
/////////////////////////////////////////
#include ..\SSMDB\SSMCORE\SSMCORE.h
/////////////////////////////////////////
#include MRU10_HINView.h
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CPPファイルへの記述で ヘッダファイルの記述位置が悪いとかないですかね