青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Error

C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
最近被安排UI工作有點(diǎn)多,公司的控件用不順手,也有用DUILIB的,但是問(wèn)了公司的幾個(gè)人說(shuō)和MFC一起用的時(shí)候有這樣那樣的問(wèn)題。
今天手癢實(shí)驗(yàn)了下直接在CDLG里邊用DUILIB(我不想直接用duilib了事,后期可能會(huì)做做大改動(dòng),所以沒(méi)有直接在duilib::CWindowWnd里邊想辦法)
發(fā)現(xiàn)唯一需要注意的就是需要在OnPaint中屏蔽CDialog的paint,,,duilib還是很牛逼的
同樣,把duilib整合成MFC的“插件”之后,那個(gè)CWindowWnd::Close會(huì)自動(dòng)delete this的故障也沒(méi)了,額,應(yīng)該說(shuō)是特性,不是故障,,,不過(guò)這個(gè)特性給我?guī)?lái)的麻煩比較多,,,
 

// dui_mfcDlg.h : header file
//

#pragma once



// Cdui_mfcDlg dialog
class Cdui_mfcDlg : public CDialog
    , 
public DuiLib::INotifyUI, public DuiLib::IMessageFilterUI
{
// Construction
public:
    Cdui_mfcDlg(CWnd
* pParent = NULL);    // standard constructor

// Dialog Data
    enum { IDD = IDD_DUI_MFC_DIALOG };

    
protected:
    
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;

    
// Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg 
void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg 
void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()

private:
    
bool OnHChanged(void* param) {
        DuiLib::TNotifyUI
* pMsg = (DuiLib::TNotifyUI*)param;
        
if( pMsg->sType == _T("valuechanged") ) {
            
short H, S, L;
            DuiLib::CPaintManagerUI::GetHSL(
&H, &S, &L);
            DuiLib::CPaintManagerUI::SetHSL(
true, (static_cast<DuiLib::CSliderUI*>(pMsg->pSender))->GetValue(), S, L);
        }

        
return true;
    }


    
bool OnSChanged(void* param) {
        DuiLib::TNotifyUI
* pMsg = (DuiLib::TNotifyUI*)param;
        
if( pMsg->sType == _T("valuechanged") ) {
            
short H, S, L;
            DuiLib::CPaintManagerUI::GetHSL(
&H, &S, &L);
            DuiLib::CPaintManagerUI::SetHSL(
true, H, (static_cast<DuiLib::CSliderUI*>(pMsg->pSender))->GetValue(), L);
        }

        
return true;
    }


    
bool OnLChanged(void* param) {
        DuiLib::TNotifyUI
* pMsg = (DuiLib::TNotifyUI*)param;
        
if( pMsg->sType == _T("valuechanged") ) {
            
short H, S, L;
            DuiLib::CPaintManagerUI::GetHSL(
&H, &S, &L);
            DuiLib::CPaintManagerUI::SetHSL(
true, H, S, (static_cast<DuiLib::CSliderUI*>(pMsg->pSender))->GetValue());
        }

        
return true;
    }


    
bool OnAlphaChanged(void* param) {
        DuiLib::TNotifyUI
* pMsg = (DuiLib::TNotifyUI*)param;
        
if( pMsg->sType == _T("valuechanged") ) {
            m_pm.SetTransparent((static_cast
<DuiLib::CSliderUI*>(pMsg->pSender))->GetValue());
        }

        
return true;
    }


    
void OnPrepare() 
    
{
        DuiLib::CSliderUI
* pSilder = static_cast<DuiLib::CSliderUI*>(m_pm.FindControl(_T("alpha_controlor")));
        
if( pSilder ) pSilder->OnNotify += MakeDelegate(this&Cdui_mfcDlg::OnAlphaChanged);
        pSilder 
= static_cast<DuiLib::CSliderUI*>(m_pm.FindControl(_T("h_controlor")));
        
if( pSilder ) pSilder->OnNotify += MakeDelegate(this&Cdui_mfcDlg::OnHChanged);
        pSilder 
= static_cast<DuiLib::CSliderUI*>(m_pm.FindControl(_T("s_controlor")));
        
if( pSilder ) pSilder->OnNotify += MakeDelegate(this&Cdui_mfcDlg::OnSChanged);
        pSilder 
= static_cast<DuiLib::CSliderUI*>(m_pm.FindControl(_T("l_controlor")));
        
if( pSilder ) pSilder->OnNotify += MakeDelegate(this&Cdui_mfcDlg::OnLChanged);
    }


private:
    DuiLib::CPaintManagerUI m_pm;

    
// INotifyUI
public:
    
virtual void Notify(DuiLib::TNotifyUI& msg);

    
// IMessageFilterUI 
public:
    
virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
    
virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg 
int OnCreate(LPCREATESTRUCT lpCreateStruct);
}
;



// dui_mfcDlg.cpp : implementation file
//

#include "stdafx.h"
#include "dui_mfc.h"
#include "dui_mfcDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();

