Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Нет, к сожалению нельзя. 26.10.05 07:19 Число просмотров: 1465
Автор: void <Grebnev Valery> Статус: Elderman
|
> А потом использовать по мере необходимости Нет, к сожалению нельзя.
Это стандарная задача написания пользовательских контролов и команд для ArcGIS.
Каждая команда в их архитектуре - COM сервер. Для отривоски пиктограммы COM, имплементирующий команду, сам должен загрузить свой битмап, и в одном из паблик методов, вызываемых ArcGIS-сом возвратить ему HBITMAP, типа:
class ATL_NO_VTABLE CGaussTool :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CGaussTool, &CLSID_GaussTool>,
public IGaussTool,
public ICommand
{
private:
IApplicationPtr m_ipApp;
IDocumentPtr m_ipDoc;
HBITMAP m_bitmap;
public:
CGaussTool();
~CGaussTool();
...
BEGIN_COM_MAP(CGaussTool)
COM_INTERFACE_ENTRY(ICommand)
COM_INTERFACE_ENTRY(IGaussTool)
END_COM_MAP()
BEGIN_CATEGORY_MAP(CGaussTool)
IMPLEMENTED_CATEGORY(__uuidof(CATID_MxCommands))
END_CATEGORY_MAP()
...
public:
// ICommand
STDMETHOD (get_Enabled) (VARIANT_BOOL * Enabled);
STDMETHOD (get_Checked) (VARIANT_BOOL * Checked);
STDMETHOD (get_Name) (BSTR * Name);
STDMETHOD (get_Caption) (BSTR * Caption);
STDMETHOD (get_Tooltip) (BSTR * Tooltip);
STDMETHOD (get_Message) (BSTR * Message);
STDMETHOD (get_HelpFile) (BSTR * HelpFile);
STDMETHOD (get_HelpContextID) (LONG * helpID);
STDMETHOD (get_Bitmap) (OLE_HANDLE * Bitmap);
STDMETHOD (get_Category) (BSTR * categoryName);
STDMETHOD (OnCreate) (IDispatch * hook);
STDMETHOD (OnClick) ( void );
};
CGaussTool::CGaussTool()
{
m_bitmap = ::LoadBitmap(_AtlModule.m_hInst, MAKEINTRESOURCE(IDB_BITMAP_GAUSS));
(IDB_BITMAP_GAUSS));
}
CGaussTool::~CGaussTool()
{
DeleteObject(m_bitmap);
}
STDMETHODIMP CGaussTool::get_Bitmap(OLE_HANDLE * Bitmap)
{
if (Bitmap == NULL)
return E_POINTER;
*Bitmap = (OLE_HANDLE) m_bitmap;
return S_OK;
}
Не понятно, как улучшив ATL7 в сравнении с ATL3, MS избавили девелоперов от полезной функциональности CComModule, вчастности, от CComModule::m_hInst.
|
|
|