内存对话框模板封装类

完整的封装类在最后面,下面是使用示例:

ContractedBlock.gif ExpandedBlockStart.gif Example

//==========================================================================
//    概述:
//        CDlgUserLogin 管理用户登陆网页的内存模板对话框
//==========================================================================
class CDlgUserLogin : public CDHtmlDialogT< DialogTraitsResizeT< 400 , 240 > >
dot.gif }

完整的封装类文件如下:

ContractedBlock.gif ExpandedBlockStart.gif DlgTemplate.h
//==================================================================================================
//                              基于内存对话框模板的对话框模板
//  --------------------------------------------------------------------------------------------
//  <1> 出现下列情况你可以使用该文件定义的模板:
//      1)  对话框很简单,该对话框上没有任何预设的控件
//      2)  使用对话框仅仅是作为一个模式窗口使用
//      3)  为了使用一个类,但该类只能放在对话框中
//
//  <2> 使用这些模板类需要注意的事情:
//      1)  对话框的标题需要在继承类的适当函数里进行设置
//      2)  网页对话框的标题从网页中获取,即使用网页的 <TITLE></TITLE>
//
//  --------------------------------------------------------------------------------------------
//  上海欣能信息科技发展有限公司        王志科      2008-10-31
//==================================================================================================
#ifndef __SHINE_ENERGY_TECHNOLOGY_GRAPHICS_PLATFORM_SOFTWARE_GROUP_MEMORY_DIALOG_TEMPLATE_DECLARES__
#define __SHINE_ENERGY_TECHNOLOGY_GRAPHICS_PLATFORM_SOFTWARE_GROUP_MEMORY_DIALOG_TEMPLATE_DECLARES__

#pragma once

//==================================================================================================
//  内存对话框模板类的特征定义类,该类作为内存对话框特征的模板参数
template< SHORT Width, SHORT Height, DWORD Style, DWORD ExStyle, SHORT FontSize > struct DialogTraitsT
{
    
enum ETraits{ WIDTH = Width, HEIGHT = Height, STYLE = Style, EX_STYLE = ExStyle, FONT_SIZE = FontSize };
};

//==================================================================================================
//  定义对话框模板的常用风格
CONST DWORD DS_POPUP_DIALOG = WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SETFONT | DS_MODALFRAME ;
CONST DWORD DS_POPUP_RESIZE 
= WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SETFONT | WS_THICKFRAME ;
CONST DWORD DS_CHILD_WINDOW 
= WS_CHILD | WS_VISIBLE | WS_TABSTOP | DS_SETFONT ;

//==================================================================================================
//  定义对话框模板的系统字体和标准大小
CONST WCHAR DLG_FONT_NAME[] = { L"MS Shell Dlg" };
CONST SHORT DLG_FONT_SIZE   
= 8 ;

//==================================================================================================
//  定义对话框模板的常用特征:不可调整大小的对话框,一般作为模态对话框使用
template< SHORT Width = 360 , SHORT Height = 240 , DWORD ExStyle = 0 , SHORT FontSize = DLG_FONT_SIZE >
struct DialogTraitsDefaultT : public DialogTraitsT< Width, Height, DS_POPUP_DIALOG, ExStyle, FontSize >
{

};

//==================================================================================================
//  定义对话框模板的常用特征:可调整大小的对话框
template< SHORT Width = 360 , SHORT Height = 240 , DWORD ExStyle = 0 , SHORT FontSize = DLG_FONT_SIZE >
struct DialogTraitsResizeT : public DialogTraitsT< Width, Height, DS_POPUP_RESIZE, ExStyle, FontSize >
{

};

//==================================================================================================
//  定义对话框模板的常用特征:子窗口,将对话框作为子窗口创建到其他窗口内部
template< SHORT Width = 360 , SHORT Height = 240 , DWORD ExStyle = 0 , SHORT FontSize = DLG_FONT_SIZE >
struct DialogTraitsWindowT : public DialogTraitsT< Width, Height, DS_CHILD_WINDOW, ExStyle, FontSize >
{

};