// Dialog Data
 enum { IDD = IDD_ABOUTBOX };

 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// Cdui_mfcDlg dialog

 


Cdui_mfcDlg::Cdui_mfcDlg(CWnd* pParent /*=NULL*/)
 : CDialog(Cdui_mfcDlg::IDD, pParent)
{
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void Cdui_mfcDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(Cdui_mfcDlg, CDialog)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 //}}AFX_MSG_MAP
    ON_WM_CREATE()
END_MESSAGE_MAP()


// Cdui_mfcDlg message handlers

BOOL Cdui_mfcDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add "About..." menu item to system menu.

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  BOOL bNameValid;
  CString strAboutMenu;
  bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  ASSERT(bNameValid);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon

 // TODO: Add extra initialization here

 return TRUE;  // return TRUE  unless you set the focus to a control
}

void Cdui_mfcDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void Cdui_mfcDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;

  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  //CDialog::OnPaint();
 }
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR Cdui_mfcDlg::OnQueryDragIcon()
{
 return static_cast<HCURSOR>(m_hIcon);
}


void Cdui_mfcDlg::Notify(DuiLib::TNotifyUI& msg)
{
    if( msg.sType == _T("windowinit") ) OnPrepare();
    else if( msg.sType == _T("click") ) {
        if( msg.pSender->GetName() == _T("insertimagebtn") ) {
            DuiLib::CRichEditUI* pRich = static_cast<DuiLib::CRichEditUI*>(m_pm.FindControl(_T("testrichedit")));
            if( pRich ) {
                pRich->RemoveAll();
            }
        }
        else if( msg.pSender->GetName() == _T("changeskinbtn") ) {
            if( DuiLib::CPaintManagerUI::GetResourcePath() == DuiLib::CPaintManagerUI::GetInstancePath() )
                DuiLib::CPaintManagerUI::SetResourcePath(DuiLib::CPaintManagerUI::GetInstancePath() + _T("skin\\FlashRes"));
            else
                DuiLib::CPaintManagerUI::SetResourcePath(DuiLib::CPaintManagerUI::GetInstancePath());
            DuiLib::CPaintManagerUI::ReloadSkin();
        }
    }
}

LRESULT Cdui_mfcDlg::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
{
    if( uMsg == WM_ERASEBKGND )
    {
        return true;
    }

    return false;
}
BOOL Cdui_mfcDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    bool bHandled = false;
    MessageHandler(pMsg->message, pMsg->wParam, pMsg->lParam, bHandled);
    if (bHandled)
    {
        return true;
    }
    else
    {
        LRESULT lresult = 0;
        if (m_pm.MessageHandler(pMsg->message, pMsg->wParam, pMsg->lParam, lresult))
        {
            return lresult;
        }
    }

    return __super::PreTranslateMessage(pMsg);
}

int Cdui_mfcDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (__super::OnCreate(lpCreateStruct) == -1)
        return -1;

    // TODO:  Add your specialized creation code here
    m_pm.Init(m_hWnd);
    DuiLib::CDialogBuilder builder;
    DuiLib::CControlUI* pRoot = builder.Create(_T("test1.xml"), (UINT)0, NULL, &m_pm);
    ASSERT(pRoot && "Failed to parse XML");
    m_pm.AttachDialog(pRoot);
    m_pm.AddNotifier(this);

    return 0;
}






posted on 2013-05-28 23:42 Enic 閱讀(8304) 評(píng)論(1)  編輯 收藏 引用 所屬分類: Duilib

評(píng)論

