博文

Visual C++6.0 API函数操作技巧集(2005-12-06 09:46:00)

摘要:我们在编制应用软件的过程中,常常需要对光标和鼠标操作,本人在文中介绍了Windows系统中有关实现对鼠标和光标进行操作的API函数,并给出了在Visual C6.0++中利用所介绍的API函数实现对鼠标和光标的操作的代码。

  一、隐藏和显示光标

  函数: int ShowCursor ( BOOL bShow );

  参数 bshow,为布尔型,bShow的值为False时隐藏光标,为True时显示光标;该函数的返回值为整型,为鼠标隐藏或显示的指数器;返回值大于等于0时显示光标,否则隐藏鼠标;如果安装了鼠标初值为0。

  实例:

  在基于对话框的应用程序中放置两个Button,名称分别为HideCursor和ShowCursor;再放置一个CStatic控件,名称为Label1,用于显示光标计数器。

  源程序为:

// 使光标计数器的值减一,如果小于零,隐藏光标
void CMyTestDlg::OnHideCursor()
{
int i;
i=ShowCursor(FALSE);
Cstring string;
string.Format(_T("%d" ),i);
Label1.SetWindowText(&string);
}
// 使光标计数器的值加一,如果大于等于零,显示光标
void CMyTestDlg::OnShowCursor()
{
int j;
j=ShowCursor(TRUE);
Cstring string;
string.Format(_T("%d" ),j);
Label1.SetWindowText(&string);
}
  运行程序,连续单击ShowCursor按钮,你会见到计数器从1(光标显示时初值为0)开始不断加1;再连续单击HideCursor按钮,又会见到计数器不断减1,当计数器为-1时开始隐藏光标。

  二、交换鼠标左右键和恢复

  函数:



BOOL SwapMouseButton ( BOOL fSwap );
 ......

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

VC入门的一条[转](2005-12-03 18:46:00)

摘要:

    首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般的小程序能搞定了。看到那些因为不知从何下手而苦苦挣扎的朋友,希望我的文章能给他们一些帮助。

    学编程急不得,上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话也许能挺过来,但也是会缺乏后劲,不得不回过头来补习基础知识。意志不坚强的话,很有可能就此放弃了,并留下一个VC难得不得了的印象。其实,只要踏踏实实一步一步来,VC也就是很简单点事。在这里我说一下,如果你还只是一个初中生,那么你就应当仔细考虑一下了。首先,限于你的知识和思维能力,学学C语言还应该没问题,但要学VC是要下相当大的功夫的。而且,你现在学到的东西将来一定会过时,所以不如把精力放在算法的研究上,毕竟这些东西永远都不会过时。
    
    我觉着如果走对路子,入门VC,一个暑假应该够用了。

    虽说学VC并不是传说的那么难,可不下些苦功夫是学不成的。在学VC前,你必须确定,你是因为热爱编程才学VC的,而不是出于炫耀或其他。否则,恐怕你坚持不到胜利的那一天。    

    对于首次接触编程的同学,我建议最好先学一下Quick BASIC(DOS里就有带,就是那个QBASIC.EXE),不用多学,知道什么是整型什么是浮点,以及DO...LOOP FOR...NEXT 等最基本的知识,能算个阶乘,求个积分就行了,关键要明白计算机是怎么执行命令的,对编程有个感性认识。如果你对自己有自信,也可以直接学C++,应该也不会多费太多事。不过我觉着因为有很多资料是FOR VB的,并且网页编程常用VB Script,以后你也很有可能要用到VB,所以了解一些BASIC对以后也是有帮助的。而且如果只是要算个小题用QB比VC、VB之类方便多了。(找个人教一两天应该就能搞定了吧)

  ......

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

MFC窗口位置管理详细分析及实例(2005-12-03 17:37:00)

摘要: 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口)。上边是工具栏,中间是视图窗口,下边是状态栏。三个窗口在框架的客户区里和平共处,互不重叠。主框架窗口的尺寸改变了,别的子窗口都能及时调整自己的尺寸以便保持相互位置关系不变,例如状态条窗口总能保持在主框架客户区底部,并且其宽度总能和主框架客户区宽度一致。工具栏窗口总能停靠在主框架的某一边不变,其宽度或高度总能和主框架客户区的宽度或高度一致,视图窗口总能填满主框架客户区的剩余空间。

