文档章节

CDateTimeUI Xp下的bug修复

lssaint
 lssaint
发布于 2015/01/21 13:49
字数 353
阅读 247
收藏 1

CDateTimeUI 的bug修复。修改CDateTimeWnd的HandleMessage方法

if(WM_NOTIFY==uMsg)
{
    ::SetFocus(m_hWnd);
}
if( uMsg == WM_KILLFOCUS /**/)
{
      ::OutputDebugString("WM_KILLFOCUS\n");
      if( uMsg == WM_KILLFOCUS /**/)
       {
            //这里肯可能需要优化,因为FindWindow找出来的窗口不一定是本进程的窗口
            HWND hh=::FindWindow(_T("SysMonthCal32"),NULL);
            if(::IsWindow(hh))
            {
                 MCHITTESTINFO pp;
                 memset(&pp,0,sizeof(pp));
                 //pp.uHit=MCHT_CALENDAR;
                 GetCursorPos(&pp.pt);
                 ::ScreenToClient(hh,&pp.pt);
                 pp.cbSize=sizeof(pp);
                 MonthCal_HitTest(hh,&pp);
                 //下一个月
                 if(pp.uHit==MCHT_TITLEBTNNEXT)
                 {
                     return 1;
                 }
                 //上一个月
                 if(pp.uHit==MCHT_TITLEBTNPREV)
                 {
                     return 1;
                 }
            }else{
                POINT pt;
                ::GetCursorPos(&pt); 
                RECT rt;
                ::GetWindowRect(m_hWnd,&rt);
                if(
                    !(pt.x>=rt.left&&pt.x<=rt.right)||
                    !(pt.x>=rt.top&&pt.x<=rt.bottom)
                 )
                {
                    ::OutputDebugString("CLose\n");
                    lRes= OnKillFocus(uMsg,wParam, lParam,bHandled);
                }
             }
       }
}

完整代码:

LRESULT CDateTimeWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
	{
		LRESULT lRes = 0;
		BOOL bHandled = TRUE;
		/**xpBug***/
		DWORD ProcessId;
		if(WM_SETFOCUS==uMsg)
		{
		    ::OutputDebugString("WM_SETFOCUS\n");
		}
		if(WM_NOTIFY==uMsg)
		{
			::SetFocus(m_hWnd);
		}
		if( uMsg == WM_KILLFOCUS /**/)
		{
			::OutputDebugString("WM_KILLFOCUS\n");
			if( uMsg == WM_KILLFOCUS /**/)
			{
				//这里肯可能需要优化,因为FindWindow找出来的窗口不一定是本进程的窗口
				HWND hh=::FindWindow(_T("SysMonthCal32"),NULL);
				//Isdel=true;
				if(::IsWindow(hh))
				{
					MCHITTESTINFO pp;
					memset(&pp,0,sizeof(pp));
					GetCursorPos(&pp.pt);
					::ScreenToClient(hh,&pp.pt);
					pp.cbSize=sizeof(pp);
					MonthCal_HitTest(hh,&pp);
					//下一个月
					if(pp.uHit==MCHT_TITLEBTNNEXT)
					{
						return 1;
					}
					//上一个月
					if(pp.uHit==MCHT_TITLEBTNPREV)
					{
						return 1;
					}
				}else
				{
					POINT pt;
					::GetCursorPos(&pt); 
					RECT rt;
					::GetWindowRect(m_hWnd,&rt);
					if(
						!(pt.x>=rt.left&&pt.x<=rt.right)||
						!(pt.x>=rt.top&&pt.x<=rt.bottom)
						)
					{
						::OutputDebugString("CLose\n");
						lRes= OnKillFocus(uMsg,wParam, lParam,bHandled);
					}
							
				}
			 }
		}
		else/**/ if (uMsg == WM_KEYUP && (wParam == VK_DELETE || wParam == VK_BACK))
		{
			LRESULT lRes = ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);
			m_pOwner->m_nDTUpdateFlag = DT_DELETE;
			m_pOwner->UpdateText();
			PostMessage(WM_CLOSE);
			return lRes;
		}
		else if (uMsg == WM_KEYUP && wParam == VK_ESCAPE)
		{
			LRESULT lRes = ::DefWindowProc(m_hWnd, uMsg, wParam, lParam);
			m_pOwner->m_nDTUpdateFlag = DT_KEEP;
			PostMessage(WM_CLOSE);
			return lRes;
		}
		else 
			bHandled = FALSE;

		if(!bHandled ) 
		{
			return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
		}
		return lRes;
	}


