编程心得
ringphone
这个作者很懒,什么都没留下…
展开
-
线程的封装技巧:把任意类的成员函数指针作为参数
线程的封装很简单,并没有多少东西,但是如果我告诉你,我封装的这个线程类里有个成员函数Start,作用是开启线程运行,可以这样调用:class a{public: DWORD ThreadFunca(LONG lParam); void StartThread(); CMyThread m_thread;}DWORD a::ThreadFunca(LONG lParam){ //线程执行代码原创 2004-10-18 13:48:00 · 8228 阅读 · 5 评论 -
RingSDK技术文档:如何实现ListView列的隐藏
想实现ListView在详细资料视图下列的隐藏,网上搜了一下实现方法,发现不外乎两种方法,一种是删除列,这是真正的隐藏,但是得记录删除的每一个单元格的内容,以备该列再次需要显示时把内容回填。相当于把ListView原来记录的东西自己保存了,隐藏的列越多,要记录的东西越多。而如果用户要修改已隐藏的单元格的内容,这就麻烦了。因为既然说“隐藏”,你就得允许修改已隐藏的内容,而实际上删除了,就得自己提供修原创 2008-11-20 10:02:00 · 3480 阅读 · 5 评论 -
奇怪的问题,InvalidateRect最后一个参数在XP下无效
一直用的WIN2K系统,写的一个程序在本机正常,到XP系统的机器运行发现调整窗口大小时界面闪得厉害,程序比较大,而且这种闪烁还不好调试,因为单步调试没有闪烁效果,只能排除法找原因,最后以为找到原因了,就写了一个测试程序,就是用VC6向导自动生成API的Hello World程序,然后修改一下其WM_PAINT代码:case WM_PAINT: hdc = Be原创 2008-09-02 14:43:00 · 2864 阅读 · 1 评论 -
解决Windows 程序界面闪烁问题的一些经验
原帖地址:http://blog.joycode.com/yaodong/archive/2004/11/26/39764.aspx一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段转载 2008-01-14 02:02:00 · 3706 阅读 · 2 评论 -
不用双缓冲实现无闪烁图象
首先说一下产生闪烁的原因,当窗口由于任何原因需要重绘时,总是先用背景色或背景图象将显示区清除,然后才显示图象,这样在短时间内背景色与显示图形交替出现,使得显示窗口看起来在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了,但是会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制的图形进行清除,而又叠加上了新的图形。一般的解决方法就是采用双缓冲,创建一幅内存图象,把背景和图片先绘原创 2007-12-03 16:43:00 · 6272 阅读 · 3 评论 -
API编程:给对话框加上背景图案
给对话框加上背景图案应该怎么做?Load一个BITMAP进来,WM_PAINT消息里面横向和竖向两个循环,BitBlt图案铺满整个对话框?其实有一个很简单的方法,初始化对话框的时候创建一个画刷:HBITMAP bmp = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP));static HBRUSH brush = CreatePatternB原创 2007-02-08 00:11:00 · 5904 阅读 · 7 评论 -
VC调用存储过程的通用方法(ORACLE篇)
先对上一篇调用SQLServer的存储过程作一点补充,就是如果存储过程里有Insert,update,delete等操作,最后返回结果集,按示例代码有可能得不到数据,因为返回的数据有可能不在第一个结果集,需要进行遍历:long lngRec = 0;_RecordsetPtr Rs = m_Rs; //m_Rs为调用存储过程返回的结果集while(Rs){ //结果集的处理,有无数据的原创 2006-06-27 10:43:00 · 4089 阅读 · 1 评论 -
VC调用存储过程的通用方法(SQLServer篇)
这里讨论的是ADO调用存储过程,按MSDN的例子,一般都是下面的调用方法(节选自MSDN):HRESULT hr = S_OK; // Define ADO object pointers. // Initialize pointers on define. // These are in the ADODB:: namespace. _RecordsetPtr pR原创 2006-06-21 02:15:00 · 9328 阅读 · 2 评论 -
静态库中应慎用静态类成员
有各种各样的原因会用到类静态成员,一般是共享数据,但编写静态库的时候应慎重考虑,因为用在应用程序中没什么问题,但用在DLL中,可能灾难就开始了,看以下一个例子:静态库中有一个名为TestSQL的数据库操作类,有一个静态成员m_count记录对某一数据库的访问记数,每有一次数据库操作就将该值加一。当然在静态库里会把这个值初始化为0:int TestSQL::m_count = 0;为了应付多线程操作原创 2005-08-20 01:59:00 · 2831 阅读 · 2 评论 -
关于WM_NOTIFY消息接收窗口的问题
WM_NOTIFY是控件发送给其父窗口的通知消息,一直没想过控件的父窗口变动的问题,直到想自己实现类似VC的停靠工具栏时才碰到这个问题。工具栏停靠时其父窗口是程序主窗口,当把工具栏拖出来,即拖出主窗口或是拖到客户区,必须创建一个POPUP窗口,工具栏的父窗口变为这个POPUP窗口。按照MSDN的说明,WM_NOTIFY是发送到父窗口,应该发送到这个POPUP窗口才对,结果POPUP窗口却截不到这个原创 2005-03-26 23:56:00 · 2868 阅读 · 2 评论 -
本机运行正常的ADO程序在别的机器上无法运行的问题
CSDN论坛上经常看到在本机编译运行正常的使用了ADO的程序放到别的机器上就不能运行了,我原来也碰到过这样的问题,后来发现是ADO引擎版本的问题,安装了VC的机器一般其数据库引擎版本都比较高,到低版本的系统就出问题了,解决方法就是把MDAC连同你的程序一起安装到目标机器,但是有没有更好的解决方法呢?答案是有的,就是改动一下你的源代码,一般调用ADO的程序代码里都会有这样一句:#import "c:原创 2005-08-02 15:01:00 · 4921 阅读 · 3 评论 -
ADO连接用户级加密的ACCESS数据库
最近做个项目需要连接到一个第3方软件用到的MDB数据库,该MDB文件是用户级加密,虽然合作方给了用户名,说没有密码,但是却无法用ADO进行查询,报没有权限。用ACCESS打开也是一样,无法看到表里的数据。于是到网上去搜,结果只搜到如何用ACCESS对MDB进行加密和打开加密文件,这个跟编程无关,就没细看。关于ADO连接加密MDB,却只有如何连接设置了密码的MDB,都是以默认的管理员登录,没有如何原创 2009-11-29 01:31:00 · 4594 阅读 · 3 评论