博文

SVN版本控制软件使用手记[原创]--前言:一定要管理好你的源程序(2007-03-25 22:19:00)

摘要:毕业两年了,辗转过几家公司,都是程序员的干活。下面是各公司对源程序的管理方式对比,
 
PS:实际上这些是目前大多数程序公司的做法汇总,并没有涉及到什么商业秘密 个人感触对比
SVN会建立一个Repository(资源仓库),用压缩方法保存所有的代码文件(实际上可以保存任意的文件,在这里只以源代码来进行说明),并会记录所有的修改,因此你可以从中获取到任意版本的文件,可以查询到任意修改记录等等。 我在C公司里接触到SVN这个版本控制软件,第一次使用时就开始感叹此物的巧妙。随后发现她居然是免费的,遂决定在自己的电脑上也装装,以管理自己的那些垃圾代码。 首先要做的就是安装相应的软件:如果只是为了在本地使用,则不需要安装服务器端的软件。但本这学习的态度和做网络管理员的兴趣,我还是选择安装了通常在网络环境下所需软件。包括有:
Apache web server 2.0.59;  
==在服务器端提供诸如http://等协议的网络服务,在官方网站http://httpd.apache.org 上有下载,安装在服务器端。虽然最新版本已经到了2.2.4以上,但SVN在安装时不能自动识别该版本,所以建议还是使用同样稳定的旧版本,以后比较了解的时候再更新也不迟。
SVN 1.4.2;    
==建立在网络服务之上的应用程序,即我们最需要的版本控制软件Subversion,同样在官网http://subversion.tigris.org上有下载,此软件既是客户端又是服务器端,故两端都要安装。自己用当然只装一次就可以了。
TortoiseSVN 1.4.3;  
 ==将SVN单调的命令行功能集成到Windows的文件浏览器和右键中,使用方便无比。再同样的,在官网http://tortoisesvn.tigris.org 上有下载,两端都安装。

以下是安装步骤的说明,非菜鸟看了不要嘲笑啊。
依次安装Apache,SVN和TortoiseSVN
当Apache 安装到下面的画面时,填写的似乎只是一些用来记录的信息,Apache可能会将这些显示在访问失败时的网页中,并不会有实际的意义。
......

阅读全文(5807) | 评论:0

排序CStringArray类[网络资料收集](2007-01-07 22:42:00)

摘要:举例:
    CSortStringArray sortArray;    sortArray.Add(CString("Zebra\r\n"));
   sortArray.Add(CString("Bat\r\n"));
   sortArray.Add(CString("Apple\r\n"));
   sortArray.Add(CString("Mango\r\n"));    sortArray.Sort(); /*************************************************************************/ // CSortStringArray.cpp: implementation of the CSortStringArray class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CSortStringArray.h" void CSortStringArray::Sort()
{
   BOOL bNotDone = TRUE;    while (bNotDone)
   {
      bNotDone = FALSE;
      for(int pos = 0;pos < GetUpperBound();pos++)
         bNotDone |= CompareAndSwap(pos);
   }
   return;
}
BOOL CSortStringArray::Comp......

阅读全文(3315) | 评论:0

打开目录对话框类[网络资料收集](2007-01-07 20:19:00)

摘要:举例:
 CFoldersDialog cFolderDlg;
 cFolderDlg.BrowseFolder(m_hWnd,&m_strDirPath,_T("请选择文件夹"));
浏览文件夹的对话框会显示“请选择文件夹”提示字符,确定之后的文件夹路径会返回到m_strDirPath中,取消后不返回。 // FoldersDialog.cpp: implementation of the CFoldersDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FoldersDialog.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
////////////////////////////////////////////////////////////////////// CFoldersDialog::CFoldersDialog()
{ } CFoldersDialog::~CFoldersDialog()
{ }   int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData)
{
 switch(uMsg)
 {   case BFFM_INITIALIZED:
   ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData);
     break;   default:
     break;
 }  return&nbs......

阅读全文(2801) | 评论:0

避免重定义(redefinition)错误[总结](2006-12-17 15:51:00)

摘要:在一段时间的编程中,时常会遇到重定义(redefinition)问题。一般都是#include在包含头.h文件时出现了重复包含的关系。运气好的话可以比较容易的发现问题,运气不好的话只好列出所有的头文件.h中的包含关系,挨个检查是哪里出了问题。最近发现如果遵循“在头文件.h中不再包含头文件.h”的原则,可以从根本上避免这个问题。虽然这样做会使得在代码文件.c或.cpp中必须各自包含进来所需的头文件.h,还要注意在包含时可能会存在顺序的问题,但这比起查找何处进行了重定义来说简单了许多,也使包含关系更加清晰。 对原来的项目中的所有文件按上述原则进行了修改,暂未发现不良影响,感觉还不错。......

阅读全文(41142) | 评论:3

OSD仿真_MFC程序01[原创](2006-12-04 17:40:00)

