duilib-封装win32控件

封装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.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值