если вы видите этот текст, отключите в настройках форума использование JavaScript
Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания .
Новичкам также крайне полезно ознакомиться с данным документом .
Вопрос закрыт. Разобрался. 27.10.05 18:36 Число просмотров: 1471
Автор: void <Grebnev Valery> Статус: Elderman
Посмотрел подробнее имплементацию CAtlModuleT в atlbase.h ...
Так вот, там я обнаружил обращение к _AtlBaseModule.m_hInst.
Как оказалось потом, _AtlBaseModule заменяет в ATL7 старый CComModule::_Module, см.
http://support.microsoft.com/kb/309705/EN-US/
Так, что вопрос закрыт. Вызов работает на ура.
m_bitmap = ::LoadBitmap(_AtlBaseModule.m_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
Спасибо всем.
<programming >
[C++] ATL7 @ module handle 25.10.05 04:10
Автор: void <Grebnev Valery> Статус: Elderman
В проекте ATL7 есть класс модуля COM сервера. Типа
class CMyObjectsModule : public CAtlDllModuleT< CMyObjectsModule >
{
.....
};
CMyObjectsModule _AtlModule;
Надо получить хендл модуля hInstance для того, чтобы потом сделать, например,
HINSTANCE hInstance;
hInstance = ????????
m_bitmap = ::LoadBitmap( hInstance , MAKEINTRESOURCE(IDB_BITMAP_MYBITMAP));
GetModuleHandle( NULL ) - не прокатывает.
Сделал коряво:
class CMyObjectsModule :
public CAtlDllModuleT< CMyObjectsModule >,
public CAtlBaseModule
{
...
};
CMyObjectsModule _AtlModule;
Зато теперь можно сделать
m_bitmap = ::LoadBitmap(_AtlModule.m_hInst, MAKEINTRESOURCE(IDB_BITMAP_MYBITMAP));
Как сделать хорошо?
Спасибо.
Вопрос закрыт. Разобрался. 27.10.05 18:36
Автор: void <Grebnev Valery> Статус: Elderman
Посмотрел подробнее имплементацию CAtlModuleT в atlbase.h ...
Так вот, там я обнаружил обращение к _AtlBaseModule.m_hInst.
Как оказалось потом, _AtlBaseModule заменяет в ATL7 старый CComModule::_Module, см.
http://support.microsoft.com/kb/309705/EN-US/
Так, что вопрос закрыт. Вызов работает на ура.
m_bitmap = ::LoadBitmap(_AtlBaseModule.m_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
Спасибо всем.
А тот hinstance, который в WinMain передается нельзя сохранить? 25.10.05 13:54
Автор: amirul <Serge> Статус: The Elderman
А потом использовать по мере необходимости
Нет, к сожалению нельзя. 26.10.05 07:19
Автор: 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.