# re: Duilib在MFC中使用[未登錄](méi) 2013-11-19 00:05 王小亮
學(xué)習(xí)了。。  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产一区在线| 亚洲国语精品自产拍在线观看| 樱花yy私人影院亚洲| 另类天堂av| 欧美精品一区二区三区很污很色的 | 欧美三级电影精品| 欧美一级午夜免费电影| 久久久久久久综合狠狠综合| 亚洲黄色有码视频| 亚洲在线日韩| 亚洲精品一区二区三| 亚洲永久视频| 日韩网站在线| 久久久久久69| 性久久久久久久久| 欧美激情一区二区三区成人| 久久精品噜噜噜成人av农村| 欧美国产一区二区| 麻豆精品在线观看| 国产精品日韩高清| 午夜免费电影一区在线观看| 欧美日韩亚洲综合| 中文精品一区二区三区| 欧美在线一级va免费观看| 国产精品久久久久毛片大屁完整版 | 日韩一级精品| 亚洲国内精品在线| 欧美日韩免费一区二区三区| 亚洲精品日韩精品| 亚洲在线中文字幕| **欧美日韩vr在线| 国产精自产拍久久久久久蜜| 亚洲一区在线播放| 欧美精品aa| 欧美专区亚洲专区| 99re热精品| 久久综合一区二区| 日韩网站免费观看| 亚洲三级毛片| 国产精品国产三级欧美二区| 久久免费视频在线| 久久久久久精| 欧美成人蜜桃| 欧美色一级片| 性欧美长视频| 亚洲美女色禁图| 99国产精品| 欧美大片在线观看一区| 国产精品久久久一区麻豆最新章节 | 在线亚洲一区观看| 欧美激情小视频| 亚洲国产欧美久久| 精品动漫3d一区二区三区免费版| 午夜亚洲性色福利视频| 欧美中文字幕| 国产亚洲欧美日韩日本| 亚洲欧美一区二区三区在线| 欧美在线国产| 国产亚洲永久域名| 久久久久久久久久久久久9999| 久热re这里精品视频在线6| 国产亚洲电影| 久久婷婷蜜乳一本欲蜜臀| 欧美国产丝袜视频| 99xxxx成人网| 极品av少妇一区二区| 久久久美女艺术照精彩视频福利播放| 久久精品视频在线看| 狠狠色综合播放一区二区| 久久久福利视频| 亚洲高清一区二区三区| 亚洲肉体裸体xxxx137| 欧美a级片网站| 一区二区三区不卡视频在线观看| 亚洲欧美在线免费| 狠狠色狠狠色综合系列| 欧美第一黄色网| 亚洲特色特黄| 老鸭窝91久久精品色噜噜导演| 91久久精品美女高潮| 欧美日韩国产成人精品| 亚洲欧美日韩国产中文在线| 裸体一区二区| 一本久久青青| 国内精品久久久久久| 免费成人在线观看视频| 久久久久九九视频| 久久综合久色欧美综合狠狠 | 国产精品免费aⅴ片在线观看| 夜夜嗨av一区二区三区中文字幕| 亚洲欧美在线aaa| 亚洲国产精品123| 国产精品成人观看视频免费| 欧美在线视频一区二区三区| 美玉足脚交一区二区三区图片| 中文精品视频一区二区在线观看| 国产视频久久久久久久| 欧美欧美天天天天操| 久久精品国内一区二区三区| 99精品免费网| 欧美激情一区二区三区高清视频| 性感少妇一区| 亚洲美女一区| 国产一区二区精品久久91| 欧美激情一区二区在线| 校园激情久久| 亚洲精品资源| 麻豆精品在线视频| 午夜精品视频在线观看一区二区| 亚洲福利视频网站| 国产视频一区在线观看一区免费| 欧美精品一卡| 老司机成人在线视频| 亚洲免费在线观看视频| 亚洲毛片一区| 亚洲国产欧洲综合997久久| 久久激五月天综合精品| 亚洲男人的天堂在线观看| 日韩午夜激情电影| 亚洲经典三级| 亚洲成人在线| 精品av久久707| 国产日韩精品一区二区浪潮av| 欧美日韩国产丝袜另类| 久久综合中文字幕| 久久狠狠婷婷| 亚洲综合999| 亚洲免费观看在线观看| 欧美电影免费观看高清完整版| 久久成人18免费网站| 亚洲欧美日韩国产一区| 亚洲一区观看| 亚洲午夜影视影院在线观看| 亚洲欧洲一区二区三区在线观看| 国产日韩三区| 国产日韩视频| 国产偷国产偷亚洲高清97cao| 国产精品视频观看| 欧美视频不卡中文| 欧美日韩国产成人在线91| 久久综合中文| 欧美成人有码| 欧美日本一道本| 欧美视频在线一区| 国产精品美女www爽爽爽| 国产精品久久久久久超碰| 欧美久久在线| 欧美性大战久久久久| 国产精品www网站| 国产精品三级视频| 国产视频久久久久久久| 国产自产v一区二区三区c| 国产欧美二区| 狠狠色狠狠色综合人人| 亚洲第一视频| 夜夜嗨av一区二区三区| 亚洲综合视频一区| 久久国产精品黑丝| 美女免费视频一区| 亚洲日本欧美| 亚洲一区二区在线观看视频| 亚洲欧美一区二区三区在线| 亚洲欧美成人网| 国产精品综合av一区二区国产馆| 欧美二区视频| 最新国产乱人伦偷精品免费网站| 日韩亚洲一区二区| 亚洲欧美国内爽妇网| 欧美制服丝袜第一页| 男人的天堂亚洲在线| 欧美精品久久久久久久久老牛影院| 欧美日本免费| 国产私拍一区| 91久久精品日日躁夜夜躁国产| 一区二区三区产品免费精品久久75 | 久久视频精品在线| 欧美顶级艳妇交换群宴| 亚洲美女在线视频| 香蕉av福利精品导航| 免费精品99久久国产综合精品| 欧美三区在线观看| 国产亚洲欧美中文| 日韩小视频在线观看专区| 欧美亚洲在线播放| 亚洲黄色天堂| 久久久精彩视频| 国产精品国产a级| 亚洲东热激情| 午夜精品av| 亚洲黄色影院| 欧美一级电影久久| 欧美日本在线观看| 激情文学一区| 欧美一进一出视频| 亚洲卡通欧美制服中文| 久久最新视频| 国产一区二区日韩| 亚洲制服丝袜在线| 亚洲人成网站色ww在线| 久久看片网站|