假如我们自己从CWnd类派生一个窗口类并生成一个窗口,在它的客户区里要生成若干个子窗口,我们想使这些子窗口排列得规规矩矩,互不重叠,当父窗口的尺寸变了时各个子窗口能适时调整自己的尺寸和位置,使各个子窗口之间的位置大小比例关系不变。当移动其中一个或几个子窗口时,别的子窗口能及时为这个移动了的子窗口让位。当然我们可以利用api函数里管理窗口的函数来编写自己的管理子窗口的方法。可是如果在父窗口的客户区里有了工具栏,状态条等等子窗口时,你自己加进来的子窗口还能和这些mfc提供的子窗口融洽相处吗?你如何保证你的子窗口不会覆盖了能够四处停靠的工具栏?当工具栏和状态条消失后你的子窗口如何才能知道,以便及时调整自己的大小从而覆盖工具栏和状态条腾出的空间?基于文档视图构架的窗口的客户区内还有个视图,你自己硬加上的子窗口能不和视图窗口争地盘吗?

所以必须了解mfc的窗口管理它的客户区的方法。其实,mfc的窗口管理它的客户区的方法是非常简单的:父窗口调用一个函数,子窗口响应一个消息,就这么多。

CWnd::RepositionBars函数和WM_SIZEPARENT消息

先简述一下mfc的窗口为子窗口分配客户区空间的过程:这一过程是父窗口与子窗口共同协调完成的。父窗口先提供它的客户区内的一块区域,叫做起始可用区域。然后调用一个函数,在这个函数里,父窗口把这片区域通过一个消息提交给它的第一个子窗口,该子窗口决定自己要占用多大一块,然后在可用区域里把它将占据的部分划出去,这样可用区域就被切去了一块。父窗口再把这块剩下的可用区域通过同样的消息提交给第二个子窗口,第二个子窗口再根据自己的需要切掉一块。如此这般,每个子窗口都切去自己所需的一块。最后剩下的可用区域就给最后......

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

 Sql连接查询(2005-12-03 12:07:00)

摘要:   Sql连接查询


连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table

