博文
【原创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......
[原]自己总结的排序算法(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) ; //如果两边扫描的下标交错,就停止(完成一次)
......
原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......
个人对回调函数的理解(2007-12-14 11:21:00)
摘要:例如,我正在调用windows系统的函数,但出于某种原因,windows中被调用的函数依赖调用者提供一个函数处理,恩,这样说相当混乱,那么举个例子:(csdn 引用jemmylau(枕头))
用户A写一段程序,处理某一事务,例如数据排序。他对排序算法有相当研究,因此,他使用了一种高效的排序算法。为了让不懂排序算法的人也能够使用这个高效的算法,他决定为其他用户提供一个函数接口。但是,既然要排序,就必须比较2个对象的大小,而算法编写者对客户的对象没有任何知识,因此,他需要客户提供一个比较对象大小的函数,如,
int comp(const void* obj1, const void* obj2)
当他需要比较大小时,就调用客户提供的这个函数,根据函数返回值确定大小关系。而客户提供的这个比较函数,就可以称作回调(callback)函数,即:本来是我(客户)调用你(算法库),而你会过头来又调用我的函数(比较函数),回调函数由此得名。
回调函数的概念随处可见,其应用并不局限于系统调用。一般来讲,如果某个处理流程具有确定性,而流程中某个具体的处理环节需要根据实际情况具体处理,就可以将这个流程固定下来,在需要具体处理的地方“安插”适当的回调函数接口。
再如,简单版,你是单独处理排序的,我是处理比较大小的,我现在需要对某些数据排序,所以我调用你的函数,但是你只处理排序,你排序过程中又依赖我的比较大小算法,所以你又得调用我的函数,这,就称为回调(我的函数).
......
关于SQL,82u(2007-11-02 10:18:00)
摘要:sql="insert into CDC_Manage(opCode,feature1) values ('123102',"+oft+")";//,""++
关于count字段不正确
也有可能是主键重复......
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动态链接库中函数的呼叫。......
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......
大家的帮助贴~~~~~~~~(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......
简单的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......
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:
......