java directui_win32 DirectUI控件开发与调用指南

55a62e9185a7c722b743e8ac52b5cce4.png

相较于win32/mfc,directui(win32)更加轻量化,在开发方式上更加现代化,使得其在c++应用方面成为主流,官方中提到了可以开发控件(插件),也就是说新的库可以不写在dui里,而独立出来。研究了许久终于知道如何玩,故此总结一下:

一、创建Dui DLL控件库

使用vc或vs创建一个win32 dll类型的项目,头文件PriceTableUI.h如下:

#pragma once

class DuiLib_API PriceTableUI : public CContainerUI//注意要导出类

{

public:

PriceTableUI();

~PriceTableUI();

LPCTSTR GetClass() const;

LPVOID GetInterface(LPCTSTR pstrName);

void DoEvent(TEventUI& event);

void PaintText(HDC hDC);

};

对应的代码PriceTableUI.cpp如下:

#include "StdAfx.h"

#include "PriceTableUI.h"

PriceTableUI::PriceTableUI()

{

}

PriceTableUI::~PriceTableUI()

{

}

LPCTSTR PriceTableUI::GetClass() const

{

return _T("PriceTableUI");

}

LPVOID PriceTableUI::GetInterface( LPCTSTR pstrName )

{

if( _tcscmp(pstrName, _T("PriceTable")) == 0 )

return static_cast(this);

return CControlUI::GetInterface(pstrName);

}

void PriceTableUI::DoEvent( TEventUI& event )

{

if( event.Type == UIEVENT_SETFOCUS )

{

m_bFocused = true;

return;

}

if( event.Type == UIEVENT_KILLFOCUS )

{

m_bFocused = false;

return;

}

if( event.Type == UIEVENT_MOUSEENTER )//鼠标进入控件

{

return;

}

if( event.Type == UIEVENT_MOUSELEAVE )//鼠标离开控件

{

return;

}

//其它事件(消息)go to 到dui里自己看了

CControlUI::DoEvent(event);

}

void PriceTableUI::PaintText( HDC hDC )

{

RECT rect = m_rcPaint;

HBRUSH redHBrush = CreateSolidBrush(RGB(255,0,0));

FillRect(hDC,&rect,redHBrush);

TextOut(hDC,rect.left,rect.top,"china mobile",strlen("china mobile"));

}

为了简化,这个示例没有对基类函数进一步实现,有需求自行去dui库里复制过来或者自己扩展即可。

二、在主程序中定向自定义控件

ControlEx.h如下:

#pragma once

#include "stdafx.h"

class CDialogBuilderCallbackEx : public IDialogBuilderCallback

{

public:

CControlUI* CreateControl(LPCTSTR pstrClass)

{

if( _tcscmp(pstrClass, "PriceTable") == 0 )

return new PriceTableUI;

return NULL;

}

};

三、调用控件

如此,即可在dui的xml界面文件里使用或在程序中调用,比如:

PriceTableUI* table=static_cast(m_pm.FindControl("table1"));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值