[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_......

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

高级程序员考试大纲(2005-11-26 12:57:00)

摘要:考试对象与要求

能按照软件需求规格说明书进行软件设计并担负指导程序员工作的技术人员
具有中级技术职务(工程师)的实际工作能力和业务知识
考试范围

一.软件设计能力

简单计算机应用系统的需求分析
流行的需求分析方法论初步
数据流图的设计及改进
软件界面设计
输入输出数据文件的设计
用户界面的设计
软件间的界面设计
概要设计
模块划分方法
模块调用关系的描述
模块功能描述
模块界面描述
常用的设计方法
详细设计
满足指定功能的各种处理过程的算法设计、评价和改进
PDL语言
数据库/数据结构的设计
根据不同的要求进行数据库/数据结构的设计、
软件测试
测试方法
测试用例的设计
测试的静态和动态分析
测试的计划与实施
测试报告
测试结果的评价
测试工具
排错技术
文档编制
概要设计规格说明书
详细设计规格说明书
数据库/数据结构规格说明书
集成测试计划和集成测试报告
文档编制标准
文档编制工具
软件维护方法和工具
软件可靠性和安全性设计
设计评审的组织与实施
软件质量管理和进度管理
二.程序编制能力

程序语言
能使用CASL汇编语言(文本将附在试卷上)(可调阅往年试卷)
能熟练使用下列程序语言中的一种
C(美国标准)/ C++

FORTRAN(国家标准GB3057-82)

根据软件设计规格说明书,画出流程图(国家标准GB1526-89)和编制程序
理解给定的程序和流程图的功能和实现思想
程序和流程图的排错
能对程序和流程图的正确性进行测试并对发现的错误或不足加以纠正或改进
具有良好的程序编制风格
基本算法的设计和分析
程序编制方法
三.软件知识

数据结构
数组、记录、列表(List)、栈(Stack)、堆(Heap)、队列、树、图的定义、存储和操作
序列、集合等的定义、......

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

中级程序员考试大纲(2005-11-26 12:55:00)

摘要:考试对象与要求

能按照软件设计规格说明书编写程序的技术人员
具有初级技术职务(助理工程师)的实际工作能力和业务知识
考试范围

一.程序编制能力

程序语言
能熟练使用下列程序语言中的一种
C(美国标准)

FORTRAN(国家标准GB3057-82)

根据软件设计规格说明书,画出流程图(国家标准GB1526-89
理解给定的程序和流程图的功能
程序和流程图的排错
能对程序和流程图的正确性进行测试并对发现的错误加以纠正
具有良好的程序编制风格
基本算法
查找(Search)、更新、排序(Sort)、合并及字符处理
迭代、插值、数值积分、矩阵计算、方程求解
简单图形(线段和圆)的计算机图示
程序编制方法
分支、循环、子程序、递归
输入/输出和文件的基本处理
二.软件基础知识

基本数据结构
数组、记录、列表(List)、栈(Stack)、堆()、队列、树的定义、存储和操作
基本的程序控制结构
分支、循环、子程序、函数和过程
递归
流程图的标准形式
程序语言的基础知识
语言所提供的数据结构和控制结构
常用语言的知识
语言处理程序的基础知识
汇编、编译、解释系统的基础知识
文件系统使用的基础知识
文件组织的类型和特点
文件命令和文件语句的使用
操作系统使用的基础知识
操作系统的类型和功能
联机命令语言和作业控制语言的使用
常用操作系统的知识
常用软件开发工具和平台的基础知识
数据库系统使用的基础知识
数据库模型
数据定义语言和数据操作语言的使用
SQL的使用
常用数据库管理系统的知识
网络软件的基础知识
计算机信息安全基础知识
计算机信息安全基本概念
常见计算机病毒的识别
三.硬件基础知识

数制及其转换
· 二进制、十进制和十六进制等常用数制及其相互转换

机内代码
原码、补码、反码、移码
定点数与浮点......

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

手把手教你超频(2005-11-24 10:53:00)

摘要:一个才买了电脑的菜鸟朋友对阿萌诉苦,他看到现在很多人都在玩超频,只是简单地鼓捣几下就把CPU的速度提高了。他非常羡慕,也想去超频,可是苦于不敢动手。阿萌一听,立马滔滔不绝给他谈论了一番超频的入 ADFHOST885="http://universalmccannafa.allyes.com"; ADFCID885=1436; ADFUSER885="http://universalmccannafa.allyes.com/main/adfclick?user=universalmccann|FY06_security_CCW|News_PIP_360_300_imp&db=universalmccannafa&log=on&ip=61.186.109.147&bid=885&cid=44738&sid=2399&exp1=-798575976&exp2=8067679368&cache=985995&url=http://www.microsoft.com/china/security/"; 门绝招,想知道这些绝招是什么吗?  注意啦!超频前必知 阿萌:超频为许多电脑玩家所热衷,它可以在已有硬件的基础上花少许钱或不花钱就让硬件性能获得更大的提高。当然对于对电脑不甚了了的朋友来说,超频却是让人又喜又怕。其实不必去羡慕那些DIY玩家宣扬的超频成果,只要你知道超频的原理和操作方法,同样可以玩超频。     菜鸟:这么一说我就有信心了,那么究竟什么是超频呢?   阿萌:电脑的超频就是通过人为的方式将CPU、显卡等硬件的工作频率提高,让它们在高于其额定的频率状态下稳定工作。以Intel P4C 2.4GHz的CPU为例,它的额定工作频率是2.4GHz,如果将工作频率提高到2.6GHz,系统仍然可以稳定运行,那这次超频就成功了。   菜鸟:超频原来是这么回事呀,那么超频的原理是什么呢?   阿萌:就说CPU超频吧,它的主要目的是为了提高CPU的工作频率,也就是CPU的主频。而CPU的主频又是外频和倍频的乘积。例如一块CPU的外频为100MHz,倍频为8.5,可以计算得到它的主频=外频×倍频=100MHz×8.5 = 85......

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

C++基础:常量成员函数特殊说明(2005-11-23 23:38:00)

摘要:
 1. 传指针时,我们可以通过指针来修改它在外部所指向的内容。但如果要修改外部指针所指向的对象是不可能的。例如传递外部指针到函数内来分配空间,必须传递指针的指针或指针的引用。   2. char carry[10] = {0}; 编译器会将其后所有的东西都置0;   3. 函数返回值为const时,返回的东西付给一个类型相同的标示后其不能为左值;   4. const int *i; int const *i; int * const i; 前两个功能相同,说明I所指向的内容不变;最后一个说明指针指向的地址不变,但内容可变。   5. 类中的const成员函数。定义为在原型后加const。常量函数不能修改类中的任何属性。但有两种方法可以修改。   a) {(myclass *)this->member1 = values;}   b) 将一个成员定义成mutable即可被常量函数修改。   6. 类中的常量const 类型的,不能在类中被用来定义数组。而enum {ONE=100; TWO=2};定义的ONE、TWO却可以。通常的enum定义的置分配问题:enum A{ L=9, Z};此时Z的值为10。   7. 用const定义的int可用来开辟数组,但const定义的常量数组中的元素,不能用来定义数组。   8. 用sizeof计算变量的空间,如果是数组,按实际空间返回;常量字符串(实际上是在静态内存区开辟的变量)sizeof返回比实际长度加一。如果是指针则不考虑它指向的空间大小,仅仅返回指针类型的大小。如果用sizeof计算函数的行参,即使是属组也仅仅返回一个相关类型指针的大小。   9. 形如int iarray[] = {12, 124, 433};编译器会自动给iarray分配3个元素的长度。元素长度的个数计算公式为sizeof(iarray) / sizeof(*iarray)。   10. 拷贝构造函数:当行参和实参结合时,如果是复杂对象的传值类型,则调用拷贝构造函数生成一个临时对象作为实参,退出函数时,临时对象被调用析构函数释放。当返回值是复杂对象是,也是调用拷贝构造函数来赋值。这就出现构造函数和析构函数被调用次数不相等的情况。拷贝构造函数的原型为A(A&),我们可在类中重载。(缺省的拷贝构造......

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

C常规错误(2005-11-23 23:37:00)

摘要:C语言的最大特点是:功能强,使用方便灵活.C编译的程序对语法 检查并不象其它高级语言那么严格,这就给编程人员留下"灵活的 余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其 对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的 错误.看着有错的程序,不知该如何改起,本人通过对C的学习, 积累了一些C编程时常犯的错误,写给各位学员以供参考.      1.书写标识符时,忽略了大小写字母的区别. main()
{
 int a=5;
 printf("%d",A);
}    编译程序把a和A认为是两个不同的变量名,而显示出错信息. C认为大写字母和小写字母是两个不同的字符.习惯上,符号常量 名用大写,变量名用小写表示,以增加可读性.   2.忽略了变量的类型,进行了不合法的运算. main()
{
 float a,b;
 printf("%d",a%b);
}    %是求余运算,得到a/b的整余数.整型变量a和b可以进行求余 运算,而实型变量则不允许进行"求余"运算.   3.将字符常量与字符串常量混淆. char c;
c="a";    在这里就混淆了字符常量与字符串常量,字符常量是由一对单 引号括起来的单个字符,字符串常量是一对双引号括起来的字符序 列.C规定以"\"作字符串结束标志,它是由系统自动加上的,所 以字符串"a"实际上包含两个字符:'a'和'\',而把它赋给一 个字符变量是不行的.   4.忽略了"="与"=="的区别.   在许多高级语言中,用"="符号作为关系运算符"等于". 如在BASIC程序中可以写 if (a=3) then …    但C语言中,"="是赋值运算符,"=="是关系运算符.如: if (a==3) a=b;    前者是进行比较,a是否和3相等,后者表示如果a和3相等,把 b值赋给a.由于习惯问题,初学者往往会犯这......

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

问题大全(自己收藏)(2005-11-18 12:53:00)

摘要:1 【 C 语言吧 · 问题资料大全 】 
 注意:
1.这里会尽量搜集所有问题,定时更新,有问题请先查阅这里.
2.为方便查阅,请不要在此问问题,此类贴将被删除,不另通知.
3.希望这里成为大家学习 C 的好帮手. 2 ■■■■■■■____本吧相关____■■■■■■■ 
★本吧推荐的几个C编译器: http://post.baidu.com/f?kz=2769360
◆本吧代码格式编辑器: http://post.baidu.com/f?kz=9364381
◆本吧代码中显示?: http://post.baidu.com/f?kz=5054984
4 ■■■■■■■____学习资料____■■■■■■■ 
◆搜索答案与提问的秘诀:http://post.baidu.com/f?kz=6602487
◆C 语言学习看什么书:http://post.baidu.com/f?kz=5728013
◆如何学好c语言:http://post.baidu.com/f?kz=8642778 
◆学 C 容易出错的地方: http://post.baidu.com/f?kz=4275539 
◆C程序易犯错误:http://post.baidu.com/f?kz=12428951
◆几种排序算法:http://post.baidu.com/f?kz=5633380
◆几个经典字符串Hash函数:http://post.baidu.com/f?kz=5662514 
◆100,000素数表:http://post.baidu.com/f?kz=5663116
◆C99 的语言新特性:http://post.baidu.com/f?kz=4784366
◆深入理解C语言指针的奥秘:http://post.baidu.com/f?kz=5932198
◆ISO-c99标准英文全文(pdf格式):http://www.nirvani.net/docs/
◆C 的文件操作:http://post.baidu.com/f?kz=5877273
◆字......

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