duilib CDateTimeUI 在Xp下的bug修复

转自:http://my.oschina.net/u/343244/blog/370131

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

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);

                }

             }

       }

}

完整代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

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;

    }

时间: 2024-11-01 00:31:57

duilib CDateTimeUI 在Xp下的bug修复的相关文章

仿酷狗音乐播放器开发日志二十五 duilib右键事件的不足的bug修复

转载请说明原出处,谢谢~~        虽然仿酷狗的各个菜单早就写好了,但是一直没有附加到程序里.今天把菜单和播放列表控件关联时发现了问题.        和播放列表相关的菜单有三个,分别是每个音乐项目控件相关的菜单.分组的菜单.音乐电台的菜单.应该的效果如下:        原本我想着只要给对应的控件设置menu属性,然后在代码里响应消息弹出菜单就可以了.但是实际测试发现,控件根本无法响应到menu消息,原因在于:音乐项目.电台项目这些控件都是靠许多子控件组合而成的,换句话就是他们上面覆盖了

BOOTSTRAP时间控件显示在模态框下面的bug修复_javascript技巧

一针见血:修改 bootstrap-datepicker.js 文件 复制代码 代码如下: var zIndex = parseInt(this.element.parents().filter(function(){      return $(this).css('z-index') !== 'auto';     }).first().css('z-index'))  +10; 将+10改为+99999999; 原因:z-index是设置元素的堆叠顺序,从负到正表示从下到上堆叠,这里使用c

仿酷狗音乐播放器开发日志十九——CTreeNodeUI的bug修复二(附源码)

转载请说明原出处,谢谢        今天本来打算把仿酷狗播放列表的子控件拖动插入功能做一下,但是仔细使用播放列表控件时发现了几个逻辑错误,由于我的播放 列表控件是基于CTreeViewUI和CTreeNodeUI做得,所以产生这几个bug的原因还在于他们两个,在<仿酷狗音乐播放器开发日志十一 --CTreeNodeUI的bug修复>中已经修复过一个动态添加控件的相关bug,这属于第二次修复了.关于第一次bug的修复,后来 Duilib扩展群的 joe 又进行过比我更全面的修复,我现在使用的C

XP下用PE工具箱安装WIN7系统

一.准备工作 1.U盘一个 2.启动U盘制作工具一个 3.Ghost版WIN7系统 4.启动菜单修复工具 注意事项,必须保证电脑至少有两个硬盘分区,分别安装XP和WIN7系统. 二.操作步骤 因为本站前期已经教大家如何安装XP系统,这里假设电脑上已经安装好XP系统,且安装在C盘,接下来教大家如何在XP下安装WIN7系统. 1.使用启动U盘制作工具--通用PE工具箱将U盘制作成启动U盘,将WIN7系统文件和启动菜单修复工具拷贝进U盘; 2.使用U盘启动电脑,进入WINPE界面,双击运行"Ghost

MSWINSCK.OCX 控件在XP下可以 使用,但win7 出现错误

问题描述 MSWINSCK.OCX 控件在XP下可以 使用,但win7 出现错误 20C MSWINSCK.OCX 控件在我做的B/S结构里的充当着发送消息的作用,现在在xp系统下ie浏览器中可以使用,在win7上,注册成功了,但是在win7的ie浏览器上死活不好用,ie设置的activex控件都已经允许了,但是在ie的加载项里并没有加载这个控件,求大神指教?这到底是什么问题? 测试代码如下: classid=""clsid:248DD896-BB45-11CF-9ABC-0080C7

Swoole 1.8.12 发布,Bug修复版本

PHP的异步.并行.高性能网络通信引擎Swoole 已发布 1.8.12 版本.此版本是一个BUG修复版本,修复了多个细节问题.建议所有用户升级至此版本. 主要更新: 修复Swoole\Table在遍历数据时删除元素导致迭代器错误的问题 增加Swoole\Http\Client新选项websocket_mask控制WebSocket客户端启用mask 修复Swoole\Server在BASE模式下无法使用task_ipc_mode=3配置 优化Swoole\Http\Server响应体gzip压

xp下win10双系统安装教程

一想到将在xp下win10进行双系统安装,很多小伙伴就很头疼,xp下win10双系统安装真的那么难吗? 将制作好的U盘启动盘插入电脑笔记本的usb接口,重启电脑并在开机logo出现的瞬间及时按下一键U盘启动快捷键进入启动项选择窗口: 选择U盘启动回车进入快启动主菜单,用键盘上的上下键将光标移至第二项并回车确定,如图所示: 进入win8pe系统后会自启一键装机工具,点击需要安装系统的E盘将其作为xp的系统盘,不要和c盘重复了,点击浏览选中xp系统镜像文件,然后点击"一键装机"即可,如图所

alibaba druid 在springboot start autoconfig 下的bug

alibaba druid 在springboot start autoconfig下的bug 标签(空格分隔):druid springboot start autoconfig 背景 发现.分析过程 总结 背景 最近在使用alibaba druid进行多数据源连接的时候无意中发现一个小bug,已经提交github issue 官方已经fix.issue 地址:https://github.com/alibaba/druid/issues/1796 发现.分析过程 我们使用的java开发框架是

一个 utf-8 网页在 IE6下的BUG

网页 一个 utf-8 网页在 IE6 下的BUG 自己测试的,不一定100%准确,仅供参考. 触发条件:1. title标签里的内容为中文其他双字节字符2. 指定网页编码的 meta 信息在 title 标签的下方,即 <title>中文或其他双字节字符title</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 3. 另存或