博文

【原创VC】不规则窗口程序设计(2008-02-21 10:55:00)

摘要:/**不规则窗口程序设计----by sword2008        @2008.2.21    刚好元宵节 */  目标:对话框或者其他窗口控件,利用 函数绘制任意外观的控件或者窗口 int SetWindowRgn( HWND hWnd, HRGN hRgn, BOOL bRedraw ); hWnd为窗口句柄, bRedraw为是否重绘 hRgn为外观区域,这个为最重要的,决定整个外观,其包括四大函数 CreateRectRgnIndirect CreateEllipticRgnIndirect CreatePolygonRgnCombineRgn            //个人认为比较好用的   用CreateEllipticRgnIndirect做个例子 建立一个空的项目,对话框程序。 OnInitDialog()里面 CRgn MyRgn; RECT m_rect; m_rect.left=0;m_rect.top=0;m_rect.right=500;m_rect.bottom=500; MyRgn.CreateEllipticRgnIndirect(&m_rect);  SetWindowRgn(MyRgn,true); 看看吧!hRgn确定外观的描绘!呵呵!还有其他函数,可以慢慢观看 例子2,用了CombineRgn跟踪轨迹  CDC * pDC = this->GetDC(); CFont rfont,*pOldFont; rfont.CreatePointFont(500,"隶书"); pOldFont=pDC->SelectObject(&rfont); CRgn MyRgn; pDC->BeginPath(); pDC->SetBkMode(TRANSPARENT); CString s......

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

[原]自己总结的排序算法(2007-12-20 10:13:00)