摘要:Windows系统具有强大的绘图功能,可以用来模拟OSD显示。接下来将设计一个简单的模拟显示终端的程序,用于后续显示功能和菜单系统的开发。说明一下,对于Windows下的MFC编程我不怎么了解,只知道一些皮毛东西,所以望大家能指出其中的不足和错误。另外,这次开发的最终目标是建立一个可以移植的菜单系统,所以重点是模拟器端的运行情况而不是Windows程序的运行效率。 为了能比较真实的模拟显示内存(OSD Buffer)到显示终端的过程,用一个和显存等大的数组来模拟OSD Buffer,用一个和显示终端等大小的控件作为模拟显示,用一个和色板等大的数组来模拟硬件色板。
相应的变量为:BYTE OSDBuffer[OSD_BUFFER_LENGTH];m_staEmuDisplay;COLORREF OSDPalette[OSD_COLORNUMBER]; 步骤参考如下:
1、建立一个基于对话框的MFC工程;
2、添加一个静态文本框,ID为IDC_STATIC_EmuDisplay,对应的Static变量为m_staEmuDisplay;
3、更新模拟终端的显示与Windows程序自身的重绘显示相互独立处理,故定义一个和静态文本框兼容的成员CDC变量m_cdcEmuDisplay,在OnInitDialog()中进行初始化:
 CBitmap cBitmap;
 CPaintDC  staLCDDC(&m_staEmuDisplay);
 cBitmap.CreateCompatibleBitmap(&staLCDDC,OSD_WIDTH,OSD_HEIGHT);
 m_cdcEmuDisplay.CreateCompatibleDC(&staLCDDC);
 m_cdcEmuDisplay.SelectObject(&cBitmap);
 cBitmap.DeleteObject();
在OnPaint()时重绘静态文本框:
 CPaintDC  EmuDisplayCPaintDC(&m_staEmuDisplay);
 EmuDisplay......

阅读全文(5117) | 评论:3

绘图驱动-OSD原理2[原创](2006-12-03 00:23:00)

摘要:现在已经可以通过修改存储单元内容来改变OSD的像素,但还有个关键的问题是如何根据需要来进行操作,即如何将某个像素设置为指定颜色。接下来就要介绍一下色板的概念。 如下图,某个Byte中的低四Bit内容与一个像素一一对应,其值为“3”,那么数字“3”所代表的颜色便由色板来决定,然后再驱动OSD屏幕将像素设置为制定颜色。同样地,这种色板和物理OSD显示屏幕的对应关系一般也是通过寄存器设置,由硬件上来保障实现的。对于特定的显示环境,这种色板一般是固定的。 为了能使固定的图像数据在进行OSD显示时可以以不同的颜色输出,便可以采用逻辑色板这种方法。逻辑色板实际上是长度为颜色数的数组,将图像数据写入OSDBuffer时,可以通过该数组进行特定映射,本质上还是只能使用物理色板上的颜色数,只是颜色被改变。原理如下图。 ......

阅读全文(5021) | 评论:1

绘图驱动-OSD原理1[原创](2006-12-03 00:09:00)

摘要:OSD(On Screen Display)是屏幕显示技术的一种,用于在显示终端上显示字符、图形和图像。实现的过程为:存储器(一般为内存的一段)的内容与显示终端上的像素一一对应。这种一一对应的关系一般通过寄存器设置,然后由硬件上来负责实现。对存储器内容的操作便改变了屏幕的像素,从而可以实现特定界面的显示。实际上这也是一般数字显示器进行显示的方法。例如:320*240 单色(1 Bit)像素的OSD,需要40*240 Bytes的存储空间与其对应;320*240 16色(4 Bits)像素的OSD,需要160*240 Bytes的存储空间与其对应。
存储器空间为一维的,而OSD空间为二维的,并且对于小于256色(1 Byte)的OSD,还存在同一字节内每个Bit与像素的对应关系:(1)字节中的低位Bit与OSD的低像素对应(H2H或L2L);(2)字节中的高位与OSD的低像素对应(H2L或L2H)。
下图以16色(4 Bits),320*240像素 H2H(L2L) 的OSD为例分析存储器空间与OSD空间的映射关系。 图1-1 每一个格子代表一个像素
OSD中的2个像素对应1 Byte,所以一行显示内容所占的存储空间为320/2=160 Bytes,设pOSDBuffer指向OSD对应存储空间的首地址,为了将OSD上坐标(x,y)的像素设置值为PixelValue(值的范围为0x00--0x0f),即改变该像素的颜色,则需要先确定坐标(x,y)像素对应的字节存储空间地址为
pOSDDes=pOSDBuffer+y*160+x/2
由于该字节空间中存储不止一个像素的信息,所以还需要确定具体的Bits位:如果x为偶数,则该像素对应字节的低4Bits,需要保护字节的高4Bits;如果x为奇数,则对应字节的高4Bits,需要保护该字节的低4Bits。算法如下,
OldValue=*pOSDDes;
if(x%2)
 *pOSDDes=OldValue&0x0f(PixelValue<<4);
else
 *pOSDDes=OldValue&0xf0|PixelValue;
......

阅读全文(8055) | 评论:3

开张大吉!(2006-09-22 10:45:00)

摘要:今天刚来到了这里,新申请了个帐号,庆贺一下。 -----首先要谢谢CCTV 和 Progamfan网站的大力支持和赞助,要是没有你们就没有这个博客诞生,另外还要谢谢Baidu搜索引擎,让我顺利搜索到这个网站。最后希望大家在以后的日子里能继续支持我,我一定会更加努力的!......

阅读全文(2623) | 评论:2