加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

利用LabWindows/CVI实现媒体文件的播放(三)

(2006-11-26 11:31:13)
分类: LabWindow/CVI技术文章
  续“利用LabWindows/CVI实现媒体文件的播放(二)”
 
代码如下:
 
//关于对话框
void CVICALLBACK about (int menuBar, int menuItem, void *callbackData,
  int panel)
{
 aboutpanelhandle = LoadPanel (0, "mediaplayer.uir", PANEL_ABOU);
 InstallPopup (aboutpanelhandle);
}
//打开媒体文件
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 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 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,
  void *callbackData, int eventData1, int eventData2)
{
 enum WMPLibEnum_WMPPlayState pwmpps;  
 switch (event)
 {
  case EVENT_TIMER_TICK:
   WMPLib_IWMPPlayer4GetplayState (objecthandle, NULL, &pwmpps);
   if (pwmpps == WMPLibConst_wmppsMediaEnded  ||  pwmpps == WMPLibConst_wmppsStopped)
   {
    if (looporrandom == 1)   //random 
    {
     k = Random (0, k+1);
    }
    switch ((int)k)
    {
     case 1:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '1');
      break;
     case 2:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '2');
      break;
     case 3:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '3');
      break;
     case 4:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '4');
      break;
     case 5:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '5');
      break;
     case 6:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '6');
      break;
     case 7:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '7');
      break;
     case 8:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '8');
      break;
     case 9:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '9');
      break;
     case 0:
      FakeKeystroke (VAL_MENUKEY_MODIFIER | '0');
      break;
      }
   
   break;  
 }
 return 0;
}
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);   
   }
   break;
 }
 return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有