摘要:1,快速排序 这个有点难解释,感觉上就是纽来纽去,先从首记录开始也行,从未记录开始也行,以后补上. Tony Hoare在1962年首次提出了快速排序算法。对快速排序方法的研究表明,至今快速排序算法仍然是流传久远的最实用的排序算法。只在输入数据项有更详细的信息时,其它排序算法才可能胜过快速排序算法。快速排序算法是利用分治技术的典型例子,随机分治策略是设计组合优化与计算几何一类问题有效算法的基础。分治策略分为三步:   (1)将问题分成若干大小基本相等的子问题;  (2)独立地解决这些子问题;  (3)将子问题归并成原问题的解。  快速排序的基本思路是:首先我们选择一个中间值middle(程序中我们可使用数组中间值),把比中间值小的放在其左边,比中间值大的放在其右边。由于这个排序算法较复杂,我们先给出其进行一次排序的程序框架(从各类数据结构教材中可得): void QuickSort(int *pData, int left, int right){  int i, j;  int middle, iTemp;  i = left;  j = right;  middle = pData[(left + right) / 2]; //求中间值  do  {   while ((pData[i] < middle) && (i < right)) //从左扫描大于中值的数    i++;   while ((pData[j] > middle) && (j > left)) //从右扫描小于中值的数    j--;   if (i <= j) //找到了一对值   {    //交换    iTemp = pData[i];    pData[i] = pData[j];    pData[j] = iTemp;    i++;    j--;   }  } while (i <= j) ; //如果两边扫描的下标交错,就停止(完成一次)  //当左边部分有值(left<j),递归左半边  if(left<j)    QuickSort (pData,left,j);    //当右边部分有值(right>i),递归右半边  if(right>i)    QuickSor......

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

原CStdioFile总结(2007-12-19 11:53:00)

摘要:CStdioFile继承自CFile. 参数内容: 第一个参数为路径+文件名,最后一个为错误出现的结构. 现在解释下第二个参数 CFile::modeCreate   Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length. 指定构造器创建一个新的文件,如果文件已经存在,则内容截0. CFile::modeNoTruncate   Combine this value with modeCreate. If the file being created already exists, it is not truncated to 0 length. Thus the file is guaranteed to open, either as a newly created file or as an existing file. This might be useful, for example, when opening a settings file that may or may not exist already. This option applies to CStdioFile as well. modeNoTruncate 假如你不用这个参数的话,用modeCreate模式创建和打开一个文件,假如这个文件已经存在,则会清空这个已经存在的文件,加上modeNoTruncate的话,就不会清空这个文件了 CFile::modeRead   Opens the file for reading only. 只是以读取方式打开CFile::modeReadWrite   Opens the file for reading and writing. 读与写同时 CFile::modeWrite   Opens the file for writing only.只写 CFile::modeNoInherit   ......

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

个人对回调函数的理解(2007-12-14 11:21:00)

摘要:例如,我正在调用windows系统的函数,但出于某种原因,windows中被调用的函数依赖调用者提供一个函数处理,恩,这样说相当混乱,那么举个例子:(csdn 引用jemmylau(枕头)) 用户A写一段程序,处理某一事务,例如数据排序。他对排序算法有相当研究,因此,他使用了一种高效的排序算法。为了让不懂排序算法的人也能够使用这个高效的算法,他决定为其他用户提供一个函数接口。但是,既然要排序,就必须比较2个对象的大小,而算法编写者对客户的对象没有任何知识,因此,他需要客户提供一个比较对象大小的函数,如,     int   comp(const   void*   obj1,   const   void*   obj2)     当他需要比较大小时,就调用客户提供的这个函数,根据函数返回值确定大小关系。而客户提供的这个比较函数,就可以称作回调(callback)函数,即:本来是我(客户)调用你(算法库),而你会过头来又调用我的函数(比较函数),回调函数由此得名。     回调函数的概念随处可见,其应用并不局限于系统调用。一般来讲,如果某个处理流程具有确定性,而流程中某个具体的处理环节需要根据实际情况具体处理,就可以将这个流程固定下来,在需要具体处理的地方“安插”适当的回调函数接口。     再如,简单版,你是单独处理排序的,我是处理比较大小的,我现在需要对某些数据排序,所以我调用你的函数,但是你只处理排序,你排序过程中又依赖我的比较大小算法,所以你又得调用我的函数,这,就称为回调(我的函数).......

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

关于SQL,82u(2007-11-02 10:18:00)

摘要:sql="insert into CDC_Manage(opCode,feature1) values ('123102',"+oft+")";//,""++   关于count字段不正确 也有可能是主键重复......

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

vc 编译器的工作过程(2007-10-31 14:37:00)

摘要:正常情况下,在编译阶段,编译器从C原始码文件产生一个.OBJ(目标)文件。在连结阶段,连结程序结合.OBJ文件和.LIB(库)文件以建立.EXE(可执行)文件。通过在「 Project」页面标签上选择「Settings」并单击「 Link」页面标签可以查看这些库文件的列表。特别地,您会注意到KERNEL32.LIB、USER32.LIB和GDI32.LIB。这些是三个主要Windows子系统的「引用链接库」。它们包含了动态链接库的名称以及放进.EXE文件的引用信息。Windows使用该信息处理程序对KERNEL32.DLL、USER32.DLL、GDI32.DLL动态链接库中函数的呼叫。......

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

VC 16处理指纹(2007-10-25 13:54:00)

摘要: cByte[0]=0x1b;  cByte[1]=0x72;//114  cByte[2]=0x73;  cByte[3]=0x01;//注意长度为两个数  cByte[4]=0x21;//289//92//0121  cByte[5]=0x89;  cByte[6]=0x02;   all[0]+=cByte[3]+cByte[4]+cByte[5]+cByte[6];//加四个,因为长度0X01容易被忽略    ////////////////第一个指纹不需要校验和  for(int i=0 ,j=7;j<150;i=i+2,j++)//i为字符串第几个截取的INDEX,j为第几个特征,最后一个是检验和  {//572   temp=s.Mid(i,2);   cByte[j]=CStringTo16byte(temp);   all[0]+=cByte[j];  }  ////////////////   for(int i1=286, j1=150;j1<293;i1=i1+2,j1++)//i为字符串第几个截取的INDEX,j为第几个特征,最后一个是检验和  {   temp=s.Mid(i1,2);    cByte[j1]=CStringTo16byte(temp);   all[0]+=cByte[j1];  }  cByte[293]=all[0];   ////////////////   DWORD  dwWriteCount     =   0;  DWORD ......

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

大家的帮助贴~~~~~~~~(2007-09-13 15:34:00)

摘要:int CSCommTestDlg::String2Hex(CString str, CByteArray &senddata){int hexdata,lowhexdata;int hexdatalen=0;int len=str.GetLength();senddata.SetSize(len/2);for(int i=0;i<len;){char lstr,hstr=str[i];if(hstr==' '){i++;continue;}i++;if(i>=len)break;lstr=str[i];hexdata=ConvertHexChar(hstr);//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1lowhexdata=ConvertHexChar(lstr);if((hexdata==16)||(lowhexdata==16))break;else hexdata=hexdata*16+lowhexdata;i++;senddata[hexdatalen]=(char)hexdata;hexdatalen++;}senddata.SetSize(hexdatalen);return hexdatalen;} //这是一个将字符转换为相应的十六进制值的函数//好多C语言书上都可以找到//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1char CSCommTestDlg::ConvertHexChar(char ch) {if((ch>='0')&&(ch<='9'))     //0-9return ch-0x30;else if((ch>='A')&&(ch<='F'))// 大写A-Freturn ch-'A'+10;else if((ch>='a')&&(ch<='f'))// 小写a-freturn ch-'a'+10;else return (-1);}标志一共有15个,加上三个控制标志的标志,一共是18个。这个是VC串口转换的由字符到HEXo 他说的是C语言,我说的是C++3q ````````有搞好的源代码,串行口相关的,有VB,有VC的还有二进制输......

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

简单的Socket服务客户端(2007-08-21 14:52:00)

摘要:有阻塞的程序,部分,不好意思 =============================================server void CSeverClientDlg::OnButton_ThreadOn() { UpdateData(true);//刷新端口  if(m_edit_Port=="") {  AfxMessageBox("请输入端口"); } else {   port=atoi(m_edit_Port);    deal(); }   } void CSeverClientDlg::deal(){ CString linkPort="["+m_edit_Port+"]"; CString nowPing;  if(IsListening==true) {  AfxMessageBox("已经在监听"); } else { ServerSocket=socket(AF_INET,SOCK_STREAM,0); ClientSocket=socket(AF_INET,SOCK_STREAM,0);  struct sockaddr_in ServerAddr;  if( ClientSocket == -1 ) {  AfxMessageBox( "accept调用失败!\n" );  exit( 0 ); }  ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(port);//监视的端口号2008 ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);//本地IP  if( (bind(ServerSocket,( struct sockaddr *)&ServerAddr,sizeof(ServerAddr))) &l......

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

dll一些情况(2007-08-20 11:23:00)

摘要:dll class.globals #include "stdafx.h"#include "lib.h" //#pragma data_seg("Shared")   HANDLE handle=NULL;   //必须在定义的同时进行初始化!!!!//#pragma data_seg()//#pragma   comment(linker, "/section:Shared,rws"   )   int add(int x){  //CreateFile switch(x) { case 0:  x=1;break; case 1:  x=2;break; case 2:  x=3;break; case 3:  x=4;break;  case 4:  x=5;break; default : ;   }  return x;} bool ComOpen(int x,CString c){  CString str; // AfxMessageBox(c);  switch(x) { case 0:  str="COM1";break; case 1:  str="COM2";break; case 2:  str="COM3";break; case 3:  str="COM4";break;  case 4:  str="COM5";break; default : ; }  HANDLE m_hCom; DWORD dwError=0;  m_hCom = CreateFile("COM1", GENERIC_READ | GENERI......

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