惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
P
Palo Alto Networks Blog
P
Proofpoint News Feed
AI
AI
Help Net Security
Help Net Security
S
Securelist
T
Troy Hunt's Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
Vercel News
Vercel News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
S
Security Affairs
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
T
Tenable Blog
H
Help Net Security
NISL@THU
NISL@THU
F
Fortinet All Blogs
博客园_首页
G
GRAHAM CLULEY
L
LINUX DO - 最新话题
P
Privacy International News Feed
G
Google Developers Blog
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
The Register - Security
The Register - Security
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
量子位
C
Cyber Attacks, Cyber Crime and Cyber Security
Forbes - Security
Forbes - Security
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
D
Docker
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
L
Lohrmann on Cybersecurity
T
Tailwind CSS Blog

博客园 - chuncn

Eslint 规则说明 磁盘阵列RAID原理、种类及性能优缺点对比 asp.net中调用命令行 JavaScript中的CSS属性对照表 webRTC-实时流媒体的福音 qt 5.1 quick vs qt 4.x quick for control zeroc ice的概念、组成与服务 国内外期货、外汇、股指期货 交易时间 使用Visual Leak Detector for Visual C++ 捕捉内存泄露 window8 metro 之 RSA sqlite in qt Windows环境下使用Boost Qt 表格&列表数据驱动化(c++) 原创 Qt读写INI配置文件 Qt多国语言的实现与切换(国际化) Qt编码风格 -- 转 win32里玩事件-转 c++中捕捉内存泄露、异常 win32 http download
win32 DirectUI控件开发与调用指南
chuncn · 2012-03-23 · via 博客园 - chuncn

  相较于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"));