Custom Solver
ConnSolverPropPage.h
// Copyright 2009 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 



#pragma once

#include "resource.h"                                           // main symbols
#include "\Program Files\ArcGIS\Include\CatIDs\ArcCATIDs.h"     // component category IDs
#include "ConnectivitySolver.h"

// ConnSolverPropPage
[
  coclass,
  default(IUnknown),
  threading(apartment),
  vi_progid("CustomSolver.ConnSolverPropPage"),
  progid("CustomSolver.ConnSolverPropPage.1"),
  version(1.0),
  uuid("241CF566-AFEF-40D3-8ADC-3914AF4CED16"),
  helpstring("ConnSolverPropPage Class")
]
class ATL_NO_VTABLE ConnSolverPropPage :
  public IPropertyPageImpl<ConnSolverPropPage>,
  public CDialogImpl<ConnSolverPropPage>,
  public IPropertyPageContext
{
public:
  ConnSolverPropPage()
  {
    m_dwTitleID = IDS_TITLECONNSOLVERPROPPAGE;
    m_dwHelpFileID = IDS_HELPFILECONNSOLVERPROPPAGE;
    m_dwDocStringID = IDS_DOCSTRINGCONNSOLVERPROPPAGE;
  }

  DECLARE_PROTECT_FINAL_CONSTRUCT()

  // Register the property page in the Property Page and Layer Property Page component categories so that it can be dynamically discovered
  // as an available property page for the ConnectivitySolver.
  BEGIN_CATEGORY_MAP(ConnectivitySymbolizer)
    IMPLEMENTED_CATEGORY(__uuidof(CATID_PropertyPages))
    IMPLEMENTED_CATEGORY(__uuidof(CATID_LayerPropertyPages))
  END_CATEGORY_MAP()

  HRESULT FinalConstruct()
  {
    return S_OK;
  }

  void FinalRelease()
  {
  }

  enum {IDD = IDD_CONNSOLVERPROPPAGE};

  BEGIN_MSG_MAP(ConnSolverPropPage)
    CHAIN_MSG_MAP(IPropertyPageImpl<ConnSolverPropPage>)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_HANDLER(IDC_RADIO_CONNECTED, BN_CLICKED, OnBnClickedRadioConnected)
    COMMAND_HANDLER(IDC_RADIO_DISCONNECTED, BN_CLICKED, OnBnClickedRadioDisconnected)
    COMMAND_HANDLER(IDC_COMBO_SHAPE, CBN_SELCHANGE, OnCbnSelchangeComboShape)
  END_MSG_MAP()

  // Handler prototypes:
  //  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  //  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  //  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

  // IPropertyPage

  STDMETHOD(Apply)(void);
  STDMETHOD(Show)(UINT nCmdShow);
  STDMETHOD(SetObjects)(ULONG nObjects, IUnknown** ppUnk);

  // IPropertyPageContext

  STDMETHOD(get_Priority)(LONG* pPriority);
  STDMETHOD(Applies)(VARIANT unkArray, VARIANT_BOOL* pApplies);
  STDMETHOD(CreateCompatibleObject)(VARIANT kind, VARIANT* pNewObject);
  STDMETHOD(QueryObject)(VARIANT theObject);
  STDMETHOD(GetHelpFile)(LONG controlID, BSTR* pHelpFile);
  STDMETHOD(GetHelpId)(LONG controlID, LONG* pHelpID);
  STDMETHOD(Cancel)();

  // Dialog

  LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  LRESULT OnBnClickedRadioConnected(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  LRESULT OnBnClickedRadioDisconnected(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  LRESULT OnCbnSelchangeComboShape(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);

private:
  INALayerPtr             m_ipNALayer;
  IConnectivitySolverPtr  m_ipConnectivitySolver;
  IDENetworkDatasetPtr    m_ipDENet;

  HWND                    m_hConnected;
  HWND                    m_hDisconnected;
  HWND                    m_hOutputShape;
};