技术标签: mfc
MFC中使用duilib
flyfish
MFC为框架,以duilib美化界面
MFC窗口是父窗口,duilib窗口作为其子窗口
DuiLib_Dialog头文件
#pragma once
class DuiLib_Dialog:public CWindowWnd, INotifyUI
{
public:
DuiLib_Dialog(void);
~DuiLib_Dialog(void);
public:
LPCTSTR GetWindowClassName() const;
void Notify(TNotifyUI& msg);
LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
private:
CPaintManagerUI m_pm;
};
DuiLib_Dialog实现文件
#include "StdAfx.h"
#include "DuiLib_Dialog.h"
DuiLib_Dialog::DuiLib_Dialog(void)
{
}
DuiLib_Dialog::~DuiLib_Dialog(void)
{
}
LPCTSTR DuiLib_Dialog::GetWindowClassName() const
{
return L"test";
}
void DuiLib_Dialog::Notify(TNotifyUI& msg)
{
if( msg.sType == _T("click") )
{
if( msg.pSender->GetName() == _T("closebtn") )
{
ShowWindow(false);
}
}
}
LRESULT DuiLib_Dialog::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if( uMsg == WM_CREATE )
{
CPaintManagerUI::SetInstance(AfxGetInstanceHandle());
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin"));
m_pm.Init(m_hWnd);
CDialogBuilder builder;
CControlUI *pRoot = builder.Create(_T("ui.xml"), (UINT)0, NULL, &m_pm); //加载的XML文件的名称
ASSERT(pRoot && "Failed to parse XML");
m_pm.AttachDialog(pRoot);
m_pm.AddNotifier(this);
return 0;
}
else if( uMsg == WM_DESTROY )
{
::PostQuitMessage(0);
}
LRESULT lRes = 0;
if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes;
return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
}
MFC的窗口头文件部分代码
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DuiLib_Dialog m_dlgDuilib;
void InitChildDialog();
MFC窗口的实现文件部分代码
void CMFCApplicationTestDlg::InitChildDialog()
{
if (m_dlgDuilib == NULL)
{
m_dlgDuilib.Create(this->m_hWnd, NULL, UI_WNDSTYLE_CHILD & (~(WS_BORDER | WS_CAPTION)), 0, 0, 0, 800, 600);
}
m_dlgDuilib.ShowWindow(TRUE);
}
int CMFCApplicationTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
InitChildDialog();
return 0;
} 对于MFC 控件的使用,在系统函数BOOL CHRMDlg::PreTranslateMessage(MSG* pMsg)中添加控件功能,通过获取鼠标点坐标,然后判断是否在控件上,进而实现控件的逻辑功能; 关闭对话框: CDialog::OnCancel(); GetDlgItem(IDC_EDIT_USER)->SetFocus(); (大致是用来设置焦点,但是具体用在什么地...
1.先建立MFC应用程序,然后在资源管理器中新建一对话框,并为它建立对应的类 2.类向导创建新mfc类 基类为CPropertySheet。 2.接着分别为创建两个对话框,建立两个与之对应的类时,注意选择基类为CPropertyPage。假设新生成两个类为CPage1,CPage2。 3.在主dlg 里添加头文件page1 page2 和创建的类.h 添加变量 public: CProSheet ...
1.加入CWebBrowser控件,建立关联变量 2.头文件包含 3.获取网页源码:...
使用CHtmlView时的问题 参考:https://blog.csdn.net/xiaolongwang2010/article/details/11100923 https://blog.csdn.net/xuepiaofei1/article/details/46930789 这段代码在OnInitDialog()里写的。 在基于Dialog的程序中,没有任何问题。 但是在基于单文档(SDI...
【转】在MFC中使用Tab Control 转自:http://hi.baidu.com/blue_never_died/blog/item/04398694249ef71ed21b7007.html 说实话,我刚开始看见Tab Control的时候,觉得很简单。哪知道用了一下,才发现自己错了。 要用好它,还是需要一些技巧的。经过网上搜索资料,以及我自己的摸索,把一些要点记录在这里。 Tab Co...
制作一个客户端,选择duilib+cef+mfc为客户端界面。父窗口为一个对话框,子窗口为duilib的窗口(Mainframe)。当主界面把mfc的对话框盖住时,发现窗口移动不了(无标题窗口)。为了移动主窗口,记录的解决方法: 第一个解决方法(失败) 这段代码实现了点击窗口任意位置,窗口移动的目的,但是窗口的所有消息都被丢弃了(return 0)。不能采用这个方法。需要监控鼠标移动+鼠标点击的事...
1 XML 资源文件 添加CEF控件 <CefControl name="cef_student" visible="true"/> 2 重载 CreateControl create 重载create 因为使用的云信du...
方便每一个TabLayout的界面都可以用一个类去处理;避免将所有的消息写到同一个主窗口类中;方便维护; 主窗口代码: 构造函数中添加 xml配置 类中添加消息处理类的成员变量 消息处理类的声明与定义 .h文件 .cpp文件CPatManagePage::CPatManagePage(){}CPatManagePage::~CPatManagePage(){}void CPatMana...
前言 duiilib是通过加载配置的xml文件渲染显示的界面,xml文件在duilib中扮演着类似衣服的角色,所有关于外表界面的各种属性全在xml文件配置,这篇文章介绍一下duilib的颜色配置。 8位16进制值表示颜色 简单示例 下面是摘自一个简单示例的一段duilib的xml,表示的是一个水平布局,包含四个元素(两个label,两个button)。 注意两个label的属性列表中有一个表示颜色...
在我们的程序中不再继承CWindowWnd和INotifyUI这两个类,而是直接继承WindowImplBase,重写父类的GetWindowClassName、GetClassStyle、GetSkinFile、Notify四个函数即可。 WindowImplBase类 //stdafx.h中引用duilib头文件 //调用实例...