对于每个程序员来说,养成良好的代码编写方法是非常关键的。在编写代码的过程中,每个人的方法是不同的,那么应该如何规范自己代码编写的方法呢?规范编写代码有哪些要求呢?下面电脑培训带大家认识代码编写的方法。
一、保证代码压缩后不会出错
对于大的JavaScript项目,一般来说,包含在项目中的所有JavaScript文件在产品公开时都会被压缩。为了正确压缩代码,通常需要考虑压缩工具的必要条件,如句子用分号正常结束,中括号结束等。因此,IT培训发现当编写代码没有按照标准进行时,在发生压缩错误后再次寻找错误是浪费时间的。
二、保证代码能够通过自动格式化功能
一般情况下需要使用完善的开发工具进行自动化格式功能,这个功能能够进行换行、缩进和空格等方法的代码编排,并且还可以设置自己喜欢的格式。别人在阅读你的代码时需要使用IDE进行格式转换,以满足个人的阅读风格。昌平北大青鸟认为阅读代码能够更加深入的了解代码调用和细节的实现,这是简单的文档不能实现的。
三、使用标准的文档注释
这是编写代码中最基本的要求,能够很好的了解代码的提示,并且还可以利用配套的文档工具生产其他格式让别人阅读。北大青鸟认为编写完整的注释还可以使团队成员更容易阅读您的代码。通过您的参数描述,团队成员很容易了解您想要传递参与实现细节和编写的方法。
想必大部分网友都使用过QQ、MSN等聊天程序,它们的界面都相当华丽,尤其是当网友上线以及消息提示时会有一个浮动的窗体从屏幕的右下方缓慢升起,既美观又人性化,作为程序员在享受的同时我们也不禁要问:这到底是怎么实现的呢?本文就利用Visual Studio Net C# 2005以及Net框架绘图技术来实现这种任务栏通知窗口。
简介
QQ和MSN的任务栏通知窗口很人性化,它可以在不丢失主窗体焦点的前提下显示一个具备皮肤Skin的通知窗体,当它显示一段时间后会自动消失,所以用户根本不用干预它。这样的通知窗体和一般的具备标题栏、系统图标和按钮的窗体没有太大的区别,窗体表面其实就是画上去的一张位图而已,而窗体的浮动则会复杂一点,我们会用到Net框架的双重缓冲区绘图技术(参见作者编译文章"Windows 窗体的Net框架绘图技术")来保证移动窗体时所显示的内容平滑且不闪烁,以及使用P/Invoke平台调用进行对Win32API函数的调用来完成不获得焦点的窗体显示和非标题栏窗体拖动。两种位图的皮肤运行时的界面如下:
背景知识
通知窗口就是将一般的窗体附加上一层皮肤,这里所谓的皮肤就是一张位图,该位图通过窗体的OnPaintbackground事件被绘制到窗体表面,在附加位图之前需要调整窗体的可视属性,由于绘制 *** 作是针对于窗体客户区域的,所谓客户区域就是指窗体标题栏下方以及窗体边框以内的所有区域,所以需要将窗体的边框和外观属性 FormBorderStyle调整为:None,这样所绘制的图像就会填充整个窗体。
首先,我们会用到Region对象,Region对象可以精确的描绘出任意形状的轮廓范围,通过一个位图图像创建Region对象后再将其传递给窗体的Region属性就可以使窗体按照Region所定义的轮廓显示出来。作为皮肤使用的位图文件可以通过任何图像编辑软件诸如:Photeshop来创建和编辑,只是注意一点,需要将的背景色调成特定颜色以便程序绘制时将其清除,我们在这里使用的背景色为粉红色。为了能够让Region对象按照图像中感兴趣的内容边框来创建窗体,我们还需要使用GraphicsPath类将图像轮廓按照一定路径标注下来,稍后便按照该路径创建Region对象。
然后通过窗体的绘图事件将位图的内容显示在窗体表面,我们没有直接使用OnPaintbackground事件而是重载了该方法,这样做的好处就是一些低层的绘制 *** 作还继续交由Net框架运行时来处理,我们只考虑实际需要的绘制 *** 作即可。在OnPaintbackground方法中我们启用了双重缓冲区绘图技术,所谓该技术就是指先在内存中的一块画布上把将要显示的图像显示出来或进行处理,等到 *** 作完成再将该画布上所显示的图像放置到窗体表面,这样的机制可以非常有效的降低闪烁的出现,使图像显示更加平滑。通知窗体从屏幕的右下方进行升起停留一段时间后再慢慢回落,这里需要用到返回屏幕区域的大小范围的Net框架方法 ScreenGetWorkingArea(WorkAreaRectangle),通过一定算法计算出通知窗体显示前的初始位置。最后,我们将要显示的文本按照一定格式和Rectangle对象所指定的区域范围绘制到窗体表面。通知窗体的关闭 *** 作是通过设定一个区域,当用户用鼠标单击时检测单击坐标是否在该区域内,若在区域内就可以执行隐藏通知窗体的代码。
我们注意了,当QQ和MSN的通知窗口显示时其主窗体的焦点没有丢失,也就是说程序没有将自身的焦点转移到显示的通知窗体上。经过测试,我们无论怎么样调用Net框架提供的窗体显示例程譬如:FormShow都无法保证主窗体的焦点不丢失,在VC环境下我们可以使用Win32API的ShowWindows函数来完成复杂的窗体显示 *** 作,但是Net框架根本没有提供类似的方法,那么我们能否通过Net框架调用该API函数来显示窗体呢?幸好Net框架提供了P/Invoke平台调用,利用平台调用这种服务,托管代码就可以调用在动态链接库中实现的非托管函数,并可以封送其参数,我们可以轻松的显示但不获得焦点的窗体。程序中用到的Windows API以及常量的定义都保存在WinUserh头文件中,其对应的动态链接库文件就是user32dll,使用Net框架提供的DllImportAttribute类对导入的函数进行定义,然后就可以非常方便的在程序中调用该函数了。
由于我们将通知窗体的标题栏隐藏了,所以对窗体拖动 *** 作还需要我们自己动手进行处理。本文介绍了如何更加高效的进行拖动窗体 *** 作,有些网友在对于非标题栏拖动窗体编程时偏向组合使用鼠标事件来进行,这样做的本质没有任何不妥,但是频繁的事件响应和处理反而使程序性能有所降低。我们将继续使用Win32API的底层处理方法来解决该问题,就是向窗体发送标题栏被单击的消息,模拟实际的拖动 *** 作。
我们会通过2个计时器来完成窗体的显示、停留和隐藏,通过设置速度变量可以改变窗口显示和隐藏的速度。
程序实现
启动Visual Studio Net 2005,创建C# Windows 窗体应用程序,将解决方案命名为TaskbarForm,包含的项目名也为TaskbarForm,首先创建程序的主窗体Form1,在上面添加两个Button控件,一个用于显示通知窗体,另一个则终止程序。然后在解决方案管理器中右击项目,单击"添加 - Windows 窗体",我们把新创建的窗体命名为TaskbarForm。
在类TaskbarForm定义的下方,我们创建用于显示的字符串和其颜色的变量,再定义几个Rectangle对象的变量用于放置标题、提示内容以及可以拖动窗体的区域和关闭按钮的区域。然后,我们需要保存窗体在浮动时的高度以便计算移动后的新高度,intervalValue变量用来确定窗体显示和隐藏的速度。进行平台调用时我们需要提前定义好常量的值用来传递给函数,WM_NCLBUTTONDOWN和HT_CAPTION常量用于拖动窗体,他们的值都保存在WinUserh头文件中,所对应的动态链接库名为:user32dll。我们用到的Win32API为:SendMessage、ReleaseCapture和ShowWindow,通过使用DllImportAttribute可以导入相应的函数并在程序中重新进行定义,如下:
[DllImportAttribute("user32dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
//发送消息//winuserh 中有函数原型定义
[DllImportAttribute("user32dll")]
public static extern bool ReleaseCapture(); //释放鼠标捕捉winuserh
[DllImportAttribute("user32dll")] //winuserh
private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);
SendMessage向消息循环发送标题栏被按下的消息来模拟窗体的拖动,ShowWindow用来将特定句柄的窗体显示出来,注意第二个参数nCmdShow,它表示窗体应该怎样显示出来,而我们需要窗体不获得焦点显示出来,SW_SHOWNOACTIVATE可以满足我们要求,继续在WinUserh文件中搜索找到该常量对应的值为4,于是我们就可以这样调用来显示窗体了:
ShowWindow(thisHandle, 4);
我们创建了一个自定义函数ShowForm用来封装上面的ShowWindow用来是显示窗体,同时传递了所用到的几个Rectangle矩形区域对象,最后调用ShowWindows函数将窗体显示出来,代码片段如下:
public void ShowForm(string ftitletext, string fcontenttext, Rectangle fRegionofFormTitle, Rectangle fRegionofFormTitlebar, Rectangle fRegionofFormContent, Rectangle fRegionofCloseBtn)
{
titleText = ftitletext;
contentText = fcontenttext;
WorkAreaRectangle = ScreenGetWorkingArea(WorkAreaRectangle);
thisTop = WorkAreaRectangleHeight + thisHeight;
FormBorderStyle = FormBorderStyleNone;
WindowState = FormWindowStateNormal;
thisSetBounds(WorkAreaRectangleWidth - thisWidth, WorkAreaRectangleHeight - currentTop, thisWidth, thisHeight);
CurrentState = 1;
timer1Enabled = true;
TitleRectangle = fRegionofFormTitle;
TitlebarRectangle = fRegionofFormTitlebar;
ContentRectangle = fRegionofFormContent;
CloseBtnRectangle = fRegionofCloseBtn;
ShowWindow(thisHandle, 4); //#define SW_SHOWNOACTIVATE 4
}
CurrentState变量表示窗体的状态是显示中、停留中还是隐藏中,两个计时器根据窗体不同状态对窗体的位置进行更改,我们会使用SetBounds来执行该 *** 作:
thisSetBounds(WorkAreaRectangleWidth - thisWidth, WorkAreaRectangleHeight - currentTop, thisWidth, thisHeight);
当窗体需要升起时将窗体的Top属性值不断减少,而窗体回落时将Top属性值增加并超过屏幕的高度窗体就消失了,虽然原理很简单但仍需精确控制。
SetBackgroundBitmap函数首先将窗体背景图像保存到BackgroundBitmap变量中,然后根据该位图图像轮廓和透明色创建Region,BitmapToRegion就用于完成Bitmap到Region的转换,程序再将这个Region付值给窗体的Region属性以完成不规则窗体的创建。
public void SetBackgroundBitmap(Image image, Color transparencyColor)
{
BackgroundBitmap = new Bitmap(image);
Width = BackgroundBitmapWidth;
Height = BackgroundBitmapHeight;
Region = BitmapToRegion(BackgroundBitmap, transparencyColor);
}
public Region BitmapToRegion(Bitmap bitmap, Color transparencyColor)
{
if (bitmap == null)
throw new ArgumentNullException("Bitmap", "Bitmap cannot be null!");
int height = bitmapHeight;
int width = bitmapWidth;
GraphicsPath path = new GraphicsPath();
for (int j = 0; j < height; j++)
for (int i = 0; i < width; i++)
{
if (bitmapGetPixel(i, j) == transparencyColor)
continue;
int x0 = i;
while ((i < width) && (bitmapGetPixel(i, j) != transparencyColor))
i++;
pathAddRectangle(new Rectangle(x0, j, i - x0, 1));
}
Region region = new Region(path);
pathDispose();
return region;
}
通知窗体背景以及文字的绘制在重载的OnPaintBackground方法中完成,而且利用了双重缓冲区技术来进行绘制 *** 作,代码如下:
protected override void OnPaintBackground(PaintEventArgs e)
{
Graphics grfx = eGraphics;
grfxPageUnit = GraphicsUnitPixel;
Graphics offScreenGraphics;
Bitmap offscreenBitmap;
offscreenBitmap = new Bitmap(BackgroundBitmapWidth, BackgroundBitmapHeight);
offScreenGraphics = GraphicsFromImage(offscreenBitmap);
if (BackgroundBitmap != null)
{
offScreenGraphicsDrawImage(BackgroundBitmap, 0, 0, BackgroundBitmapWidth, BackgroundBitmapHeight);
}
DrawText(offScreenGraphics);
grfxDrawImage(offscreenBitmap, 0, 0);
}
上述代码首先返回窗体绘制表面的Graphics并保存在变量grfx中,然后创建一个内存Graphics对象offScreenGraphics和内存位图对象offscreenBitmap,将内存位图对象的引用付值给offScreenGraphics,这样所有对offScreenGraphics的绘制 *** 作也都同时作用于offscreenBitmap,这时就将需要绘制到通知窗体表面的背景图像BackgroundBitmap绘制到内存的Graphics对象上,DrawText函数根据需要显示文字的大小和范围调用GraphicsDrawString将文字显示在窗体的特定区域。最后,调用GraphicsDrawImage将内存中已经绘制完成的图像显示到通知窗体表面。
我们还需要捕获窗体的鼠标 *** 作,有三个 *** 作在这里进行,1、处理拖动窗体 *** 作,2、处理通知窗体的关闭 *** 作,3、内容区域的单击 *** 作。三个 *** 作都需要检测鼠标的当前位置与每个Rectangle区域的包含关系,只要单击落在特定区域我们就进行相应的处理,代码如下:
private void TaskbarForm_MouseDown(object sender, MouseEventArgs e)
{
if (eButton == MouseButtonsLeft)
{
if (TitlebarRectangleContains(eLocation)) //单击标题栏时拖动
{
ReleaseCapture(); //释放鼠标捕捉
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); //发送左键点击的消息至该窗体(标题栏)
}
if (CloseBtnRectangleContains(eLocation)) //单击Close按钮关闭
{
thisHide();
currentTop = 1;
}
if (ContentRectangleContains(eLocation )) //单击内容区域
{
SystemDiagnosticsProcessStart(">
常用的写代码软件有以下几个:
1、WebStorm。WebStorm是jetbrains公司旗下一款JavaScript开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScriptIDE”等。
2、SublimeText。SublimeText是一个代码编辑器也是HTML和散文先进的文本编辑器。
3、HBuilder。HBuilder是专为前端打造的开发工具,具有飞一样的编码、最全的语法库和浏览器兼容数据、可以方便的制作手机APP、最保护眼睛的绿柔设计等特点。
意思是指运行程序代码。程序员说跑代码是指执行的过程,程序员通过输入指令,将程序代码送入计算机的处理器中,让计算机按照指定的方式执行程序,并在屏幕上显示程序的结果。跑代码的过程还涉及到对程序的性能、稳定性、数据准确性等方面的检测,以确保程序可以达到预期的效果。
敲代码和程序员一样吗?答案是否定的。敲代码只是程序员的一部分,它是程序员编写代码的基础步骤。程序员需要掌握的不仅仅是敲代码,还要掌握计算机科学的基本理论,掌握编程语言,掌握编程思想,掌握软件工程的基本知识,掌握计算机网络的基本知识,掌握计算机系统的基本知识,掌握计算机安全的基本知识,掌握数据库的基本知识,掌握软件开发的基本流程,掌握软件测试的基本知识,掌握软件维护的基本知识,掌握软件优化的基本知识,掌握软件发布的基本知识,掌握软件项目管理的基本知识,以及掌握其他专业知识。所以,敲代码和程序员一样吗?答案是否定的。
所谓程序员,是指从事程序设计、程序开发、程序维护的基层工作人员。
程序员包括两大类:
1,程序设计人员。
一个程序,就是一个系统。对于一个规模庞大的程序来说其结构非常复杂,各个部分的功能之间的衔接非常复杂,所以需要预先对整个系统的架构进行设计,程序设计人员的主要工作就是如此。
2,程序编码人员。
编码,也就是代码。……程序是由代码组成的。相应的,程序代码是由程序员一段一段编辑而成的。……因此,代码也就成为程序员业绩和能力的代表。
编程序、写代码,其核心就是算法。……掌握一套精密有效的算法,就能把一段程序编好,使其发挥出最佳功效。
从这个角度说,程序员所掌握的最厉害的工具,不是代码,而是算法。……代码对于程序员来说,只是砖石一类的工具,而算法才是程序的核心。……一段程序,代码的生成很简单,但是其中包含的算法却是非常深奥的。……因此,设计出一套算法,对于程序员来说才是最关键的事情。
从这个角度说,程序员最厉害的并不是拥有一段代码,而是掌握一套算法。
另外,程序员这份工作其实也有不同的分工。并不是所有的程序员都要敲代码的。……实际上,程序员工作职责涵盖面非常广泛。以下几方面工作,都属于程序员的工作职责:
1,负责软件的设计、开发、测试。
2,与客户进行沟通,明确客户需求。
3,项目调研、可行性分析。
4,解决软件开发和维护过程中的各种问题。
5,对本专业领域范围内的技术动态进行跟踪分析。
由此可以看出,程序员并不全都是敲代码的人,还有很多程序员是负责软件系统相关工作的人。……当然了,虽然因为分工不同,有些程序员不写代码,但是他们肯定是能够看得懂代码,并有能力修正其中的问题的。……他们当中的每个人都对于某个具体领域的算法非常擅长,这就是他们的绝招,是他们实力最强的领域。
5种语言祝程序员节日快乐:
一、Java程序员
代码:
#FileName: ProgramDayjava
public class ProgramDay #
{
#Java 入口程序,程序从此入口
public static void main(String[] args)
{
Systemoutprintln("1024程序员节日快乐!");
}
}
二、C程序员
代码:
#include <stdioh>
int main() #main 入口函数
{
printf("1024程序员节日快乐!!"); #打印节日快乐
return 0;
}
三、PHP程序员
代码
<!DOCTYPE html>
<body>
<php
echo "1024程序员节日快乐"; //打印语句
>
</body>
</html>
四、Python程序员
代码:
>>> print "1024程序员节日快乐" #Python 2x
>>> print("1024程序员节日快乐") #Python 3x
五、C# 程序员
C# 其实和 Java 非常相像,需要设置环境变量,当年一门和java 抗衡的语言,最近几年似乎用它做游戏蛮多的,特别是unity方面。
代码:
//FileName: ProgramDaycs
using System;
class ProgramDay
{
public static void Main()
{
ConsoleWriteLine("1024程序员节日快乐");
}
}
以上就是关于程序员如何规范代码的编写方法全部的内容,包括:程序员如何规范代码的编写方法、C#中 ,窗体运行时,右下角出现对话框功能是怎么实现的,> 向高手求救.!!!、写代码用什么软件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)