MFC – Automation Server – Documentクラス
津路です。
MFC – Automation Server – 詳細では、Document以外の実装をしました。
といっても、コードがないので、よくわからないかもしれません。
今回は、コードを書きます。
今回は、サーバーの中心となるドキュメントクラスの実装です。
最初に、ProgIdに、AutoPie.Applicationと書きました。
これは、Applicationオブジェクトの配下に、Chart/Window/Toolbarを置いて、階層化するということです。
ドキュメントクラスCAutoPieDocでは、外だしするAPIを実装します。
まず、CAutoWindow, CAutoChart, CAutoToolbarのデータメンバーを、ドキュメントクラスに宣言します。
m_autoWindow, m_autoChart, m_autoToolbarです。
そして、Automationタブにて、Char/Window/Toolbarそれぞれの、取得設定プロパティを、ドキュメントクラスに追加します。
さらに、Get関数では、それぞれのプロパティのGetIDispatch関数を呼び出します。これにより、各サブオブジェクトのポインタを得ます。
Set関数では、サポートされていないことを示すために、SetNotSupportedを呼び出します。
RevenueのSet/Get関数は、publicセクションに宣言します。
Revenue変数は、protectedセクションにm_nRevenues[4]として宣言します。
まず、ClassWizardにて、CAutoChart, CAutoWindow, CToolBarの変数を追加します。
そして、4半期の売り上げ変数を追加します。
1 2 3 4 5 6 7 8 9 10 11 | class CAutoPieDoc : public CDocument { protected: // シリアライズ機能のみから作成します。 CAutoPieDoc(); DECLARE_DYNCREATE(CAutoPieDoc) protected: int m_nRevenues[4]; CAutoChart m_autoChart; CAutoWindow m_autoWindow; CAutoToolbar m_autoToolbar; }; |
Revenueを取得設定する関数を宣言します。
1 2 3 | public: void SetRevenue(int,int); int GetRevenue(int); |
さて、各関数の定義です。
売り上げを初期化します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | BOOL CAutoPieDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: この位置に再初期化処理を追加してください。 // (SDI ドキュメントはこのドキュメントを再利用します。) m_nRevenues[0]=1; m_nRevenues[1]=1; m_nRevenues[2]=1; m_nRevenues[3]=1; return TRUE; } |
CAutoChartのインスタンス関連です。Set関数では、設定を拒否します。
1 2 3 4 5 6 7 8 9 10 11 12 | LPDISPATCH CAutoPieDoc::GetChart() { // TODO: ここにプロパティ ハンドラを追加してください return m_autoChart.GetIDispatch(TRUE); } void CAutoPieDoc::SetChart(LPDISPATCH newValue) { // TODO: ここにプロパティ ハンドラを追加してください SetNotSupported(); } |
CAutoWindowのインスタンス関連
1 2 3 4 5 6 7 8 9 10 11 12 13 | LPDISPATCH CAutoPieDoc::GetWindow() { // TODO: ここにプロパティ ハンドラを追加してください return m_autoWindow.GetIDispatch(TRUE); } void CAutoPieDoc::SetWindow(LPDISPATCH newValue) { // TODO: ここにプロパティ ハンドラを追加してください SetNotSupported(); } |
CToolBarのインスタンス関連
1 2 3 4 5 6 7 8 9 10 11 12 13 | LPDISPATCH CAutoPieDoc::GetToolbar() { // TODO: ここにプロパティ ハンドラを追加してください return m_autoToolbar.GetIDispatch(TRUE); } void CAutoPieDoc::SetToolbar(LPDISPATCH newValue) { // TODO: ここにプロパティ ハンドラを追加してください SetNotSupported(); } |
Revenueの値を取得設定します。
0-3の値が範囲です。
1 2 3 4 5 6 7 8 9 10 11 12 | int CAutoPieDoc::GetRevenue(int nQuarter) { ASSERT(nQuarter >=0 && nQuarter <=3); return m_nRevenues[nQuarter]; } void CAutoPieDoc::SetRevenue(int nQuarter, int nNewValue) { ASSERT(nQuarter >=0 && nQuarter <=3); m_nRevenues[nQuarter]=nNewValue; } |