博文

【原创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->Se......

阅读全文(4627) | 评论: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) ; //如果两边扫描的下标交错,就停止(完成一次)
......

阅读全文(2847) | 评论: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&n......

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

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

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

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

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

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

阅读全文(536) | 评论: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动态链接库中函数的呼叫。......

阅读全文(4336) | 评论: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&nb......

阅读全文(692) | 评论: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之间的字符,则转换为相应的十六进制字符,否则返回-1
lowhexdata=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之间的字符,则转换为相应的十六进制字符,否则返回-1
char CSCommTestDlg::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))     //0-9
return ch-0x30;
else if((ch>='A')&&(ch<='F'))// 大写A-F
return ch-'A'+10;
else if((ch>='a')&&am......

阅读全文(3314) | 评论: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(INAD......

阅读全文(3726) | 评论: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:
 ......

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