2014年3月25日
摘要: 做项目的时候,需要在程序处于非激活状态,做一些清理工作,而判断非激活状态是根据 WM_ACTIVATEAPP 进行的。测试的时候发现,当在任务栏点击图标使应用最小化时,应用仍然处于激活状态,使用Spy++,查看消息记录,发现消息按照如下的顺序发送:WM_ACTIVATEAPPwParam(false)WM_SYSCOMMANDwParam(SC_MINIMIZE)WM_ACTIVATEAPPwParam(true)可以看出,程序先从激活状态变成了非激活状态,然后又变成了激活状态,不知道是不是windows的一个bug,解决方法很简单:在WM_SYSCOMMAND消息中,给程序发送 WM_ACT 阅读全文
posted @ 2014-03-25 18:51 sanlo 阅读(661) 评论(0) 推荐(0) 编辑
  2014年1月4日
摘要: 获取桌面的坐标1//获取桌面x坐标,可以为负值2intxScreen=::GetSystemMetrics(SM_XVIRTUALSCREEN);3//获取桌面y坐标,可以为负值4intyScreen=::GetSystemMetrics(SM_YVIRTUALSCREEN);5//获取桌面总宽度6intcxScreen=::GetSystemMetrics(SM_CXVIRTUALSCREEN);7// 获取桌面总高度8intcyScreen=::GetSystemMetrics(SM_CYVIRTUALSCREEN);获取窗口句柄所在屏幕的位置当处理窗口居中显示时,我们需要获取窗口所在屏幕 阅读全文
posted @ 2014-01-04 19:27 sanlo 阅读(1617) 评论(0) 推荐(0) 编辑
  2013年12月30日
摘要: 转自:http://blog.csdn.net/debehe/article/details/4294053奇怪的问题,想了很多可能的理由,最终的答案竟然是一开始就被我否认了的一种可能!!问题现象:调用Shell_NotifyIcon,在Vista和Windows 7上可以正常显示托盘的Balloon ToolTips,但在XP下却不行,而且函数返回值和GetLastError都正常。问题的原因:1、有问题的系统版本声明:1//是具有运行应用程序所需功能的Windows、InternetExplorer等产品的2//最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以3//正常 阅读全文
posted @ 2013-12-30 19:05 sanlo 阅读(450) 评论(0) 推荐(0) 编辑
  2013年12月16日
摘要: 界面显示前,总是会显示白色或白加黑的窗体,开始以为是图片加载慢的原因,后来发现这个框是在第一次WM_PAINT执行前显示的。解决办法很简单,在CreateWindow的时候,加上WS_POPUP样式就好了。至于为什么这样,我也不知道! 阅读全文
posted @ 2013-12-16 17:33 sanlo 阅读(366) 评论(0) 推荐(0) 编辑
  2013年6月27日
摘要: 转自:http://www.cnpaf.net/Class/RFC/200408/983.html摘要本文档定义了在WWW浏览器的URL中执行的文本IPv6地址的格式。在包括Microsoft的IE,Mozilla和Lynx等几个已经被广泛安装使用的浏览器的IPv6版本中,这种格式已经被使用。并且这种格式也将被应用于服务定位协议的IPv6版本中。本文档包括了一个对在RFC2396[URL]被定义的统一资源标识符中的一般性语法的更新。为了这个预定目标,本文档明确定义了IPv6地址的语法规则并允许在统一资源标识符中使用“[”和“]”符号。目录1.介绍1.1要求2.URL语法中的IPv6地址文本格式 阅读全文
posted @ 2013-06-27 18:59 sanlo 阅读(50229) 评论(0) 推荐(0) 编辑
  2013年6月6日
摘要: 最近看了一点模板元编程的东西,忽然灵光一闪,便想出了一个方法来判断一个类是否是另一个类的基类is_base_of。稍加改变也可以实现类似于java的instanceof虽然平时写程序很少会需要这两个东西,不过万一用到呢预备知识:1. 如果将一个T类型临时对象传递给一个函数,那么这个函数接受的参数类型必须是:const T& 或 T2. 函数模板匹配的原则:见http://www.cnblogs.com/hdtianfu/archive/2011/09/05/2167973.html利用上述两点,可以制作出下面这个模板函数 is_supe_of<T1, T2>()注意:这个函 阅读全文
posted @ 2013-06-06 17:05 sanlo 阅读(3046) 评论(0) 推荐(1) 编辑
  2013年5月31日
摘要: 下面讨论的都是阻塞模式下的socketbindconnectlisten和acceptsend和recvclosesocketbindint bind(int sockfd, const struct sockaddr *myaddr, int addrLen);bind将本地的一个ip和端口号赋给了一个socket,此时这个socket就具有了此ip和端口号的所有权,其他socket不能再次绑定。 此后,当此ip和端口号上有数据到来时,我们便可以调用recv来获取数据了。 bind指定了TCP通信的本地地址connectint connect(int sockfd, const stru.. 阅读全文
posted @ 2013-05-31 17:55 sanlo 阅读(1754) 评论(0) 推荐(0) 编辑
  2013年5月30日
摘要: Cookie相关的Http头Set-Cookie Header在程序中生成expireCookie相关的Http头 有 两个Http头部和Cookie有关:Set-Cookie和Cookie。 Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie Co... 阅读全文
posted @ 2013-05-30 15:24 sanlo 阅读(46111) 评论(0) 推荐(0) 编辑
  2013年5月10日
摘要: 如题,我也不知道为什么,测试代码:1usingnamespaceGdiplus;23wstringstrLine=L"1个你好啊2个你好啊3个你好啊4个你好啊5个你好啊6个你好啊7个你好啊8个你好啊";4constintwordCount=strLine.size();56CPaintDCpaintDc(this);7Graphicsg(paintDc.GetSafeHdc());8Gdiplus::Fontmyfont(L"宋体",16,Gdiplus::FontStyleBold);910constintregion_count=wordCount+ 阅读全文
posted @ 2013-05-10 17:11 sanlo 阅读(1923) 评论(0) 推荐(0) 编辑
摘要: 注:如果包含 后出现编译错误,那么看看stdafx.h中有没有定义WIN32_LEAN_AND_MEAN,有的话注释掉就OK1. 需要链接gdiplus.lib2.使用GDI+需要进行初始化,否则运行时会出现问题。为了方便使用,我将初始化代码和释放代码放到一个类中,使用时只需要定义这个类的一个global实例就可以了1classGdiPlusIniter{2public:3GdiPlusIniter(){4Gdiplus::GdiplusStartupInputStartupInput;5GdiplusStartup(&m_gdiplusToken,&StartupInput, 阅读全文
posted @ 2013-05-10 16:51 sanlo 阅读(3297) 评论(0) 推荐(0) 编辑