Добавление кнопки плагина к окну сообщения QIP

В этом примере узнаем, как можно создать кнопку плагина в окне сообщения программы QIP, а также добавить ей событие. Для этого будет использоваться плагин заготовка, необходимые действия описаны в виде алгоритма действий:

1. Добавить новую переменную с типом TAddBtnInfo, в определении класса TQipPlugin:

class TQipPlugin : public IQIPPlugin
{
	public:
		ULONG   __stdcall	AddRef();
		HRESULT	__stdcall	QueryInterface(REFIID riid, void** ppvObject);
		ULONG   __stdcall	Release();

		TQipPlugin(IQIPPluginService* PluginService);	
		~TQipPlugin();

		TPluginInfo* __stdcall	GetPluginInfo();
		void         __stdcall	OnQipMessage(TPluginMessage* PlugMsg);

	private:	
		ULONG PlugCntr;
		IQIPPluginService * PlugServ;
		TPluginInfo PlugInfo;
		TAddBtnInfo PluginButton;
  
};

2. Добавить к функции OnQipMessage обработку событий PM_PLUGIN_CAN_ADD_BTNS И PM_PLUGIN_MSG_BTN_CLICK:

case PM_PLUGIN_CAN_ADD_BTNS: 
	PluginButton.BtnPNG = NULL;
	PluginButton.BtnHint = SysAllocString(L"Кнопка плагина");
	PluginButton.BtnIcon = ::LoadIcon(NULL,IDI_INFORMATION);
        
    TPluginMessage retMsg;
	retMsg.Msg       = PM_PLUGIN_ADD_BTN;
	retMsg.DllHandle = PlugInfo.DllHandle;
	retMsg.WParam = PtrToInt(&PluginButton);
	retMsg.LParam = NULL;
	retMsg.NParam = NULL;
	retMsg.Result = 0;

	PlugServ->OnPluginMessage ( &retMsg );
break;

case PM_PLUGIN_MSG_BTN_CLICK:
        MessageBox(NULL,L"Нажатие на кнопку",L"MyQipPlugin",MB_OK|MB_ICONINFORMATION);
break;

3. Добавить удаление используемых ресурсов в обработке событий PM_PLUGIN_QUIT и PM_PLUGIN_DISABLE:

case PM_PLUGIN_QUIT:
case PM_PLUGIN_DISABLE:
	DestroyIcon(PluginButton.BtnIcon);
	SysFreeString(PluginButton.BtnHint);
break;

Результат работы плагина:
Добавление кнопки плагина к окну сообщения QIP

Скачать плагин