win32 DirectUI控件开发与调用指南

  相较于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<PriceTableUI*>(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界面文件里使用<PriceTable />或在程序中调用,比如:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用C++代码封装的win32操作类, 与MFC相似,对于学习SDK与C++是巨好的参考 Tutorials Menu of tutorials Tutorial 1: The Simplest Window Tutorial 2: Using Classes and Inheritance Tutorial 3: Using Messages to Create a Scribble Window Tutorial 4: Repainting the Window Tutorial 5: Wrapping a Frame around our Scribble Window Tutorial 6: Customising Window Creation Tutorial 7: Customising the Toolbar Tutorial 8: Loading and Saving Files Tutorial 9: Printing Tutorial 10: Finishing Touches Tutorial 1: The Simplest Window The following code uses Win32++ to create a window. This is all the code you need (in combination with Win32++) to create and display a simple window. Note that in order to add the Win32++ code to our program, we use an #include statement as shown below. #include "../Win32++/Wincore.h" INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { //Start Win32++ CWinApp MyApp; //Create a CWnd object CWnd MyWindow; //Create (and display) the window MyWindow.Create(); //Run the application return MyApp.Run(); } This program has four key steps: Start Win32++. We do this here by creating a CWinApp object called MyApp. Create a CWnd object called MyWindow. Create a default window by calling the Create function. Start the message loop, by calling the Run function. If you compile and run this program, you'll find that the application doesn't end when the window is closed. This is behaviour is normal. An illustration of how to use messages to control the windows behaviour (including closing the application) will be left until tutorial 3.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值