© 著作权归作者所有

上一篇: CListUI 使用注意
下一篇: 备注
lssaint
粉丝 8
博文 19
码字总数 14315
作品 1
程序员
私信 提问
XP用户注意了 Thunderbird 9.0.1紧急发布

Thunderbird是Mozilla开发的开源跨平台邮件客户端,它的每次发布都基本与Firefox保持一致。上周,Firefox 9.0.1紧急发布,修复了Firefox 9.0正式版中的一个严重Bug。此时,Thunderbird再次体...

红薯
2011/12/27
2.7K
7
KDE 修复了一个 13 年前的 Bug

大约50名KDE开发者在瑞士阿尔卑斯山参加年度编程活动Randa Meetings,他们在此期间终于修复了一个有13年历史的Bug。Kate编辑器维护者Christoph Cullmann在2003年9月递交了这个bug, 问题与K...

oschina
2016/06/21
2.9K
10
Sally 0.8.3 发布,简单的 C++ 开发工具

Sally 0.8.3 发布,此版本修复了在处理字符串方面的 bug;支持新的 libarchive 版本;同时还修复了一些小 bug "Sally - A Simple C++ IDE" 是一个简单的 Windows XP 以及以上版本下运行的 C+...

oschina
2013/12/26
1K
4
QtitanDataGrid 2.10 发布,Qt 表格控件

QtitanDataGrid 2.10 发布,该版本修复了经典模式下 XP 的渲染引擎 bug;修复了多选模式的错误等。 QtitanDataGrid 实现了 QTableView 完整的功能,而且还有自己扩展的功能。...

oschina
2012/09/12
1K
0
比破解百度云还吊的百度云下载器 Pandownload v1.3.5 破解限速及大文件限制!

比破解百度云还吊的百度云下载器 Pandownload v1.3.5 破解限速及大文件限制! 防和谐,低调使用 更新日志: v1.3.5 更新时间: 2017-06-23 更新内容: 1. 优化下载功能 2. 新增远程下载 ------...

jiaozai1800
2017/09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全面剖析 Knative Eventing 0.6 版本新特性

前言 Knative Eventing 0.6 版本已经于5月15号正式发布。相比于0.5版本,此次发布包含了一些重要特性及更新。针对这些新特性以及更新,我们如何快速、精准的定位主要技术点。本篇文章针对这些...

阿里云官方博客
27分钟前
1
0
在闲鱼,我们如何用Dart做高效后端开发?

背景 像阿里其他技术团队以及业界的做法一样,闲鱼的大多数后端应用都是全部使用java来实现的。java易用、丰富的库、结构容易设计的特性决定了它是进行业务开发的最好语言之一。后端应用中数...

阿里云云栖社区
29分钟前
18
1
初学Docker容器网络不得不看的学习笔记

【技术沙龙002期】数据中台:宜信敏捷数据中台建设实践|宜信技术沙龙 将于5月23日晚8点线上直播,点击报名 一、关于Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0...

宜信技术学院
31分钟前
14
0
Django框架配置

今天我们学习Django框架配置,首先先来看一下如何在Django中创建APP! 1.Django中创建APP 首先我们打开PyCharm,找到之前你创建的Django项目,我的项目是First_Project: (1)先选中你要运行...

彩色泡泡糖
33分钟前
1
0
git代码迁移

一、从阿里云code迁移到gitLab 1、在gitLab上新建一个项目Bicon,添加私钥 2、从原地址克隆一份裸版本库 git clone --bare git://xxxx_Bicon.git 这里的地址是阿里云code的地址 3、以镜像推送...

星爵22
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部