duilib-封装win32控件

来源:互联网 发布:点评管家淘宝店铺 编辑:程序博客网 时间:2024/05/06 17:09

封装win32控件在duilib中使用,我这里因为项目中用到了时间控件,duilib中没有,但是win32中有DateTimePicker控件。

思路:就是创建一个duilib控件来容纳win32控件。

1.和网上的资料一样,我们创建一个duilib控件

#pragma once#include "resource.h"#include "stdafx.h"class CWndUI : public CControlUI{public:    CWndUI(void){ m_hWnd = NULL; };    ~CWndUI(void){};    virtual void SetInternVisible(bool bVisible = true)    {        __super::SetInternVisible(bVisible);        ::ShowWindow(m_hWnd, bVisible);    }    virtual void SetPos(RECT rc)    {        __super::SetPos(rc);        ::SetWindowPos(m_hWnd, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER | SWP_NOACTIVATE);    }    BOOL Attach(HWND hWndNew)    {        if (!::IsWindow(hWndNew))        {            return FALSE;        }        m_hWnd = hWndNew;        return TRUE;    }    HWND Detach()    {        HWND hWnd = m_hWnd;        m_hWnd = NULL;        return hWnd;    }protected:    HWND m_hWnd;};

这里能得到控件的句柄。

2.像自定义控件一样,我们在窗口类中需要继承重写CreateControl(LPCTSTR pstrClass);函数

CControlUI* CClockDlg::CreateControl(LPCTSTR pstrClass){    if (_tcsicmp(pstrClass, _T("Wnd")) == 0)    {        CWndUI *pUI = new CWndUI();         m_TimeHwnd = CreateWindow(_T("SysDateTimePick32"), _T(""), WS_VISIBLE | WS_CHILD | DTS_TIMEFORMAT, 265, 90, 120, 28, m_pm.GetPaintWindow(), NULL, NULL, NULL);         pUI->Attach(m_TimeHwnd);    }    return NULL;}

xml:

<Wnd />
    m_TimeHwnd是我写的类中的变量,因为我要得到时间控件的句柄。win32中日期时间的控件类型是SysDateTimePick32,这个一定要弄清楚,不然无法显示控件。另外是这个控件默认是显示日期的,我们需要显示时间,这里我们CreateWindow的时候就要添加DTS_TIMEFORMAT属性。还有一个是网上使用MFC控件在xml中留下位置和大小信息,我发现在win32中没有用,所以设置位置和大小我就写在了CreateWindow里。(真坑爹)

经过上两步应该win32的时间控件就能显示了

这里写图片描述

3.就是要得到我们的时间了

SYSTEMTIME sysTime;            ::SendMessage(m_TimeHwnd, MCM_GETCURSEL, NULL, (LPARAM)&sysTime);            CDuiString str;            str.Format(L"%d小时%d分钟%d秒", sysTime.wHour, sysTime.wMinute, sysTime.wSecond);            MessageBox(NULL, str, L"sss", NULL);

这里写图片描述

说明:需要说明一点是我这里窗口类是继承的public WindowImplBase,如果是继承public CWindowWnd, public INotifyUI,显示不出来,就需要在Create函数里添加上自身的this指针。

有什么问题给我留言或者联系我:809505138.

阅读全文
0 0
原创粉丝点击