//==================================================================================================
//  内存对话框模板类,定义无标题内存模板
template< typename DialogTraitsT > class CDialogTemplateT : public DLGTEMPLATE
{
public:
    CDialogTemplateT( )
    {
        cdit 
= x = y = 0;
        wMenu 
= wClass = wTitle = 0;
        wcscpy( szFontName , DLG_FONT_NAME );
        wFontSize 
= DialogTraitsT::FONT_SIZE;
        dwExtendedStyle 
= DialogTraitsT::EX_STYLE;
        style 
= DialogTraitsT::STYLE;
        cy 
= DialogTraitsT::HEIGHT;
        cx 
= DialogTraitsT::WIDTH;
    }

private:
    
// 没有菜单,默认模板窗口类,无标题,系统标准字体
    WORD wMenu, wClass, wTitle, wFontSize;
    WCHAR szFontName[ 
sizeof( DLG_FONT_NAME ) ];
};

//==================================================================================================
//  声明对话框模板函数的宏定义
#define DECLARE_DIALOG_TEMPLATE( DialogTraitsT )                                                \
    
static LPCDLGTEMPLATE GetDialogTemplate( )                                                  \
    {                                                                                           \
        
static CDialogTemplateT< DialogTraitsT > dlgTemplate;                                   \
        
return static_cast< LPCDLGTEMPLATE >& dlgTemplate );                                  \
    }

//==================================================================================================
//  声明非模式对话框的创建函数:可以创建基于内存模板的非模式对话框
#define DECLARE_DIALOG_CREATE_MODELESS( )                                                       \
    
virtual BOOL Create( CWnd* pParentWnd = NULL )                                              \
    {                                                                                           \
        
return CreateIndirect( GetDialogTemplate() , pParentWnd );                              \
    }

//==================================================================================================
//  声明对话框的大小信息处理函数:可以限制对话框的最小尺寸为模板定义尺寸
#define DECLARE_MIN_MAX_INFO_MESSAGE( DialogTraitsT )                                           \
    afx_msg 
void OnGetMinMaxInfo( MINMAXINFO* lpMMI /* != NULL */ )                             \
    {                                                                                           \
        CRect rcTrack( 
0 , 0 , DialogTraitsT::WIDTH , DialogTraitsT::HEIGHT );                  \
        MapDialogRect( rcTrack ); CalcWindowRect( rcTrack );                                    \
        lpMMI
->ptMinTrackSize.y = rcTrack.Height();                                             \
        lpMMI
->ptMinTrackSize.x = rcTrack.Width();                                              \
    }

//==================================================================================================
//  基于内存模板的对话框模板定义
template< typename DialogTraitsT = DialogTraitsDefaultT<> > class CDialogT : public CDialog
{
public:
    typedef CDialogT
< DialogTraitsT > FatherT;
    DECLARE_DIALOG_TEMPLATE( DialogTraitsT );

public:
    CDialogT( CWnd 
*pParentWnd = NULL ) : CDialog( UINT(0) , pParentWnd )
    {
        InitModalIndirect( GetDialogTemplate() , pParentWnd );
    }

public:
    DECLARE_MIN_MAX_INFO_MESSAGE( DialogTraitsT );
    DECLARE_DIALOG_CREATE_MODELESS( );  
    DECLARE_MESSAGE_MAP()
};

BEGIN_TEMPLATE_MESSAGE_MAP( CDialogT , DialogTraitsT , CDialog )
    ON_WM_GETMINMAXINFO( )
END_MESSAGE_MAP()

//==================================================================================================
//  声明网页对话框的构造函数:整形数值资源
#define DECLARE_HTML_DIALOG_CONSTRUCTOR_INT_RES( DialogT , Dialog )                             \
    DialogT( UINT nHtmlResID 
= 0 , CWnd *pParentWnd = NULL )                                    \
        : Dialog( NULL , nHtmlResID , pParentWnd )                                              \
    {                                                                                           \
        InitModalIndirect( GetDialogTemplate( ) , pParentWnd ); 
/*  使用内存模板 */             \
        m_dwHostFlags 
|= DOCHOSTUIFLAG_NO3DOUTERBORDER ; /* 消除浏览器内部的凹框 */             \
        m_dwHostFlags 
|= DOCHOSTUIFLAG_THEME ;        /*  使用系统的桌面主题风格 */             \
        m_bUseHtmlTitle 
= TRUE ;                  /*  使用网页标题作为对话框标题 */             \
    }

