C#如何实现 千千静听炫紫神话皮肤的那种皮肤 C++ 或者VB。net也行

C++ JAVA C C# .NET有什么区别啊_百度知道
C++ JAVA C C# .NET有什么区别啊
现在最流行的高级语言主要应该是C/C++(我喜欢统一叫C语系,下文也统一称为C语系),.net(无论C#.NET还是VB.NET,我是使用C#的),JAVA三种语言。很多人对于这些语言有很大的误区,也没有一个清晰的认识。这里我来说说这三个语言吧。首先说说C语系:C语系和里C和C++基本在语法结构上,还是关键字上还是功能上都没有太大的差别,但是两者还是有一个小小的差别——C是面向过程的,而C++则是在C的基础上采用了面向对象的思路。另外,在一些关键字的用法上有一些差别,主要体现在以下几个方面:1、基础函数库的不同——包括库内某些函数库的不同;2、C++引入了命名空间的概念;3、最直接的感受——输入输出等关键字的不同;4、类及类相关的概念——C++中出现了面向对象的思想;(很多学习C++的朋友并没有学会这个思想,而是用的面向过程的思想,C++对于这两种编程方式都是支持的)。而其他的用法都是几乎相同的。C语系的最大的特点就是指针——对内存地址的直接访问和运算。程序员可以直接对内存空间进行各种操作,这为C语系的编程带来了极大的灵活性。但是这也是C语系的一个极大的缺陷——对内存的操作失误经常是导致程序内存空间高消耗从而引发响应问题乃至于崩溃的直接和根本原因.而内存操作是否合适,编译器是无法识别的,只有在程序的运行和测试中才能发现,这也是C语系的工程开发进度缓慢的直接原因。当然,另一个原因就是C语系下的很多代码都需要自己写,很少有人提供各种现成的库供编程者使用,而这些提前编译好,具有各种功能的库在C语系下一般称为 “引擎”。当然了还有一个大家更为熟悉的名称——动态函数库,这个名字在JAVA和.NET中也是这样使用的。这是题外话了。C语系也是目前最完善和稳定的高级程序语言。C语系逻辑严谨,结构清晰。编写的程序具有良好的可读性和高效性。而且如果编程合理,程序健壮性也是非常客观的(当然,这些完全依赖于算法和结构的设计——许多对内存空间的直接访问和直接操作提高程序执行的效率)。C语系的强大的灵活性使得其称为大型工程中的不可替代的高级编程语言。但是C语系本身的特性也导致了明显的缺陷——编码、编译后的程序体积大;程序的可移植性低,编译后无法修改等。由此诞生我们熟悉的另外两种语言——.net 和java。下面来谈JAVA:JAVA 是由SUN公司以C为蓝板研发的,本来开发的目的是为了作驱动编程。用以方便对各种电子设备的联网或者互联操作的语言,所以在设计初期就引入了许多在当时非常先进的思想——体积小(为了能够进行嵌入),高可移植性,高效性,面向对象。同时为了避免内存分配失误引起的尴尬,JAVA取消了C语系给编程人员直接访问内存的权限,内存的分配完全由JAVA解释器来负责。为了达到高移植性JAVA采用了一个特殊的方式:所有的JAVA程序编写完以后并不是直接编译,而是形成归档文件包——一种可以被JAVA解释器解释的中间代码。需要运行的时候由JAVA解释器来解压并执行。而取消了内存的直接操作带来的最直接的影响就是代码体积的迅速减小——JAVA程序员不会费尽心思去想尽办法折腾内存操作了,这使得程序员的所有心思都放到了直接的算法功能上。当然,不能直接操作内存,所有跟内存相关的类型也都自然而然的取消了,这就不存在了那么多“乱七八糟”的地址引用了。这些都使得程序代码迅速减小。各种各样的改进之后,我们熟悉的JAVA出现了——在具备了以上的特性之外,JAVA的缺点也逐渐显示了出来:由于无法进行复杂的操作,所以如果要编写复杂的代码,程序的效率就会瞬间降低(因为要嵌套过多的函数层)。最后,编程人员们终于认定了一个事实——JAVA不适合用来实现复杂的功能,但是却非常适合那些功能简单,过程并不复杂的功能。于是,除了驱动编程,JAVA最终应用在了我们熟悉的地方——网络小程序,手机应用程序。好了,最后我们来谈谈.NET——同时也谈下C#:其实C#和.NET根本就是一体的,怎么这么说呢?我们现来看看.NET,.NET是微软为了提高网页编程人员的效率及网页编程的安全性,在ASP的基础上提出了后台代码分离的概念。同时为了简便后台代码开发,微软将许多控件整合编写了大量的(服务器)控件函数。形成了一个高效,安全的网页编程语言.net,在ASP时,功能函数都是由Script提供的,主要是基于VB和JAVA,在.net里,为了方便许多C语言的程序员转型实现高效的服务器编程——不知道是不是微软也一直觉得C语系的程序员才培养了好的编程习惯啊——于是将C++进行改良,主要是加强了网络和数据处理方面的功能(通过编写了一大堆的网络和数据相关的控件),同时将C语系的指针取消了——看来随意访问内存带来的问题烦倒了真是无数的人啊,同时改变了MFC的界面设计方式(借鉴采用了C++Builder的GUI设计界面的方式)——这就形成了我们现在认识的C#。而当其作为.net的后台语言时就是c#.net了。c#主要是为了开发一些和网络相关的程序,c#主要的问题也是.net的问题在于运行程序的机器必须安装有相应版本的framwork——微软的东西向来移植性都很低,即便是用C语系开发的程序也完全没有什么移植性,更何况是他们自己研究出来的一个语言了。而.net则是专门用于WEB编程的一个架构平台,当然也可以些application,但是并不合适,application还是直接用c#或者c语系好了。当然,.net的优势大家还是有目共睹的,尤其是代码分离后带来的网站安全性的提高,得到了大家一致的赞同,因此现在Linux平台在内的*NIX系统也开始支持.net了。最后总结一下几个语言的特点及现阶段主要的应用方向:C语系: 稳定,灵活,高效 ——————各种大型应用程序、系统的编写,底层的开发——包括操作系统,内核功能的编写等;JAVA:高效,体积小,可移植性——————硬件驱动的编写,嵌入式程序,手机应用程序,网络小程序等各种需要在可使用资源较少的功能不太复杂的程序;.NET:开发周期短,代码复用率高,安全性好——————————WebSite及web服务编程;C#:开发周期短,对网络和数据访问功能——————————各种和网络有关的Applications;
其他类似问题
25人觉得有用
为您推荐:
提问者采纳
C语言是很早的一个变成语言.net不是一个语言c++是一个面向对象语言的一种国际标准,有C++的编程风格。.net,他只是一种语言,和java竞争,java解决了程序跨平台问题,java的运行需要java运行平台,用它比用汇编方便。,是面向过程的语言,他除了是一种语言,他只是比汇编语言高级些。, 。,他摒弃了C++的一些缺点。。.net,就开发了C#,微软觉得你的钱赚的太多了,还是一个运行环境,所以,适合编写底层代码。
C#就是微软的一个山寨JAVA(说的夸张了点),c#的运行平台就是,java一种跨平台的纯面向对象语言
提问者评价
其他4条回答
一般用于开发大型的程序。C# ,但普通程序员一般用不到了,怎么大型呢,强大的桌面程序一般都是C++开发的,一般是基于服务器的网络程序,你可以不断地深入学习,都比C++好一点.net组合起来和Java相比就业形势差不多,执行效率一般认为是最好的,可以直接使用或者学习的开源项目比较多、ERP什么的。其中Java的特点是全开源,个人建议Java。C++基本包括C.net组合起来和Java功能差不多,因为完全开源,比如oa办公,加了面向对象的概念,虽然目前仍有运行的一些牛叉程序是C的,比较有可比性,某些情况使用比Java易用好,C#是微软的C不是面向对象语言。C# ,就是说不是最先进理念的语言
我感觉潘达讲的不完全对,运行平带net才是跨平台的基础,只要安装了net的平台,微软得的那套都系C# net版本的c++ vb.net 都能运行
都是不同的语言,区别有很多 过来凑个热闹
不同的语言,区别有很多
但是可以看懂
java的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁下载频道&gouyue的资源
上传者:zgc988&&&&| 上传时间:&&&&| 下载648次
《Visual Basic 2012入门经典(第7版)》中文扫描版
============================================================
原书名:Beginning Visual Basic 2012
原出版社:Wrox
作者:(美)Bryan N
上传者:longtg&&&&| 上传时间:&&&&| 下载1066次
Windows 2000 / XP Universal Version 2.93beta Updated on Feb/20/2001
通过驱动支持高速串口,测试在winxp sp2 dell 2400的机器上支持460800没有问题。
上驱动是小鬼子写,具体安装步骤请参考压缩包里的英文说明安装文件
上传者:szhourj&&&&| 上传时间:&&&&| 下载163次
C#应用程序开发全程演练——从灵感到实现(源码)!!!!!!!!!!!!!!!!
上传者:u&&&&| 上传时间:&&&&| 下载57次
用MFC做的记事本,包括微软记事本的几乎功能。
上传者:heiky&&&&| 上传时间:&&&&| 下载221次
MOTO XT800+ GPRS 移动上网补丁和设置说明
==========================================
欢迎交流 昌黎丁村
使用motoXT800+的用户在默认情况下是不能使用GPRS上网的,这是因为电信的定制机故意屏蔽了该功
积&&&&&&&&分:158415
上传资源: 2917
下载资源:21
总&&排&&名:第&4&名2540人阅读
Visual C++(5)
关键词:Dock Form,磁性窗体,粘黏窗体
版本:Visual C++ 6.0 或以上均可
1. 判断是否符合吸附条件,拦截子窗体WM_WINDOWPOSCHANGING消息,将lParam转换为PWINDOWPOS后与主窗体的Rect对比,符合条件时候(比如子窗体right与主窗体的left差距小于10px),修改子窗体状态为&已吸附&,并记录下是吸附在主窗体的哪条边(LEFT、RIGHT、TOP、BOTTOM),然后记录下与主窗体的x,y的差距
2. 拖动主窗体时,同时移动所有已经吸附的子窗体,需要相应主窗体的WM_MOVE、WM_SIZE消息,在这些消息触发时候,根据子窗体吸附的边框和与主窗体x、y差距,计算新坐标之后,移动子窗体。
以上是最简单的条件了,其实上文所述的&主窗体&、&子窗体&,并不是dlg.Create(IDD_XX,pParent)中的pParent父级的意思。而是相对于吸附和被吸附的对象
并且10px我是直接写在了函数之中,大家可以随便改
子窗体中需要实现的代码:
在我的代码中,继承了CDialog对象(VS2008 & 可以继承CDialogEx对象)为CMagnetDialog
新建private变量:CWnd* m_pMainDCArray&CWnd*,CWnd*&& m_pMagnetismL
& 当m_pMainDlg不为NULL时,表示此窗体是m_pMainDlg的子窗体,设置m_pMainDlg的对应函数是SetMainDlg(CWnd* pWnd);。
& m_pMagnetismList.GetSize() &0时,则表示此窗体下面有很多子窗体.
现假设新建了A、B、C三个窗体,A是主窗体,B、C都是A的子窗体
在B、C的InitDialog中写到:
this-&SetMainDlg(A);
这样就将A设置成了B、C的子窗体
拦截消息:
&textarea cols=&50& rows=&15& name=&code& class=&cpp&&BOOL CMagnetDialog::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) //处理移动之后的
if (message == WM_SIZE || message == WM_MOVE)
if (m_pMagnetismList.GetSize() & 0) //Magnetism Parent
MoveAllMagnetismDlg(); //主窗体移动之后,子窗口均移动
return CDialog::OnWndMsg(message,wParam,lParam,pResult);
LRESULT CMagnetDialog::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
msg.message =
msg.lParam = lP
msg.wParam = wP
if (message == WM_LBUTTONDOWN)
ReleaseCapture();
SendMessage(WM_SYSCOMMAND, SC_MOVE | HTCAPTION ,NULL);
if (message == WM_WINDOWPOSCHANGING)
if (m_pMainDlg != NULL && !m_pMainDlg-&IsIconic()) //最小化时候不检查
ChildCheckMagnetism(&msg);
return CDialog::WindowProc(msg.message, msg.wParam, msg.lParam);
//下面是一些实现函数:
/*移动所有已经吸附的子窗口*/
void CMagnetDialog::MoveAllMagnetismDlg()
CRect rMe;
GetWindowRect(&rMe);
for (int i = 0;i & m_pMagnetismList.GetSize();++i)
CWnd* pWnd = m_pMagnetismList.GetAt(i);
if (!IsWindow(pWnd-&m_hWnd))
CMagnetDialog* pDlg = (CMagnetDialog*)pW
pDlg-&MagnetismReRect(rMe);
/*子窗体自我判断需要怎样移动*/
void CMagnetDialog::MagnetismReRect(CRect& rParent)
if (m_bIsAdsorption)
GetWindowRect(&rCld);
int l = rCld.left,t = rCld.
switch(m_iMagnetismType)
case CMagnetDialog::MAGNETISM_LEFT:
l = rParent.left - rCld.Width();
t = rParent.top + m_iMagnetismRectD
case CMagnetDialog::MAGNETISM_TOP:
l = rParent.left + m_iMagnetismRectD
t = rParent.top - rCld.Height();
case CMagnetDialog::MAGNETISM_RIGHT:
l = rParent.
t = rParent.top + m_iMagnetismRectD
case CMagnetDialog::MAGNETISM_BOTTOM:
l = rParent.left + m_iMagnetismRectD
t = rParent.
///MoveWindow(l,t,rCld.Width(),rCld.Height());
SetWindowPos(NULL,l,t,0,0,SWP_NOZORDER | SWP_NOSIZE | SWP_NOSENDCHANGING);
/*子窗体在有windowsposchange消息的时候判断是否能和主窗体吸附*/
/*这是相对最复杂的函数了,以后的版本中也是对这个函数做重要的修改*/
BOOL CMagnetDialog::ChildCheckMagnetism(MSG* pMsg)
int iMinDisparityPixel = 10; //接近+-10像素时吸附
m_pMainDlg-&GetWindowRect(&rParent);
PWINDOWPOS pPos = (WINDOWPOS *)pMsg-&lP
CRect rCld(CPoint(pPos-&x,pPos-&y),CSize(pPos-&cx,pPos-&cy));
//TRACE(_T(&Child Moving/Sizing %d x = %d;y =%d/r/n&),pPos-&flags,rCld.left,rCld.top);
CRect rCGetWindowRect(&rCur);
if ((rCld.IsRectNull() && !rCur.IsRectNull()))
return IsAdsorption();
BOOL bIsSizing = rCur.Width() != rCld.Width() || rCld.Height() != rCur.Height();
m_iMagnetismType = CMagnetDialog::MAGNETISM_NULL;
m_iMagnetismRectDelta = 0;
SetAdsorption(FALSE);
int iOtheSideMagnetismType = CMagnetDialog::MAGNETISM_NULL;
int iOtheSideMagnetismType1 = CMagnetDialog::MAGNETISM_NULL;
if (rCld.top & rParent.top - rCld.Height() && rCld.top & rParent.bottom) //y范围限制
BOOL bIsAdsorption = FALSE;
if ( abs(rCld.right - rParent.left) & iMinDisparityPixel ) //左吸附
m_iMagnetismType = CMagnetDialog::MAGNETISM_LEFT;
if (bIsSizing)
pPos-&cx = rParent.left - pPos-&x; //移动时,保持left不变
pPos-&x = rParent.left - rCld.Width();
SetAdsorption(TRUE);
bIsAdsorption = TRUE;
} else if ( abs(rCld.left - rParent.right) & iMinDisparityPixel) //右吸附
m_iMagnetismType = CMagnetDialog::MAGNETISM_RIGHT;
if (bIsSizing) { //移动时,保持right不变
pPos-&x = rParent.
pPos-&cx = rCld.right - rParent.
pPos-&x = rParent.
SetAdsorption(TRUE);
bIsAdsorption = TRUE;
if (bIsAdsorption)
if ( abs(rCld.top - rParent.top) & iMinDisparityPixel)
if (bIsSizing)
{//移动时,保持bottom不变
pPos-&y = rParent.
pPos-&cy = rCld.bottom - rParent.
pPos-&y = rParent.
if (abs(rCld.bottom - rParent.bottom) & iMinDisparityPixel)
if (bIsSizing)//移动时,保持top不变
pPos-&cy = rParent.bottom - pPos-&y;
pPos-&y = rParent.bottom - rCld.Height();
m_iMagnetismRectDelta = pPos-&y - rParent.
if (rCld.left & rParent.left - rCld.Width() && rCld.left & rParent.right) //x范围限制
BOOL bIsAdsorption = FALSE;
if (abs(rCld.bottom - rParent.top) & iMinDisparityPixel) //上吸附
m_iMagnetismType = CMagnetDialog::MAGNETISM_TOP;
if (bIsSizing)//移动时,保持top不变
pPos-&cy = rParent.top - pPos-&y;
pPos-&y = rParent.top - rCld.Height();
SetAdsorption(TRUE);
bIsAdsorption = TRUE;
} else if (abs(rCld.top - rParent.bottom) & iMinDisparityPixel) //下吸附
m_iMagnetismType = CMagnetDialog::MAGNETISM_BOTTOM;
if (bIsSizing) {//移动时,保持bottom不变
pPos-&y = rParent.
pPos-&cy = rCld.bottom - rParent.
pPos-&y = rParent.
SetAdsorption(TRUE);
bIsAdsorption = TRUE;
if (bIsAdsorption)
if ( abs(rCld.left - rParent.left) & iMinDisparityPixel)
if (bIsSizing) {//移动时,保持right不变
pPos-&x = rParent.
pPos-&cx = rCld.right - rParent.
pPos-&x = rParent.
if (abs(rCld.right - rParent.right) & iMinDisparityPixel)
if (bIsSizing) //移动时,保持left不变
pPos-&cx = rParent.right - pPos-&x;
pPos-&x = rParent.right - rCld.Width();
m_iMagnetismRectDelta = pPos-&x - rParent.
return IsAdsorption();
&/textarea&&
以上代码并不是完整代码,只是实现了一些过程
完整代码请在这里下载:
这是第一个版本,在windows下 开启"拖动时显示窗口内容"下效果比较明显,千千静听只所以不受"拖动是显示窗口内容"的限制,是因为它没有标题栏,然后重写了一些代码,实现鼠标点击窗体任意部分后拖动窗体方式,目前这代码中只是简单的实现了鼠标点击之后发送HIT_TEST消息欺骗的方式,这和点击标题栏无异.以后再研究一下鼠标点击后拖动窗体,主要在于要平滑,我看网上很多例子都是很简单的,那种点住后用力甩都可以把窗体甩出去.
一些细节:
当子窗体和主窗体的某一边在10px的差距之内的时候,移动子窗体时,会有平滑移动的功能(总贴着主窗体的边)
当子窗体已经吸附,Resize子窗体时候,当子窗体已吸附的相邻的两条边会与主窗体的那两边有磁性功能,自己试一下吧
第二个版本中,将会实现如下功能:
1. 鼠标点击窗体任意部分后可拖动窗体(这样就可以无视&拖动时显示窗口内容&了)
2. 当有子窗体B吸附在主窗体上之后,别的子窗体C也可以吸附在这个子窗体B上。直到B失去吸附(移动或者Resize超过10px范围)
3. 磁性功能增强,子窗体移动到任意子窗体的某边时,吸附,Resize也同样带磁性,如图2
完整代码请在这里下载:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12317次
排名:千里之外
原创:10篇
评论:10条
(1)(3)(1)(1)(2)(1)(1)共有 45952 人关注过本帖
标题:[原创][开源]C#版千千静听(含源码,已增保存功能)
等 级:新手上路
帖 子:139
&&问题点数:0&&回复次数:202&&&
[原创][开源]C#版千千静听(含源码,已增保存功能)
*/ --------------------------------------------------------------------------------------*/ 出自: 编程中国
*/ 作者: zhoche2008
E-mail/MSN:*/ 时间:
编程论坛首发*/ 声明: 尊重作者劳动,转载请保留本段文字*/ --------------------------------------------------------------------------------------
小弟初学C#,做个千千静听玩玩,目前实现:播放列表保存,功能不全请见谅顺便附上完整版扫雷,如果觉得好的话帮忙顶一下,感激不尽说明:小弟是用VS2003环境写的,如果您的版本是2005,运行扫雷是没有问题的,但是千千静听会报异常,暂时还没有找到解决方法,非常抱歉有很多朋友对我是否初学C#而表示怀疑,这点需要说明:1。Winforms编程上手很快,而且mediaplayer这个是我用的微软自带的现成控件,只是把播放列表实现了,这两个小程序难度其实并不大,只要多花点心
思即可2。此贴于2006年7月发表,对于当时来说的确是初学C#1个月,但以前还学过C,C++,VB,ASP等3。本人没有C#编程工作经验,接触C#是由于课程设计的原因,由于后来又学Java,没办法,两者只能选其一,所以毕业后做了一名小小的J2EE程序员
[此贴子已经被作者于 17:56:56编辑过]
附件: 只有本站会员才能下载或查看附件,请
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:新手上路
帖 子:211
下了,学习一下!
/lanyong_he@126/
等 级:新手上路
帖 子:125
有肚量去容忍那些无法改变的事情
有勇气去改变那些可以改变的事情
有智慧去区别上述二类事
等 级:新手上路
帖 子:211
扫雷的怎么没有卸载的工具!?
/lanyong_he@126/
等 级:贵宾
威 望:11
帖 子:434
专家分:42
如果是新手能够做出如此效果已经很不容易了再多多努力,经过大型项目后一定会成为软件高手的.
等 级:贵宾
威 望:13
帖 子:689
很有趣嘿嘿
[此贴子已经被作者于 9:19:01编辑过]
好的资料下载网站http://www.netyi.net/in.asp?id=xuelion2006
嘿嘿帮点一下拉~
等 级:新手上路
帖 子:253
下来看看了。。哈哈
等 级:新手上路
帖 子:13
学习学习终生学习
等 级:新手上路
学习下!!!!支持下楼主
等 级:贵宾
威 望:29
帖 子:769
专家分:20
2031/21页1
版权所有,并保留所有权利。
Powered by , Processed in 0.042432 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved如何制作千千静听个性皮肤
如何制作千千静听个性皮肤
一、了解千千静听皮肤制作是怎么一回事?1、如果您是位从未接触过皮肤制作的人,那么请先仔细看下面的这段话:如何把设计好的皮肤效果图应用到千千静听软件上去,有两个主导思想您应该了解:一个是需要把效果图上面的控件(或称按钮)单独切出来,另一个是需要把上一点说的控件(或称按钮)的坐标找到,为它精准定位,是不是听的有点眉目了,那么我们接着往下讲。2、千千的皮肤位于安装目录下的Skin文件夹内,扩展名可以为.skn或.zip,实际上二者是一样的。对于前者,可以先将.skn的扩展名改为.zip(要在系统中显示文件的扩展名,依次点击"工具"-"文件夹选项"-"查看",再把"隐藏已知文件类型的扩展名"前的小勾去除即可),然后将其解压到单独的文件夹,进入该文件夹,可以发现里面包含了许多bmp格式的图片和若干个xml文件,他这些文件便是皮肤的组成部分了,bmp图片是各个窗口的背景及按钮图片,Skin.xml则是配置文件,定义了皮肤的基本信息、窗口及按钮的位置、大小等,它是基于XML格式的文件,可直接用系统自带的记事本或者其它文本编辑工具打开的。好,了解以上的基础知识后,我们就开始学习实际的制作过程。二、开始制作啦!按照四个步骤进行:(A)切图(B)修改配置文件(C)打包成皮肤文件(D)应用皮肤(A)切图:用PS或FW打开设计效果图,整体观察一下,下面讲一下哪些图片是要单独切出来的以及图片的命名。一、主窗口的控件(1)主窗口背景 命名:player_skin.bmp重点:边缘小圆角的镂空处理,把镂空填充成(#ff00ff)这个颜色,要细心处理这部分哦,边缘要1像素1像素的填充(如上图,镂空部分的颜色处理)(2)最小化按钮(4个状态)命名:minimize.bmp重点:凡是功能按钮都要做4种状态,并把这四种状态做在一张图里,存储成.BMP格式,注意每种状态按钮他的宽度和高度要一致,说一下每种状态代表的含义第一个状态:自然状态第二个状态:鼠标划过时的状态第三个状态:鼠标按下去时的状态第四个状态:按钮失效时的状态(举个例子,比如播放列表只有一首歌曲,那么“下一首”按钮就是无法点击的,那么此时这个按钮状态就是失效时的状态)3)迷你模式按钮命名:minimode.bmp同上,这里不再赘述了。(4)关闭按钮命名:close.bmp(5)播放进度滑块(本例中播放进度条上的小圆按钮)命名:progress_thumb.bmp重点:这个小按钮是需要脱离背景部分单独扣出来的,那么镂空部分需要如何处理才能最终在界面上显示出透明的效果呢,解决的办法和上面的大背景镂空处理一样就是把镂空填充成(#ff00ff)这个颜色,如上图。(6)播放进度填充背景图命名:progress_fill.bmp(7)播放列表窗口打开关闭按钮命名:playlist.bmp (8)均衡器窗口打开关闭按钮命名:equalizer.bmp(9)歌词窗口打开关闭按钮命名:lyric.bmp(10)“上一首”按钮命名:prev.bmp(11)“播放”按钮命名:play.bmp(12)“暂停”按钮命名:pause.bmp(13)“下一首”按钮命名:next.bmp(14)“打开播放文件”按钮命名:open.bmp(15)音量小喇叭按钮命名:mute.bmp(16)音量进度背景填充图命名:progress2.bmp(17)音量滑块同(5) 二、均衡器窗口的控件(18)开启按钮命名:eq_enabled.bmp(19)重设按钮命名:reset.bmp(20)配置按钮命名:eq_profile.bmp(21)关闭按钮,切图同主窗口上的关闭按钮(22)平衡器环绕声所有滑动的小按钮 同(5)(23)平衡,环绕填充背景命名:eqfactor_full2.bmp(24)均衡填充背景命名:eqfactor_full.bmp三、播放列表窗口的控件(25)关闭按钮,同主窗口关闭按钮(26)工具条按钮,命名:playlist_toolbar.bmp热点状态命名:playlist_toolbar_hot.bmp(27)滚动条上下按钮命名:scrollbar_button.bmp重点:将上下按钮拼在一张图上制作(28)滚动条滑动按钮命名:scrollbar_thumb.bmp(29)滚动条背景命名:scrollbar_bar.bmp四、歌词秀窗口的控件(30)关闭按钮,同主窗口(31)总在最前按钮命名:ontop.bmp五、音乐窗窗口的控件上图为千千音乐窗界面,其中用绿色边框套住的部分为显示部分,和皮肤设计无关,就是说我们要做的是绿色边框外的内容。好,明确了制作部分,开始讲制作过程,首先,要制作一个窗口背景,就是图中显示的最外面的蓝色风格的窗口,像主窗口一样,不难理解,格式同样为.bmp,需要设置透明色背景(#FF00ff),注意圆角像素的处理。然后制作窗口里的控件,上图中用红色框标出了所有控件,包括后退、前进、刷新、关闭、多选框、连接文字区。其中后退、前进的功能是像网页一样的控制当前页面,并不是歌曲的后退、前进,不过也没影响,不多说了。最后,还要制作一个按钮,用来打开音乐窗,按钮要做在主窗口上,做主窗口时别忘了留出地方哦...具体切图示例如下,大家一看就会明白啦:(B)修改配置文件一、首先看一下skin.xml这个配置文件&skin version="2" name="静听•蔚蓝" author="千千静听" url="网页位置,和“歌词秀”中的歌词显示范围性质一样&/browser_window&二、下面看一下Lyric.xml这个配置文件以下是歌词文字的设置,分别定义了字体类型,字体颜色,高亮颜色和背景颜色&ttplayer_lyric&&Lyric Font="-11,0,0,0,400,0,0,0,134,3,2,4,49,Tahoma" TextColor="#008CC1" HilightColor="#005489" BkgndColor="#F4FBFE" /&&/ttplayer_lyric&三、下面看一下Playlist.xml这个配置文件这个是播放列表窗口的文字设置,分别定义了字体类型,字体颜色,高亮颜色,第一背景颜色,数字颜色,时间颜色,当前选择颜色,第二背景颜色(可以和第一背景颜色一致)&ttplayer_playlist&&PlayListFont="-11,0,0,0,400,0,0,0,134,3,2,4,49,Tahoma"Color_Text="#008CC1"Color_Hilight="#005489"Color_Bkgnd="#EAF5FA"Color_Number="#005489"Color_Duration="#005489"Color_Select="#84CEF9"Color_Bkgnd2="#EAF5FA"/&&/ttplayer_playlist&四、下面看一下Visual.xml这个配置文件这个是用来设置视觉显示的效果,我们先给大家介绍一下千千静听都提供哪几种视觉效果:1、 频谱分析2、 梦幻星空3、 视波显示4、 专辑封面5、 不显示视频效果这5种情况只要在播放器主窗口上面点击鼠标右键即可切换如图:下面的配置文件是用来设置各种视觉效果颜色的,大家可以试试看,调出你喜欢的效果来&ttplayer_visual&&VisualSpectrumTopColor="#FFFFFF"SpectrumBtmColor="#07F7FF"SpectrumMidColor="#8CDCFF"SpectrumPeakColor="#FFFFFF"SpectrumWide="1"BlurSpeed="3"Blur="1"BlurScopeColor="#07F7FF"TextColor="#FFFFFF"Font="-11,0,0,0,400,0,0,0,134,3,2,4,49,Tahoma"/&&/ttplayer_visual&(C)打包成皮肤文件好了,以上就是皮肤制作的整个过程啦,把上面的切图和配置文件制作好后,就可以打包成皮肤文件了,可以用WinRAR或WinZIP等压缩工具,以 WinRAR为例,先按键盘上的Ctrl+A全选所有文件,然后将全部文件添加到压缩文件夹,压缩文件格式选择"zip",压缩方式可选择"最好",再点击"确定"就行了!(D)应用皮肤将这个压缩文件复制到千千安装目录下的Skin文件夹,然后在"千千选项..."-"皮肤"中就可以选择应用皮肤了,或直接在主面板上点击右键-"选择皮肤"即可!或许您已经了解皮肤的制作方法了,为了更深入的理解,我们增加以下部分的内容帮助您消化:三、几个重要的属性解释position:这是众元素中最基本的属性之一,用于定义窗口背景及按钮的位置及大小,参数值格式为 "a, b ,c ,d",这4个数值既固定了元素的位置也确定了其大小,其中(a, b)为左上角的坐标,(c, d)为右下角的坐标,c-a 就是长度,d-b 就是高度,坐标原点要分两种情况:如果是歌词秀、均衡器、播放列表这3个子窗口的position,则是把主窗口的左上角作为它们的坐标原点;如果是各窗口内部按钮的position,则是把对应的各窗口的左上角作为坐标原点,比如歌词秀窗口中的"关闭"按钮就是以歌词秀背景图片的左上角为原点,其它依此类推!特别地:①播放列表中的scrollbar元素不需要定义position属性,它的位置会自动固定在playlist的最右边;②主窗口中的 progress、volume元素及均衡器窗口中的balance、surround、preamp元素的position属性表示的是滑块能够移动的范围的坐标;③播放列表衡器窗口中的playlist元素、歌词秀衡器窗口中的lyric元素的position属性表示的是播放列表和歌词的显示范围,当播放列表窗口和歌词秀窗口改变大小时,这两个元素会自动跟着改变大小,但它们的四个边和窗口的四个边的距离就是通过这个position来体现的;resize_rect:歌词秀和播放列表窗口特有的属性,用于定义这两个窗口可被拉伸的部分,其参数格式同position,代表的是当改变窗口大小时只有这个矩形框内的部分才会被拉长,在这个范围外的部分则不会变化,另外还有一个属性resize_tile是对应使用的,其参数值可以为0或1,其中 0表示在改变窗口大小时采用拉伸的方式,1表示采用平铺的方式,该属性可省略不写,即使用默认值0;此外,歌词秀和播放列表窗口还有一个可选择的元素:title,可在有特定需要时(比如在改变窗口大小时标题保持居中等)使用,格式如下:&title position="..." image="..." align="..." /&align:用于定义元素的对齐方式,参数值分两种情况:一种是存在于主窗口中的led、info、stereo、status元素内,此时可以取值为 left、center、right,代表这些文字的缩进方式;第二种是存在于歌词秀窗口中的title、close、ontop元素内,播放列表窗口的 title、close、toolbar元素内,此时可以取值为left、center、right、top、bottom等,代表当调整窗口大小时元素位置相对于边框移动,如果要同时设置垂直对齐和水平对齐方式,可以用英文加号将二者连在一起,比如"top+left"表示在垂直方向上顶部对齐、在水平方向上左对齐;vertical:存在于主窗口中的progress、volume元素,参数值可以为true或false,其中取true时指滑块按垂直方向移动,取false时滑块按水平方向移动;thumb_resize_center:存在于播放列表窗口中的scrollbar元素内,用于定义scrollbar的thumb滑块中间可以进行平铺缩放的部分的大小,如果取值为0,则代表在改变播放列表窗口高度大小时滑块进行不缩放;thumb_resize_tile:存在于播放列表窗口中的scrollbar元素内,作用与播放列表窗口和歌词秀窗口的resize_tile相同;hot_image:存在于播放列表窗口中的toolbar元素内,用于定义播放列表工具栏中当鼠标经过时的图片形态。此属性可选择,如省略不写的话程序会自动生成鼠标经过时的按钮状态;eq_interval:存在于均衡器窗口中的equalizer_window元素内,指eqfactor元素中10个波段的间隔大小(另:eqfactor元素的position属性表示的是10个滑块中第一个滑块的位置,而其它属性对于所有10个滑块都有效);icon:存在于主窗口中的icon元素内,用于自定义皮肤图标,必须将图标文件(*.ico,16*16)放于皮肤文件夹中并一起打包压缩。此属性可选择,如省略不写的话则使用默认的程序图标;left_top_color、right_bottom_color:存在于歌词秀窗口中的mini_border元素内,用于定义在迷你模式下歌词秀窗口的左上边框和右下边框的颜色;迷你窗口:迷你模式其实是独立于主窗口外的另外一个皮肤,不过在迷你模式下省略了播放列表和均衡器窗口、简化了歌词秀窗口和主窗口。迷你窗口里的所有元素、属性及参数都是和主窗口一样的,它们都被包含于&mini_window&和&/mini_window&中,相当于主窗口中的& player_window& &/player_window&;迷你模式就是为了减小屏幕大小占用及简化按钮,故迷你窗口各按钮也要相应调整缩小,并省略部分不常用的按钮,比如音量调节等,一般只保留下"播放/暂停 "、"停止"、"后退"、"前进"、"静音"、"图标"、"视觉效果"等即可。另外,迷你模式下的歌词秀窗口的位置和长度是固定的,高度则是和迷你模式的背景图片高度相同。四、皮肤制作注意事项及技巧:1.压缩皮肤文件时,不是压缩整个文件夹,而是应该进入文件夹后按Ctrl+A全选所有文件,然后再添加到压缩文件(zip格式),否则皮肤无效;2.播放列表和歌词秀窗口的position属性定义了这两个窗口初始化时的大小,这个大小可以不是图片的实际大小。这两个窗口在初始化时就会按照 resize_rect的规则拉伸窗口至所设置的大小。此外,这两个窗口最大可以拉伸到与屏幕同样大小,但最小只能缩小到与原始图片同样的大小,所以原始图片应该尽量画得小一些,这样可以方便用户把窗口缩成最小,同时还可以稍微减少图片及皮肤大小;注:这个时候窗口上的按钮的position属性是按图片的实际大小来确定坐标的;3.bmp图片(尤其是几个面积较大的窗口背景图片)应尽量转换为8位的索引颜色,这样可以极大地减少图片及皮肤的大小,同时在应用皮肤时可以减少内存占用率。具体的方法为:在Adobe Photoshop中,打开RGB模式的图片,然后点击"图像"-"模式"-"索引颜色",再保存即可!注:如果有透明色时要注意两点:①在填充透明色时,一定不要选"容差";②转换时一定要选中"保留原实际颜色",以防止填充的透明色被改掉。4.当按钮很小的时候,不要将其透明,而是和背景图片连在一起!因为我们知道,皮肤中透明的部分是不感应鼠标动作的,因此当按钮比较小的时候如果中间有很小的缝隙,鼠标移动到上面时就会乱跳,不便于点击操作!如图所示:5.在制作皮肤时最好做一部分预览一下效果,这样有问题的地方可以及时修改过来6.如果不想在主窗口或迷你模式中显示千千静听的图标,可以将图标的position设置为超过窗口大小,比如"500, 500, 516, 516";7.在主窗口中的led元素(即播放时间)有两种显示方式,一种是已播放的时间,一种是未播放的时间,鼠标点击即可在两种显示方式之间切换。后者比前者多了一个负号,因此在主窗口上应至少给led留出6位的空间,以防止在显示剩余时间时数字覆盖到面板上的其它部分而影响美观;led元素使用的图片必须是 12张同样大小的图片排在一起,分别代表0-9十个数字、冒号和减号(可以使用透明色);8.如果不想显示某个窗口或者各窗口上的某些元素,把相应的元素代码全部删除即可;9.如果是用记事本打开XML文件的,那存储的时候尽量编码设置成ANSI;如下图所示:10、关于坐标定位的小技巧:大家注意一下坐标定义的问题,拿一个20*20的小图为例,它的位置是150,30,170,50,大家来看这个坐标,一定认为没有问题,但实际效果会显示不全,为什么呢,因为坐标的X轴有一个小小的误差问题,要多加2像素才可以哦,正确的定位是150,30,172,50。大家在制作时注意一下。 制作千千皮肤的基本方法就只有这么多,但是技巧远不止这些,大家可以在制作的过程中不断实践摸索,并发挥自己的创造力,设计出各种有创意的皮肤来!
&&&主编推荐
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 千千静听默认皮肤 的文章

 

随机推荐