续“利用LabWindows/CVI实现媒体文件的播放(二)”
代码如下:
//关于对话框
void CVICALLBACK about (int menuBar, int menuItem, void *callbackData,
int panel)
{
aboutpanelhandle = LoadPanel (0,
"mediaplayer.uir", PANEL_ABOU);
InstallPopup (aboutpanelhandle);
}
void CVICALLBACK about (int menuBar, int menuItem, void *callbackData,
{
}
//打开媒体文件
int CVICALLBACK openfile (int panel, int control, int event,
void *callbackData, int
eventData1, int eventData2)
{
int len;
char
pathname[MAX_PATHNAME_LEN];
switch (event)
{
case EVENT_COMMIT:
if (control
== PANEL_OPEN_BTN_OPENFILE)
{
GetCtrlVal
(openURLhandle, PANEL_OPEN_STRING_OPENFILE, pathname);
WMPLib_IWMPPlayer4SetURL
(objecthandle, NULL, pathname);
DiscardPanel
(openURLhandle);
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED, 1);
addmenu();
}
break;
case EVENT_VAL_CHANGED:
GetCtrlAttribute
(openURLhandle, PANEL_OPEN_STRING_OPENFILE,
ATTR_STRING_TEXT_LENGTH, &len);
if
(len>0)
{
SetCtrlAttribute
(openURLhandle, PANEL_OPEN_BTN_OPENFILE, ATTR_DIMMED, 0);
}
else
{
SetCtrlAttribute
(openURLhandle, PANEL_OPEN_BTN_OPENFILE, ATTR_DIMMED, 1);
}
break;
}
return 0;
}
int CVICALLBACK openfile (int panel, int control, int event,
{
}
//取消按钮
int CVICALLBACK cancel (int panel, int control, int event,
void *callbackData, int
eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DiscardPanel
(openURLhandle);
break;
}
return 0;
}
int CVICALLBACK cancel (int panel, int control, int event,
{
}
int CVICALLBACK fileurl (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
fileopen(MENUBAR,
MENUBAR_FILE_FILEOPEN, 0, PANEL);
DiscardPanel
(openURLhandle);
break;
}
return 0;
}
{
}
int CVICALLBACK panelCB (int panel, int event, void
*callbackData,
int eventData1, int
eventData2)
{
int zoom;
int titlebar;
int virtualkey;
char *pval;
int panelwidth;
int panelheight;
char **pathname;
int handle;
switch (event)
{
case EVENT_CLOSE:
QuitUserInterface
(0);
break;
case EVENT_PANEL_SIZE:
GetPanelAttribute
(panelHandle, ATTR_HEIGHT, &panelheight);
GetPanelAttribute
(panelHandle, ATTR_WIDTH, &panelwidth);
SetCtrlAttribute
(panelHandle, PANEL_WINDOWSMEDIAPLAYER, ATTR_LEFT, 0);
SetCtrlAttribute
(panelHandle, PANEL_WINDOWSMEDIAPLAYER, ATTR_TOP, 0);
SetCtrlAttribute
(panelHandle, PANEL_WINDOWSMEDIAPLAYER, ATTR_HEIGHT,
panelheight);
SetCtrlAttribute
(panelHandle, PANEL_WINDOWSMEDIAPLAYER, ATTR_WIDTH,
panelwidth);
break;
case EVENT_KEYPRESS:
virtualkey =
GetKeyPressEventVirtualKey (eventData2);
if
(virtualkey == VAL_ESC_VKEY)
{
SetPanelAttribute
(panelHandle, ATTR_MENU_BAR_VISIBLE, 1);
SetPanelAttribute
(panelHandle, ATTR_TITLEBAR_VISIBLE, 1);
SetPanelAttribute
(panelHandle, ATTR_WINDOW_ZOOM, VAL_NO_ZOOM);
}
break;
case EVENT_FILESDROPPED:
pathname =
(char **)(eventData1);
WMPLib_IWMPPlayer4SetURL
(objecthandle, NULL, pathname[0]);
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED, 1);
break;
case EVENT_LEFT_CLICK:
GetPanelAttribute
(panelHandle, ATTR_TITLEBAR_VISIBLE, &titlebar);
GetPanelAttribute
(panelHandle, ATTR_WINDOW_ZOOM, &zoom);
if (titlebar
== 0 && zoom != VAL_MAXIMIZE)
{
GetPanelAttribute
(panelHandle, ATTR_SYSTEM_WINDOW_HANDLE,
&handle);
ReleaseCapture();
SendMessage
((HWND)handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
break;
}
return 0;
}
{
}
int CVICALLBACK timer (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
enum WMPLibEnum_WMPPlayState pwmpps;
switch (event)
{
case EVENT_TIMER_TICK:
WMPLib_IWMPPlayer4GetplayState
(objecthandle, NULL, &pwmpps);
if (pwmpps ==
WMPLibConst_wmppsPlaying || pwmpps ==
WMPLibConst_wmppsStopped ||
pwmpps == WMPLibConst_wmppsPaused)
{
resize();
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED,
0);
}
break;
}
return 0;
}
{
}
void resize (void)
{
int ctrlheight;
int ctrlwidth;
GetCtrlAttribute (panelHandle,
PANEL_WINDOWSMEDIAPLAYER, ATTR_HEIGHT, &ctrlheight);
GetCtrlAttribute (panelHandle,
PANEL_WINDOWSMEDIAPLAYER, ATTR_WIDTH, &ctrlwidth);
SetPanelAttribute (panelHandle, ATTR_HEIGHT,
ctrlheight);
SetPanelAttribute (panelHandle, ATTR_WIDTH,
ctrlwidth);
}
{
}
int CVICALLBACK mediaplayer (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
int popupmenubarhandle;
switch (event)
{
case EVENT_RIGHT_CLICK:
RunPopupMenu
(menubarhandle, MENUBAR_VIEW, panelHandle, eventData1, eventData2,
0, 0, 0, 0);
break;
case EVENT_LEFT_CLICK:
Delay(0.1);
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED,
1);
break;
}
return 0;
}
{
}
int CVICALLBACK marquee (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
int panelheight;
int ctrlheight;
int ctrltop;
switch (event)
{
case EVENT_TIMER_TICK:
GetCtrlAttribute
(aboutpanelhandle, PANEL_ABOU_TEXTMSG, ATTR_TOP,
&ctrltop);
GetCtrlAttribute
(aboutpanelhandle, PANEL_ABOU_TEXTMSG, ATTR_HEIGHT,
&ctrlheight);
GetPanelAttribute
(aboutpanelhandle, ATTR_HEIGHT, &panelheight);
if
(ctrltop>=-ctrlheight)
{
SetCtrlAttribute
(aboutpanelhandle, PANEL_ABOU_TEXTMSG, ATTR_TOP, ctrltop-=3);
}
else
{
SetCtrlAttribute
(aboutpanelhandle, PANEL_ABOU_TEXTMSG, ATTR_TOP,
panelheight);
}
break;
}
return 0;
}
{
}
int CVICALLBACK shutaboutpanel (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
DiscardPanel
(aboutpanelhandle);
break;
}
return 0;
}
{
}
void addmenu (void)
{
enum WMPLibEnum_WMPPlayState pwmpps;
char filename[256];
char *pbstrURL;
static int i;
WMPLib_IWMPPlayer4GetURL (objecthandle, NULL,
&pbstrURL);
SplitPath (pbstrURL, NULL, NULL,
filename);
if (i == 10)
{
i = 0;
}
switch (i)
{
case 0:
menuitemid[0]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '0',
EventFunctionName, pbstrURL);
break;
case 1:
menuitemid[1]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '1',
EventFunctionName, pbstrURL);
break;
case 2:
menuitemid[2]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '2',
EventFunctionName, pbstrURL);
break;
case 3:
menuitemid[3]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '3',
EventFunctionName, pbstrURL);
break;
case 4:
menuitemid[4]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '4',
EventFunctionName, pbstrURL);
break;
case 5:
menuitemid[5]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '5',
EventFunctionName, pbstrURL);
break;
case 6:
menuitemid[6]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '6',
EventFunctionName, pbstrURL);
break;
case 7:
menuitemid[7]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '7',
EventFunctionName, pbstrURL);
break;
case 8:
menuitemid[8]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '8',
EventFunctionName, pbstrURL);
break;
case 9:
menuitemid[9]
= NewMenuItem (menubarhandle, MENUBAR_FILE, filename,
MENUBAR_FILE_SEPARATOR_8, VAL_MENUKEY_MODIFIER | '9',
EventFunctionName, pbstrURL);
break;
}
i++;
max++;
if (max >= 10)
{
max = 10;
}
}
{
}
void CVICALLBACK EventFunctionName (int menuBarHandle, int
menuItemID, void *callbackData, int panelHandle)
{
int i;
for (k=0; k<10; k++)
{
if (menuItemID ==
menuitemid[k])
{
WMPLib_IWMPPlayer4SetURL
(objecthandle, NULL, callbackData);
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED,
1);
break;
}
}
k++;
if (k >= max)
{
k = 0;
}
}
{
}
int CVICALLBACK looprandom (int panel, int control, int event,
{
}
int CVICALLBACK detect (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
int panelwidth;
int panelheight;
int ctrlwidth;
int ctrlheight;
switch (event)
{
case EVENT_TIMER_TICK:
GetCtrlAttribute
(panelHandle, PANEL_WINDOWSMEDIAPLAYER, ATTR_HEIGHT,
&ctrlheight);
GetCtrlAttribute
(panelHandle, PANEL_WINDOWSMEDIAPLAYER, ATTR_WIDTH,
&ctrlwidth);
GetPanelAttribute
(panelHandle, ATTR_HEIGHT, &panelheight);
GetPanelAttribute
(panelHandle, ATTR_WIDTH, &panelwidth);
if
(ctrlheight != panelheight || ctrlwidth !=
panelwidth)
{
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED, 1);
}
{
}