//==================================================================================================
//  声明网页对话框的构造函数:字符串资源
#define DECLARE_HTML_DIALOG_CONSTRUCTOR_STR_RES( DialogT , Dialog )                             \
    DialogT( LPCTSTR szHtmlResID , CWnd 
*pParentWnd = NULL )                                    \
        : Dialog( NULL , szHtmlResID , pParentWnd )                                             \
    {                                                                                           \
        InitModalIndirect( GetDialogTemplate( ) , pParentWnd ); 
/*  使用内存模板 */             \
        m_dwHostFlags 
|= DOCHOSTUIFLAG_NO3DOUTERBORDER ; /* 消除浏览器内部的凹框 */             \
        m_dwHostFlags 
|= DOCHOSTUIFLAG_THEME ;        /*  使用系统的桌面主题风格 */             \
        m_bUseHtmlTitle 
= TRUE ;                  /*  使用网页标题作为对话框标题 */             \
    }

//==================================================================================================
//  声明网页对话框的构造函数:整形数值和字符串资源
#define DECLARE_HTML_DIALOG_CONSTRUCTOR( DialogT , Dialog )                                     \
    DECLARE_HTML_DIALOG_CONSTRUCTOR_INT_RES( DialogT , Dialog )                                 \
    DECLARE_HTML_DIALOG_CONSTRUCTOR_STR_RES( DialogT , Dialog )

//==================================================================================================
//  声明网页对话框可以使用外部接口并且该接口安全
#define DECLARE_EXTERNAL_DISPATCH_CAN_ACCESS_AND_SAFE( )                                        \
    
virtual BOOL IsExternalDispatchSafe( ) { return TRUE; }                                     \
    
virtual BOOL CanAccessExternal( ){ return TRUE; }

//==================================================================================================
//  基于内存模板的动态网页对话框模板定义:单页面网页对话框
template< typename DialogTraitsT = DialogTraitsResizeT< > > class CDHtmlDialogT : public CDHtmlDialog
{
public:
    typedef CDHtmlDialogT
< DialogTraitsT > FatherT;
    DECLARE_DIALOG_TEMPLATE( DialogTraitsT );

public:
    
//  声明构造函数并保证使用外部控件时不提示安全控制消息
    DECLARE_HTML_DIALOG_CONSTRUCTOR( CDHtmlDialogT , CDHtmlDialog );
    DECLARE_EXTERNAL_DISPATCH_CAN_ACCESS_AND_SAFE( );

public:
    DECLARE_MIN_MAX_INFO_MESSAGE( DialogTraitsT );
    DECLARE_DIALOG_CREATE_MODELESS( );  
    DECLARE_MESSAGE_MAP( )
};

BEGIN_TEMPLATE_MESSAGE_MAP( CDHtmlDialogT , DialogTraitsT , CDHtmlDialog )
    ON_WM_GETMINMAXINFO( )
END_MESSAGE_MAP()

//==================================================================================================
//  基于内存模板的动态网页对话框模板定义:单页面网页对话框
template< typename DialogTraitsT = DialogTraitsResizeT< 480 , 360 > > 
class CMultiPageDHtmlDialogT : public CMultiPageDHtmlDialog
{
public:
    typedef CMultiPageDHtmlDialogT
< DialogTraitsT > FatherT;
    DECLARE_DIALOG_TEMPLATE( DialogTraitsT );

public:
    
//  声明构造函数并保证使用外部控件时不提示安全控制消息
    DECLARE_HTML_DIALOG_CONSTRUCTOR( CMultiPageDHtmlDialogT , CMultiPageDHtmlDialog );
    DECLARE_EXTERNAL_DISPATCH_CAN_ACCESS_AND_SAFE( );

public:
    DECLARE_MIN_MAX_INFO_MESSAGE( DialogTraitsT );
    DECLARE_DIALOG_CREATE_MODELESS( );  
    DECLARE_MESSAGE_MAP( )
};

BEGIN_TEMPLATE_MESSAGE_MAP( CMultiPageDHtmlDialogT , DialogTraitsT , CMultiPageDHtmlDialog )
    ON_WM_GETMINMAXINFO( )
END_MESSAGE_MAP()

#endif//__SHINE_ENERGY_TECHNOLOGY_GRAPHICS_PLATFORM_SOFTWARE_GROUP_MEMORY_DIALOG_TEMPLATE_DECLARES__

转载于:https://www.cnblogs.com/WonKerr/archive/2009/04/13/DlgTemplate.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值