博文
【原创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......
[原]自己总结的排序算法(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......
原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 ......
个人对回调函数的理解(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 dwWriteCount = 0; DWORD ......
大家的帮助贴~~~~~~~~(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的还有二进制输......
简单的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......
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......
