这是一个利用LabWindows/CVI制作的不规则界面的播放器的例子,这个例子演示了如何获得不规则界面图形,图形的拖拽,以及个性化菜单的制作过程,其中的媒体播放功能并不是很全面,因为我已经用Windows
API函数重新封装了一个全新的MP3、MID、WMA、WAV解码器,并制作成了动态链接库,所以在这里不做过多演示。
本程序只是为了说明LabWindows/CVI的强大功能。但细心的同志很快会发现,其实在LabWindows/CVI中隐藏着数以百计的BUG,而且,有些是致命的硬伤!如果在编写程序时不去触碰它的伤处其实也是一门技巧。
这个程序使用了邦丰公司的播放器的皮肤来创建,用来展现真正复杂界面编程的过程。其中也包含了本人程序制作过程中的一些感想,请大家分享!
如果有观客对此感兴趣,我们可以进一步讨论!
程序内容:
1.图片的应用(重点)
2.拖拽效果
3.鼠标按下与抬起事件
4.mciSendString函数的初步使用
5.动画效果
程序的界面如下:
程序源代码为:
#include "windows.h"
#include "mmsystem.h"
#include
#include
#include "mci.h"
#include "animate.h"
#include "toolbox.h"
#include
#include
#include "不规则面板.h"
static int menubarhandle;
#include "mmsystem.h"
#include
#include
#include "mci.h"
#include "animate.h"
#include "toolbox.h"
#include
#include
#include "不规则面板.h"
static int menubarhandle;
static int listhandle;
static int handle;
static int handle;
static int panellisthandle;
static int panelHandle;
static int panelHandle;
static Rect mainrect;
static Rect listrect;
static Rect listrect;
struct sing {
int min;
int max;
int hour;
int minute;
int second;
int position;
char timelen[20];
}singer, showtime;
}singer, showtime;
static int flag = 0;
static char path[MAX_PATHNAME_LEN];
void regin (int panel, int control, HWND hwnd);
void mainposition (void);
int top (void);
void listposition (void);
void popupmenu (int panel, int control, int *left, int *top);
void mainposition (void);
int top (void);
void listposition (void);
void popupmenu (int panel, int control, int *left, int *top);
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE
hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
if (InitCVIRTE (hInstance, 0, 0) == 0)
return -1; /*
out of memory */
if ((panelHandle = LoadPanel (0,
"不规则面板.uir", PANEL)) < 0)
return -1;
panellisthandle = LoadPanel (0, "不规则面板.uir",
PANEL_LIST);
menubarhandle = LoadMenuBar (panelHandle,
"不规则面板.uir", MENUBAR);
AnimateCtrl_ConvertFromPictRing (panelHandle,
PANEL_ANIMATION);
GetPanelAttribute (panelHandle,
ATTR_SYSTEM_WINDOW_HANDLE, &handle);
GetPanelAttribute (panellisthandle,
ATTR_SYSTEM_WINDOW_HANDLE,
&listhandle);
regin(panelHandle, PANEL_PICTURE,
(HWND)handle);
regin(panellisthandle, PANEL_LIST_PICTURE_LIST,
(HWND)listhandle);
SetCtrlAttribute (panelHandle, PANEL_TEXTMSG,
ATTR_TEXT_BGCOLOR, VAL_TRANSPARENT);
//hin = GetWindowLong((HWND)handle,
GWL_HINSTANCE);
//h = GetDC((HWND)handle);
//hcur = LoadCursor((HINSTANCE)&hin,
IDC_HELP);
//hcur = LoadCursorFromFile("Normal.cur");
//hcur = SetCursor(hcur);
//WindowProc((HWND)handle,
{
//
//
//
//
//
//
// ShowCursor(FALSE);
AnimateCtrl_SetAttribute (panelHandle,
PANEL_ANIMATION, ATTR_ANIMATE_FRAME_INTERVAL, 0.7);
AnimateCtrl_SetAttribute (panelHandle,
PANEL_ANIMATION, ATTR_ANIMATE_ENABLED, 0);
SetMouseCursor
(VAL_POINTING_FINGER_CURSOR);
}
int CVICALLBACK panelCB (int panel, int event, void
*callbackData,
int eventData1, int
eventData2)
{
int modifier;
int character;
int vk;
switch (event)
{
case EVENT_KEYPRESS:
vk =
GetKeyPressEventVirtualKey (eventData2);
modifier =
GetKeyPressEventModifiers (eventData2);
character =
tolower(GetKeyPressEventCharacter (eventData2));
if (vk ==
VAL_ESC_VKEY)
{
QuitUserInterface
(0);
}
if ((modifier
== VAL_UNDERLINE_MODIFIER) && (character
== 'f'))
{
openfile(panelHandle,
PANEL_PICTURE_FILE, EVENT_LEFT_CLICK, 0, 0,
0);
}
break;
case EVENT_LEFT_CLICK:
ReleaseCapture();
SendMessage((HWND)handle,
WM_NCLBUTTONDOWN, HTCAPTION, 0);
if (flag ==
1)
{
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED, 1);
}
else
{
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED,
0);
}
break;
case EVENT_RIGHT_CLICK:
mainposition();
SetPanelAttribute
(panellisthandle, ATTR_LEFT, mainrect.left);
SetPanelAttribute
(panellisthandle, ATTR_TOP, top());
DisplayPanel
(panellisthandle);
flag =
1;
break;
case EVENT_LOST_FOCUS:
SetCtrlAttribute
(panelHandle, PANEL_TIMER, ATTR_ENABLED, 0);
break;
}
return 0;
}
{
}
int CVICALLBACK timer (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
switch (event)
{
case EVENT_TIMER_TICK:
mainposition();
SetPanelAttribute
(panellisthandle, ATTR_LEFT, mainrect.left);
SetPanelAttribute
(panellisthandle, ATTR_TOP, top());
break;
}
return 0;
}
{
}
int CVICALLBACK minimum (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
static int i = 0;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_MINIMUM, "minimum1.bmp");
i = 1;
break;
case EVENT_LEFT_MOUSE_UP:
if (i ==
1)
{
SetPanelAttribute
(panelHandle, ATTR_WINDOW_ZOOM, VAL_MINIMIZE);
SetPanelAttribute
(panellisthandle, ATTR_WINDOW_ZOOM, VAL_MINIMIZE);
DisplayImageFile
(panelHandle, PANEL_PICTURE_MINIMUM, "minimum.bmp");
i
= 0;
}
break;
}
return 0;
}
{
}
int CVICALLBACK shutdown (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
static int i = 0;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_SHUTDOWN, "shutdown1.bmp");
i = 1;
break;
case EVENT_LEFT_MOUSE_UP:
if (i ==
1)
{
QuitUserInterface
(0);
}
break;
}
return 0;
}
{
}
int CVICALLBACK openfile (int panel, int control, int
event,
void *callbackData, int
eventData1, int eventData2)
{
int left;
int top;
int id;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_FILE, "file1.bmp");
popupmenu(panelHandle,
PANEL_PICTURE_FILE, &left, &top);
id =
RunPopupMenu (menubarhandle, MENUBAR_FILE, panelHandle, top, left,
0, 0, 0, 0);
if (id >=
0)
{
DisplayImageFile
(panelHandle, PANEL_PICTURE_FILE,
"file.bmp");
}
break;
}
return 0;
}
{
}
int CVICALLBACK view (int panel, int control, int event,
void *callbackData, int
eventData1, int eventData2)
{
int left;
int top;
int id;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_VIEW, "view1.bmp");
popupmenu(panelHandle,
PANEL_PICTURE_VIEW, &left, &top);
id =
RunPopupMenu (menubarhandle, MENUBAR_FILE, panelHandle, top, left,
0, 0, 0, 0);
if (id >=
0)
{
DisplayImageFile
(panelHandle, PANEL_PICTURE_VIEW,
"view.bmp");
}
break;
}
return 0;
}
{
}
int CVICALLBACK play (int panel, int control, int event,
void *callbackData, int
eventData1, int eventData2)
{
int left;
int top;
int id;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_PLAY, "play1.bmp");
popupmenu(panelHandle,
PANEL_PICTURE_PLAY, &left, &top);
id =
RunPopupMenu (menubarhandle, MENUBAR_FILE, panelHandle, top, left,
0, 0, 0, 0);
if (id >=
0)
{
DisplayImageFile
(panelHandle, PANEL_PICTURE_PLAY,
"play.bmp");
}
break;
}
return 0;
}
{
}
int CVICALLBACK tool (int panel, int control, int event,
void *callbackData, int
eventData1, int eventData2)
{
int left;
int top;
int id;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_TOOL, "tool1.bmp");
popupmenu(panelHandle,
PANEL_PICTURE_TOOL, &left, &top);
id =
RunPopupMenu (menubarhandle, MENUBAR_FILE, panelHandle, top, left,
0, 0, 0, 0);
if (id >=
0)
{
DisplayImageFile
(panelHandle, PANEL_PICTURE_TOOL,
"tool.bmp");
}
break;
}
return 0;
}
{
}
int CVICALLBACK help (int panel, int control, int event,
void *callbackData, int
eventData1, int eventData2)
{
int left;
int top;
int id;
switch (event)
{
case EVENT_LEFT_CLICK:
DisplayImageFile
(panelHandle, PANEL_PICTURE_HELP, "help1.bmp");
popupmenu(panelHandle,
PANEL_PICTURE_HELP, &left, &top);
id =
RunPopupMenu (menubarhandle, MENUBAR_FILE, panelHandle, top, left,
0, 0, 0, 0);
if (id >=
0)
{
DisplayImageFile
(panelHandle, PANEL_PICTURE_HELP,
"help.bmp");
}
break;
}
return 0;
}
{
}
//打开菜单
void CVICALLBACK open (int menuBar, int menuItem, void *callbackData,
int panel)
{
int status;
char *lpstrReturnString ;
UINT uReturnLength = 128;
char filename[500];
void CVICALLBACK open (int menuBar, int menuItem, void *callbackData,
{

加载中…