09 2007 档案

摘要:当你创建一个线程时,其实那个线程是一个循环,不像上面那样只运行一次的。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是这样,在那个死循环里不断地使用WaitForSingleObject函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。当在线程里运行阻塞的函数时,就需要在退出线程时,先要把阻塞状态变成非阻塞状态,比如使用一个线程去接收网络数据,同时使用阻塞的SOCKET时,那么要先关闭SOCKET,再发送事 阅读全文
posted @ 2007-09-25 21:32 ajuanabc 阅读(183) 评论(0) 推荐(0) 编辑
摘要:接着上面,再继续实现更加强大的线程类。从上面的C++类里可以看到,要在静态函数里使用类的成员就需要获取this指针,也就是通过CreateThread函数里把类的this指针传送进来的,这样在函数ThreadProc里的参数lpParameter就是this指针了。因此把参数lpParameter转换为CThread类指针,这样就可以使用类的成员。在这个例子里使用wsprintf函数来格式化线程ID输出来,下面就来详细地分析例子吧。函数wsprintf声明如下:WINUSERAPIintWINAPIVwsprintfA( __out LPSTR, __in __format_string LP 阅读全文
posted @ 2007-09-24 21:39 ajuanabc 阅读(182) 评论(0) 推荐(0) 编辑
摘要:上面已经介绍怎么样创建一个简单的线程,在那里就需要使用函数WaitForSingleObject,它是用来做什么的呢?其实它是用来实现等待线程结束的,它的机理是这样的,通知Windows操作系统,现在我进入睡眼状态,当我关注的对象条件是否满足,如果满足了就吵醒我。在那里关注的对象是线程是否退出,这是一个条件测试。如果不等待线程关闭,就去删除线程的资源,就会出错的。使用前面的线程是简单一些,但它不合适复用,现在就使用C++的类来封装一个比较好用的类,这样就可以很方便地创建很多线程来使用,当然还可以继承它,实现更复杂的功能,下面就来学习这个例子。函数WaitForSingleObject声明如下: 阅读全文
posted @ 2007-09-23 11:19 ajuanabc 阅读(136) 评论(0) 推荐(0) 编辑
摘要:随着时代的发展,计算机技术发展得很快。CPU已经从单核心到多核心的转变,也就是一个CPU里具备了同时做多件事情的能力,而不是过去的分时复用了,而是实实在在地做多件事情。因此,开发软件也进入了一个新时代,就是多线程软件的开发时代。如何合理地分配多个线程同时运行,是提高软件效率的关键因素了。比如像网络游戏的客户端里,就可以使用一个线程不断地更新游戏的界面,分配另外一个线程不断地发送和接收网络的数据,这样CPU的两个核心都在不断地工作。如果还像以前那样使用一个线程的话,就会发现只有一个内核在做事情。当然使用线程的编程模型,也会大大地简化软件的复杂性。下面就来使用线程的API函数。函数CreateTh 阅读全文
posted @ 2007-09-22 22:53 ajuanabc 阅读(153) 评论(0) 推荐(0) 编辑
摘要:当你想控制一个现有的窗口程序时,就需要获取那个程序的窗口句柄。比如有一些黑客软件需要查找到窗口,然后修改窗口的标题。在外挂流行的今天,惊奇地发现它们也可以修改输入窗口的文字。这其中,就需要使用到FindWindowEx函数来定位窗口。下面就来使用这个函数来实现控制Windows里带的计算器程序。打开计算器程序,最小化在状态下面,运行本例子,点击创建按钮后,就可以点按钮,就会把计算器显示在最前面。函数FindWindowEx声明如下:#if(WINVER >= 0x0400)WINUSERAPIHWNDWINAPIFindWindowExA( __in_opt HWND hWndParen 阅读全文
posted @ 2007-09-21 21:39 ajuanabc 阅读(277) 评论(0) 推荐(0) 编辑
摘要:创新是永恒的追求。当大家习惯Windows的界面时,又想自己开发的软件耳目一新的感觉,那么就得要改变窗口的形状,比如心形的窗口,总之是不规则的窗口。这时就需要使用到叫做区域的技术。区域就是把不同的形状的图形进行组合,然后可以填充它,或者在它那里显示。比如MSN左边的TAB按钮,应就是区域的运用就可以实现它了。函数CreateRectRgn声明如下:WINGDIAPI HRGN WINAPI CreateRectRgn( __in int x1, __in int y1, __in int x2, __in int y2);x1和y1是区域左上角的X轴和Y轴坐标。x2和y2是区域右下角的X轴和Y 阅读全文
posted @ 2007-09-20 21:24 ajuanabc 阅读(175) 评论(0) 推荐(0) 编辑
摘要:当你开发一款年轻人使用的软件时,肯定想用一点动感的特性来吸引他们。比如QQ软件就有这个特性,当你把它放到桌面边上时,就会自动隐藏起来,当你的鼠标放到那里时,就会自动慢慢移动出来,副有动感的特性,肯定让年轻人喜欢上它的。还有当你开发软件时,想先动态地显示公司的商标,或者公司的宣传材料时,就会使用到闪屏的效果。其实这两个特性都可以使用API函数AnimateWindow来实现的,下面就来介绍怎么使用它。函数AnimateWindow声明如下:#if(WINVER >= 0x0500)WINUSERAPIBOOLWINAPIAnimateWindow( __in HWND hWnd, __in 阅读全文
posted @ 2007-09-19 21:50 ajuanabc 阅读(181) 评论(0) 推荐(0) 编辑
摘要:有一天,用户突然对我说,你这个窗口能不能放到最顶端,这样操作和打开文件就很不方便了。这个功能就需要改变窗口的属性了。比如大家使用QQ时,就有一个功能,设置QQ的窗口在最顶端,不管你选择了什么窗口,QQ的界面永远都在最前面。又像FlashGet的状态查看窗口,一直保持在窗口的最前端,让你看到当前下载的流量情况。现在股票那么火爆,很多人一边工作,一边查看股票,如果错失了机会,又少了很多钱的啊!面对这样的需求,就需要把一些窗口永远摆在最前面,这样起到提示用户的作用。因此,学会使用SetWindowPos函数,就成为能否让软件满足客户需求的关键了。与MoveWindow函数相比,SetWindowPo 阅读全文
posted @ 2007-09-17 20:58 ajuanabc 阅读(220) 评论(0) 推荐(0) 编辑
摘要:当你设计一个对话框的窗口时,就需要布局好所有按钮、文本显示框等等,由于每个按钮都是一个窗口,那么就需要移动这些窗口到合适的位置,这时就需要使用到MoveWindow函数。或者当你的界面需要动态地修改按钮位置,比如窗口放大了,按钮就需要跟着移动,否则按钮还在原来的位置,放大也不会移动按钮的位置,这时也需要使用MoveWindow函数重新设置按钮的位置。只要你想移动窗口,就可以考虑使用这个函数来实现。函数MoveWindow声明如下:WINUSERAPIBOOLWINAPIMoveWindow( __in HWND hWnd, __in int X, __in int Y, __in int nW 阅读全文
posted @ 2007-09-16 12:48 ajuanabc 阅读(213) 评论(0) 推荐(0) 编辑
摘要:在开发软件里,有时候需要改变窗口上标题的文字。比如按钮上的文字,为了适应多国语言的显示,就需要改变它显示的内容。这时就需要使用SetWindowText函数来改它的内容。下面的例子就实现改变按钮的标题。函数SetWindowText声明如下:WINUSERAPIBOOLWINAPISetWindowTextA( __in HWND hWnd, __in_opt LPCSTR lpString);WINUSERAPIBOOLWINAPISetWindowTextW( __in HWND hWnd, __in_opt LPCWSTR lpString);#ifdef UNICODE#define 阅读全文
posted @ 2007-09-14 21:36 ajuanabc 阅读(231) 评论(0) 推荐(0) 编辑
摘要:在软件的开发过程里,大部份时间是在做什么呢?其实是在调试代码,毕竟人类的思维方式是从简单到复杂的过程,自然的认知过程也是从简单到复杂。因此,开发软件时,第一个版本总是先写简单的,然后慢慢地添加出错处理上去,也把一些没有想到的情况添加进去,那些没有想到的错误,就叫做BUG。要根除一个软件里的BUG,是一件不容易的事情,不但要对这个软件流程比较熟悉,还要对这个软件的目标比较了解,还需要对这个开发平台了解,当然还需要不断地测试不同的条件是否出错。软件的条件组合是2的N次方,所以不可能把所有组合都测试完成,只能选择比较重要的进行测试,只要不影响软件的使用,这个软件就算是一款能够挣钱的软件了,不要希望这 阅读全文
posted @ 2007-09-13 21:14 ajuanabc 阅读(165) 评论(0) 推荐(0) 编辑
摘要:当你需要自己显示一个与众不同的按钮时,就需要使用下面的方法来创建。当然这里也是综合地使用前面学习过的知识进行一次综合的练习。演示怎么样使用众多的API函数,这里还可以学会使用GetSysColor函数来获取系统的颜色。WINUSERAPIDWORDWINAPIGetSysColor( __in int nIndex);nIndex是系统定义的颜色索引值。调用这个函数的例子如下:#001//#002//界面显示输出.#003//#004//蔡军生2007/09/12 QQ:9073204 深圳#005//#006void CCaiWinMsg::OnDraw(HDC hDC)#007{ #008 阅读全文
posted @ 2007-09-12 21:25 ajuanabc 阅读(185) 评论(0) 推荐(0) 编辑
摘要:使用前面介绍的CreatePen函数来画大于1的直线时,会发现直线两端全是圆角的,有时候需要画得有角,那么这样的函数就不满足需求了,这时就需要使用另一个API函数ExtCreatePen来创建合适的画笔。ExtCreatePen函数可以创建几何画笔,还可以创建装饰用的画笔,装饰的画笔是用来画一些图案使用的,这样就需要快速的算法来实现,显示比几何的画笔在速度上快很多。比如你在画GPS地图时,当需要装饰使用的图案,就可以这种画笔,会明显地提高显示的速度。函数ExtCreatePen声明如下:WINGDIAPI HPEN WINAPI ExtCreatePen( __in DWORD iPenSty 阅读全文
posted @ 2007-09-10 22:05 ajuanabc 阅读(194) 评论(0) 推荐(0) 编辑
摘要:画画是讲究色彩与线条,不同的地方是采用不同的画笔。上面显示直线,都是采用设备缺省的画笔来画直线。现在就来介绍怎么样创建自己的画笔,比如设置画笔的颜色,画笔的大小。像Windows按钮显示为3D的形状,其实就是用两种颜色画笔分别画相应的线,就生成按钮。而创建画笔就需要使用到CreatePen函数。函数CreatePen声明如下:WINGDIAPI HPEN WINAPI CreatePen( __in int iStyle, __in int cWidth, __in COLORREF color);iStyle是画笔的类型,比如是实线,还是虚线等等。cWidth是线的宽度。color是线的颜色 阅读全文
posted @ 2007-09-09 10:26 ajuanabc 阅读(248) 评论(0) 推荐(0) 编辑
摘要:现在的世界流行图形界面,而不是文字,因此在软件开发里,肯定需要画图的,比如简单地画线,画一些比较特别的图形。比如让你画一个走动的时钟,就需要不断地画秒针、分针等等。MoveToEx是用来移动当前画笔的位置,LineTo是用来画直线的函数,其实在计算机图形里的直线显示是使用光栅图形学里的原理。函数MoveToEx和LineTo声明如下:WINGDIAPI BOOLWINAPI MoveToEx( __in HDC hdc, __in int x, __in int y, __out_opt LPPOINT lppt);hdc是当前设备的句柄。x是X轴的位置,水平方向,一般原点是在屏幕左上角的位置 阅读全文
posted @ 2007-09-08 20:34 ajuanabc 阅读(232) 评论(0) 推荐(0) 编辑
摘要:防火墙是否允许http访问本来以前知道的,今天搞得一下子没想起来,就写这里吧。免得以后又忘记了 阅读全文
posted @ 2007-09-02 11:10 ajuanabc 阅读(129) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示