93 lines
3.0 KiB
C
93 lines
3.0 KiB
C
|
#ifndef _WA_ML_IPC_H_
|
||
|
#define _WA_ML_IPC_H_
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <stddef.h>
|
||
|
|
||
|
//# IPC_LIBRARY_SENDTOMENU
|
||
|
/*
|
||
|
Basically for the sendto menu, do this:
|
||
|
librarySendToMenuStruct s={0,};
|
||
|
int IPC_LIBRARY_SENDTOMENU=SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)&"LibrarySendToMenu",IPC_REGISTER_WINAMP_IPCMESSAGE);
|
||
|
if (IPC_LIBRARY_SENDTOMENU > 65536 && SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)0,IPC_LIBRARY_SENDTOMENU)==0xffffffff)
|
||
|
{
|
||
|
s.mode=1;
|
||
|
s.hwnd=myWnd;
|
||
|
s.data_type=mydatatype;
|
||
|
s.build_hMenu=mysubmenu;
|
||
|
}
|
||
|
TrackPopupMenu();
|
||
|
if (ret)
|
||
|
{
|
||
|
if (unrecognized ret)
|
||
|
{
|
||
|
if (s.mode == 2)
|
||
|
{
|
||
|
s.menu_id=ret;
|
||
|
if (SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)&s,IPC_LIBRARY_SENDTOMENU)==0xffffffff)
|
||
|
{
|
||
|
// build my data.
|
||
|
s.mode=3;
|
||
|
s.data=my data;
|
||
|
SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)&s,IPC_LIBRARY_SENDTOMENU)
|
||
|
// free my data
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (s.mode)
|
||
|
{
|
||
|
s.mode=4;
|
||
|
SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)&s,IPC_LIBRARY_SENDTOMENU) // cleanup
|
||
|
}
|
||
|
|
||
|
...
|
||
|
|
||
|
WM_INITMENUPOPUP:
|
||
|
if (wParam && (HMENU)wParam == s.build_hMenu && s.mode==1)
|
||
|
{
|
||
|
if (SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)&s,IPC_LIBRARY_SENDTOMENU)==0xffffffff)
|
||
|
s.mode=2;
|
||
|
}
|
||
|
|
||
|
kinda complex and gross, yes?
|
||
|
|
||
|
|
||
|
*/
|
||
|
typedef struct { // always init this to all 0s
|
||
|
|
||
|
int mode; // mode can be 0, to see if sendto is available. If sendto is available, we'll return 0xffffffff.
|
||
|
// mode = 1 means we are building the menu. data_type should be set. on success, this will return 0xffffffff.
|
||
|
// mode = 2 means we are querying if our menu_id is handled by the sendto menu. returns 0xffffffff if it was.
|
||
|
// mode = 3 means we are sending the data. return value is not important =)
|
||
|
// be sure to have set data_type, menu_id, and data, for this one.
|
||
|
// mode = 4 means to cleanup this structure.
|
||
|
|
||
|
// build parms
|
||
|
HMENU build_hMenu; // set this to the HMENU
|
||
|
int build_start_id; // override the start and endpoints of IDs it can use
|
||
|
int build_end_id; // or leave as 0s for defaults.
|
||
|
|
||
|
// type used for build and send modes (ML_TYPE_*)
|
||
|
int data_type;
|
||
|
|
||
|
int menu_id;
|
||
|
|
||
|
void *data; // only used in mode = 3
|
||
|
|
||
|
HWND hwnd; // parent for sendto
|
||
|
|
||
|
// specify ctx[1]=1 to disable 'enqueue in winamp' on the menu
|
||
|
// specify ctx[2]=(ML_TYPE_*)+1 as the originally intended data_type
|
||
|
intptr_t ctx[32]; // internal winamp use
|
||
|
} librarySendToMenuStruct;
|
||
|
|
||
|
//IPC_GETMLWINDOW
|
||
|
//int IPC_GETMLWINDOW=SendMessage(hMainWindow,WM_WA_IPC,(WPARAM)&"LibraryGetWnd",IPC_REGISTER_WINAMP_IPCMESSAGE);
|
||
|
//
|
||
|
//then:
|
||
|
// to ensure library's db is loaded: if (IPC_GETMLWINDOW>65536) SendMessage(hMainWindow,WM_WA_IPC,-1,IPC_GETMLWINDOW);
|
||
|
// or to get the HWND of the library (for library APIs): HWND hwndlib = IPC_GETMLWINDOW>65536 ? SendMessage(hMainWindow,WM_WA_IPC,0,IPC_GETMLWINDOW) : 0;
|
||
|
|
||
|
#endif//_WA_ML_IPC_H_
|